我的 Linux 基础命令速查表

未经授权,不得全文转载。转载前请先阅读本站版权声明

前言(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>

参考(Bibliographies)

引用(References)


  1. IBM DeveloperWorks - 使用 lsof 查找打开的文件

Star Blog on GitHub