Linux — 命令行

概要 #

文档可参考 the-art-of-command-line / 命令行的艺术

如今有 AI 了,作者觉得正确使用命令的方法应该是了解有哪些命令能做什么,然后详细的参数由 ChatGPT 提供即可,不需要记住大量选项,高频使用的命令自然而然会记住。另外比较重要的命令我都打上了✨ ,一般都是遇到问题时需要快速调试必需的。

awk #

AWK 镇楼

cat table.csv | awk -F',' '{print $4}'

alias #

下面是我在 .zshrcalias 相关配置,非常实用。

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的用法指南

不带有任何参数时,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 -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 #

xargs 命令教程 - 阮一峰的网络日志

zip #

压缩文件工具。

本文共 1863 字,上次修改于 Mar 26, 2024
相关标签: Linux, Shell