前言(Intro)
这是一份随时更新的列表,列出了一些常用的命令组合,供自己日常使用查阅,欢迎交流。
本文内容整合在我的命令速查表 中,可以使用 chrisallenlane/cheat 来快速查询命令。
用户
ls
1 2 | # 显示当前目录下的所有一级子目录 ls -d */ |
管道、流
|
> (重定向)
当采用 >> 符号做输出重定向时,新的内容会追加在目标文件的尾部
< 从右到左输出。
重定向里用到的数字被称作文件描述符 (File Descriptor)。文件描述符与一个具体的文件相关联,它的作用就是给相应的文件操作函数提供一个目标即操作哪个文件。在 POSIX 标准中,文件描述符都是一个数字,并且有三个特殊的文件描述符他们是:
- 0,Standard Input,stdin 中文名称是标准输入
- 1,Standard Output,stdout 中文名称是标准输出
- 2,Standard Error,stderr 中文名称是标准错误输出
1 2 3 4 5 | # 将标准输出和标准错误输出都输出到 file 文件中去 command 2>&1 >file # 同上 command &>file |
1 2 | # 将标准错误输出丢弃 command 2>/dev/null |
tee
sed
awk
grep
xargs
系统
wc
1 2 3 4 5 6 7 8 | # 计算文件行数 wc -l <file> # 计算字符个数 wc -m <file> # 计算单词个数 wc -w <file> |
realpath
Mac 用户需要安装 coreutils 来获得 realpath。
查看文件(真实)完整路径。意味着软链接将输出真实路径。
1 | realpth <file> |
lsof
查看任何文件信息(注意 Linux 里一切皆文件)
1 2 3 4 5 | # 查看本地端口占用 lsof -i :<port> # 查看本地 TCP 端口占用 lsof -i TCP:<port> |
1 2 | # 查看某个用户打开的所有文件信息 lsof -u <username> |
1 2 | # 查看某个命令所关联的所有文件信息 lsof -c <command> |
1 2 | # 查看某个进程的所有信息 lsof -p <pid> |
1 2 | # 查看某个文件正在被什么进程使用 lsof <file> |
你甚至可以使用它来找到被删除的文件!(前提是有某个进程正在使用这个文件)
当 UNIX 计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以恢复这些文件,并且 lsof 可以为您提供帮助。
当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录条目。[1]
Linux 的优点在于,它保存了文件的名称,甚至可以告诉我们它已经被删除。在遭到破坏的系统中查找相关内容时,这是非常有用的内容,因为攻击者通常会删除日志以隐藏他们的踪迹。[1]
题外话,其实 lsof 大部分信息都来自于 /proc/ 目录,然而 /proc/ 目录并非 unix/linux 标准,像 Mac OSX、FreeBSD 等系统,都没有 /proc/。
网络
nc (netcat)
C/S 模式的网络工具,通常用于查看端口,但还能做其他事情。
1 2 3 4 5 | # 查看远端地址是否开启端口 # -v 详细信息 # -z 用来扫描端口时,不发送任何数据 # -u 默认是 TCP,加这个参数使用 UDP nc -vz <host> <port> |
1 2 | # 简易服务器,监听端口,并将结果输出到文件 nc -l <port> > output |
1 2 | # 建立 TCP 链接,然后你就可以发送数据了 nc <host> <port> |
编辑
less
is more
nl
给文件插入行号
1 2 | # 给非空行插入行号 nl <file> |
1 2 | # 给所有行插入行号 nl -b a <file> |
登录 | 立即注册