概要 #
文档可参考 the-art-of-command-line / 命令行的艺术
如今有 AI 了,也就不需要记住大量选项,高频使用的命令自然而然会记住。
awk #
AWK 镇楼
cat table.csv | awk -F',' '{print $4}'
alias #
下面是我在 .zshrc
的 alias
相关配置,非常实用。
alias a='. venv/bin/activate'
alias 'cd..'='cd ..'
alias cdr='cd-gitroot'
alias o='open .'
alias ctags='/usr/local/Cellar/ctags/5.8_1/bin/ctags'
alias s="/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl"
alias merge="/Applications/Sublime\ Merge.app/Contents/SharedSupport/bin/smerge"
alias c="~/.cargo/bin/cargo"
alias p=pyhton3
alias i=ipython
alias lg='lazygit'
alias d=docker
alias de=deactivate
alias k=kubectl
alias gg=gitup
alias f=fuck
alias ts=ts-node
alias my="mycli -uroot -p 12345678 -h localhost"
alias stree='/Applications/SourceTree.app/Contents/Resources/stree'
alias x="sudo xattr -r -d com.apple.quarantine"
cat #
comm #
命令用于比较两个已排过序的文件,不常见但很有用。
- -1 不显示只在第 1 个文件里出现过的列。
- -2 不显示只在第 2 个文件里出现过的列。
- -3 不显示只在第 1 和第 2 个文件里出现过的列。
cURL #
不带有任何参数时,curl 就是发出 GET 请求。
curl yindongliang.com
-d
用来发送 post 请求。
-H
用来添加 header
cp #
# 选项 -i 会在 overwrite 前弹出 prompt 提示
cp -i
du #
(usage) Linux du (英文全拼:disk usage)命令用于显示目录或文件的大小。 du 会显示指定的目录或文件所占用的磁盘空间。
df #
(file) Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
diff #
env #
find ✨ #
file #
file
命令用于查看文件类型。
练习:统计 Python 项目中行数最多的 n 个文件
find . -path ./venv -prune -o -name '*.py' |xargs wc -l|sort -r |tail -n +2|head -n 2|tail -n +5
grep ✨ #
head #
head -3 log_file
# equal to
head -n 3 log_file
history #
查看最近使用过的命令。需要注意的是,在会话期间,命令的记录记录只会保存在内存中,当 Shell 退出时才被写入历史文件 .bash_history
。如果在不退出时强制写入文件,可以在开启 Shell 后运行 history -a
命令。
jobs #
ln #
软链接和硬链接的区别
- 软链接指向同一文件名的地址
- 硬链接指向文件内容块的地址
- 删除源文件后软链接失效,硬链接依然有文件
less #
less is more.
less
命令是 more
的升级版。
more #
ps ✨ #
ps -ef |grep kafka
# 输出格式UID PID PPID C STIME TTY TIME CMD
ps -aux|grep mysql
# 输出格式:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
显示所有包含其他使用者的行程,可以看到 CPU 和内存使用率
rm #
rm -i f?ll
-i
选项会询问你是否真的要删除该文件。Shell 没有回收站的概念,文件一旦被删除,就再也找不回来了,所以使用 -i
是一个好习惯。
rmdir #
rmdir
只能删除空目录。
systemctl #
service #
su #
su - root 切换用户身份
su 命令和 su - 命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。
sed #
echo "This is a test" | sed 's/test/big/ test/'
This is a big test
本例中使用了替换(s)命令,即:big test 替换了 test 。
sort #
求文件的交集、并集
- -b 忽略每行前面开始出的空格字符。
- -c 检查文件是否已经按照顺序排序。
- -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
- -f 排序时,将小写字母视为大写字母。
- -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
- -m 将几个排序好的文件进行合并。
- -M 将前面3个字母依照月份的缩写进行排序。
- -n 依照数值的大小排序。
- -u 意味着是唯一的(unique),输出的结果是去完重了的。
- -o<输出文件> 将排序后的结果存入指定的文件。
- -r 以相反的顺序来排序。
-t<分隔字符>
指定排序时所用的栏位分隔字符。- +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help
显示帮助。--version
显示版本信息。-k field1[,field2]
按指定的列进行排序。
交集
sort a.txt b.txt | uniq -d
并集
sort a.txt b.txt | uniq
差集
a.txt-b.txt:
sort a.txt b.txt b.txt | uniq -u
b.txt - a.txt:
sort b.txt a.txt a.txt | uniq -u
top #
top -p 1234 查看指定进程的状态
tcpdump #
tar #
# 将 test 和 test2 目录打包进 test.tar 文件
tar -cvf test.tar test/ test2/
# 列出 test.tar 中的文件。
tar -tf test.tar
# 将 test.tar 中的文件提取出来
tar -xvf test.tar
# 其他选项,涉及压缩
tar -zxvf
tar -Jxvf filename.tar.xz
tar -Zxvf filename.tar.zip
tail #
tail -f server.log
tail -n 2 log_file
ufw #
ufw 命令是 Ubuntu 的防火墙工具。比如:打开 5432 端口:
sudo ufw status
sudo ufw allow 5432
sudo ufw enable
uniq #
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
删除文件中重复的行
uniq file1
-c
或--count
在每列旁边显示该行重复出现的次数。-d
或--repeated
仅显示重复出现的行列。-f<栏位>
或--skip-fields=<栏位>
忽略比较指定的栏位。-s<字符位置>
或--skip-chars=<字符位置>
忽略比较指定的字符。-u
或--unique
仅显示出一次的行列。-w<字符位置>
或--check-chars=<字符位置>
指定要比较的字符。--help
显示帮助。--version
显示版本信息。- [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
- [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
unset #
wc #
xargs #
zip #
压缩文件工具。