医疗视角下的 Linux - 02 Linux 命令手册
感谢娄老师精心制作的 MarkdownFlow 教程!蹭课生学习后记了笔记,欢迎接龙 😃
不当之处,欢迎指正!
Linux 命令格式
Linux 命令的格式为:
command[options][arguments(args)]- command(命令):要执行的核心操作,如
ls(列出文件); - option(选项):通常以
-(短选项)或--(长选项)开头,用来调整命令的行为,如ls -l表示以长格式列出文件属性; - argument / args(参数):命令的作用对象,通常是文件名、目录名等。如
ls /home表示列出/home目录下的文件; - 中括号表示可选(即有些命令不需要选项和参数)。
例如 ls 命令,ls -a中的-a就是选项,ls .中的.就是参数,表示当前目录,该参数是默认的(即,可加可不加),所以该命令等价于ls。
Linux 核心命令
系统命令
who(我是谁)
查看当前有哪些用户登录了系统。
# 1. 查看当前登录用户(像查看今天谁值班)# 输出登录用户的用户名、终端标识、登录时间who# 2. 显示详细信息(像查看详细的考勤记录)# 在 who 输出的基础上,增加登录进程 ID 等信息who-awhereis / which(命令在哪)
定位一个命令的安装位置。二者区别如下:
whereis:查找更全面。不仅显示命令的可执行文件路径,还通常会显示其 man 手册和源代码路径(若存在)。root@LAPTOP-XX:~# whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gzwhich:更常用且专注。只在环境变量PATH指定的目录中搜索,指出当输入这个命令时,系统会执行哪个文件。这在存在多个版本的命令时很有用。
如:which python输出/usr/bin/python,即指出系统默认使用这个 Python 版本。
查看系统发行版信息
lsb_release-a自学神器:man 命令
man(manual) 是 Linux 世界最权威和全面的内置说明(帮助)文档,堪称Linux 中最强大的自学工具。遇到不熟悉的命令,可以先执行man 命令名看一下官方说明。
# 查看 man 命令本身的说明manmanman 命令的参数(命令的作用对象)通常是程序、工具或函数的名称,系统会查找并显示指定参数关联的手册页。如果提供了章节编号(section),则会只在该章节进行查找。
系统默认会按照预定义的顺序查找所有可用的章节,然后只显示找到的第一个页,即使多个章节都有这个页面。
# 不同章节的区别man1printf# 第1章:用户命令man3printf# 第3章:库函数章节编号对应的手册页面类型:
1 可执行程序或 shell 命令:普通用户可以在 Shell 中执行的命令,eg:ls,cd…
2 系统调用(内核提供的函数):如open,read…
3 库调用(C语言标准库等函数库提供的函数):如printf,fopen…
4 特殊文件(通常在 /dev 下的设备文件)
5 文件格式和规范:配置文件的格式说明,如/etc/passwd
6 游戏
7 杂项(含 macro packages 和 conventions),如 man(7), groff(7)
8 系统管理命令(一般仅用于 root):如ifconfig,fdisk…
9 内核 routines[非标准]
同一个命令或工具名可能出现在不同章节,如:
man 1 printf:查看 Shell 命令printf,用于格式化输出文本;man 3 printf:查看 C 语言库函数printf,用于在 C 程序中格式化输出;- 若仅输入
man printf,默认显示的是编号最小的章节,即man 1 printf的内容。
手册页面的内容结构
一个手册页面含多个小节,通常包含:
- 名称(name):命令的名字和简要说明;
- 概述(synopsis):命令的语法格式,指出选项怎么用;
- 配置(configuration)、描述(description):详细解释命令和每个选项的功能;
- 示例(examples):一些使用示例(不是每个 man 页面都有);
- 亦见(see also):相关的命令
此外,还经常包含选项(option)、退出状态(exit status)、返回值(return value)、错误(errors)、环境、文件、版本、标准(conforming to)、注释(notes)、bugs、和作者等信息。
在页面中输入
/关键词,可以查找该关键词的所有匹配项,按 n、N 分别跳转到下一个/上一个。
手册页中指定的命令书写规范
手册页面的概述小节(有时也用于其他小节)通常会在某些内容上赋予特殊格式,表示在写命令的这部分内容时要遵循某种书写规范。
| 特殊格式 | 书写规范 |
|---|---|
| 加粗文本 | 按原样输入 |
| 倾斜文本 | 替换为合适的参数 |
| [-abc] | “[ ]” 中的任何甚至全部参数都是可选的 |
| -a|-b | 被 “|” 分隔的选项不能同时使用 |
| 参数 | 带有下划线的参数是可重复的 |
| [表达式] | “[ ]” 中的整个表达式可以重复 |
常用选项
man <1~6> <keyword>:在指定编号的手册章节中,查找包含指定关键词的页面;man -k <keyword>或apropos <keyword>:查找并列出手册中与给定关键词相关的命令/函数;man -k <key1> | grep <key2> | grep <key3> | ...:找到指定页面后使用关键词筛选指定内容;man -f 命令或whatis:查看命令的简要说明;man -a 命令:显示该命令在所有章节中的手册(按章节编号的顺序);
man,info,--help的区别和联系
man:最常用、最标准的文档,内容精炼,格式统一,是首选;info:某些 GNU 项目的文档跟详细,采用超链接形式,适合阅读复杂软件的手册。可以理解为 “带目录的电子书”;命令 --help:最快的查看方式,通常只列出命令的选项和简要用法,适合快速查阅。如:ls -h。
使用建议:
先尝试
命令 --help快速看选项,如果不明白,再用man 命令看详细说明,如果还不够,再用info 命令。
目录管理
ls(查看目录)
功能:列出指定目录(默认为当前目录)下的文件和子目录。结果默认按字母顺序排序。
用法:
ls:只列出文件名(不包含隐藏文件)
ls -a:在 ls 基础上,包括隐藏文件
ls -l:列出文件权限、所有者、文件大小、修改时间等详细信息
ls -l /etc:列出指定的 /etc 目录的详细信息
pwd(从哪里来)
查看当前所在位置。
# 1. 输出当前所在目录pwd# 2. 输出物理路径/真实地址(避免符号链接的干扰)pwd-P# 3. 在脚本中使用current_dir=$(pwd)绝对路径 VS 相对路径:
- 绝对路径:从根目录
/开始的完整路径;- 相对路径:相对于当前所在目录的路径,其中:
.代表当前目录。如./script.sh表示当前目录下的script.sh文件;..代表上级目录。如../project表示上级目录下的project文件夹。注意:直接在命令中写文件名/目录名,也是相对路径。例如
cat file.txt就是寻找当前目录下的file.txt。
cd(到哪里去)
跳转到其他目录。
cd目录名# 进入到指定目录cd.# 留在当前位置cd..# 返回上级目录cd~# 回到家目录cd/# 进入根目录(文件系统的起点)cd-# 返回上一次所在的目录(就像执行一次 “后退”)高级技巧:CDPATH
这是一个环境变量,可以在里面填一个目录列表。系统执行使用cd 目录名时,不仅会在当前目录下查找,还会在CDPATH指定的目录列表下查找。相当于设定了几个常用的查找入口。
eg:做出如下设置后:
# 把家目录、~/Projects 设为常用搜索入口exportCDPATH=.:~:~/Projectsmkdir -p
用来创建多层目录,核心功能有两个:
- 递归地创建多层目录,中间目录不存在时也能一次性创建
- 目标目录已存在时不报错,也不会覆盖原目录(
mkdir会报错)
文件管理
touch
touch的主要功能有两个:
- 更新文件的时间戳(timestamp)
- 包括访问时间(
atime)和修改时间(mtime)。 - 如果文件已经存在,
touch只会更新这些时间,不会修改内容。
- 包括访问时间(
- 创建空文件
- 如果文件不存在,
touch会新建一个空文件(即 0 字节文件)。
- 如果文件不存在,
find / locate(文件在哪)
find 命令在指定目录中递归地查找文件/目录。
# 按文件名(以.txt结尾)查找find/home-name"*.txt"# 还可在命令末尾添加 `-ls` 来显示找到文件的详细信息# 按文件类型(f 表示普通文件)+文件名(以.pdf结尾)查找find.-typef-name"*.pdf"# 按文件大小查找(+1M 表示大小超过 1MB 的文件)find/var/log-size+1M# 按修改时间查找(-7表示修改时间在最近7天内,+7表示7天以前,7表示正好在第7天前)find.-mtime-7# 对找到的文件,不经确认提示直接删除,删除不可恢复(极度危险,不建议使用,建议先预览再删除)find.-name"*.log"-execrm{}\;# 同上,直接删除查找结果(更不容易写错,依然建议先预览再删除)find.-name"*.tmp"-deletelocate 像 Windows 下的 Everything 软件,基于数据库快速搜索(搜索前需要先更新数据库:updatedb)。
grep(全文检索)
grep 命令使用正则表达式在文件中查找指定模式的内容。
# 在文件中搜索包含指定关键词的行grep"tmux".zshrc# 增加显示行号grep-n"tmux".zshrc# 在指定目录下的所有文件中,搜索包含指定关键词的行grep-r"json"./issue2md|lessLinux 常用命令
od 命令 - 文件内容查看器
od 命令就像医院的化验仪器,可以查看文件的原始编码格式。
# 1. 以八进制格式查看文件(默认)od file.txt# 2. 以十六进制和 ASCII 格式查看od-xfile.txt# 3. 查看二进制文件的结构od-cbinary_fileecho 命令 - 文本输出器
echo 命令就像医院的广播系统,用于输出文本信息。
# 1. 基本文本输出echo"Hello World"# 2. 不换行输出(-n选项)echo-n"正在处理..."# 3. 解释转义字符(-e选项)echo-e"第一行\n第二行\t制表符"more/less 命令 - 文件查看器
more 和 less 就像高效的病历翻阅工具,用于查看长文件。
# 1. 分页查看文件(more)morelong_file.txt# 2. 更强大的查看器(less)lesslogfile.log# 3. 查看并搜索(less 支持搜索)lessfile.txt# 在 less 中按 / 输入搜索词,按 n/N 查找下/上一个head/tail 命令 - 文件首尾查看器
head 和 tail 就像查看病历的开头和结尾。
# 1. 查看文件前 10 行(默认)headfilename.txt# 2. 查看文件前 5 行head-n5filename.txt# 3. 查看文件后 10 行(默认)tailfilename.txt# 4. 查看文件后 20 行tail-n20filename.txt# 5. 实时查看日志文件更新tail-flogfile.logsort 命令 - 排序工具
sort 命令就像病历整理系统,对内容进行排序。
# 1. 按字母顺序排序sortnames.txt# 2. 按数字大小排序sort-nnumbers.txt# 3. 反向排序sort-rfile.txt# 4. 去重排序sort-uduplicates.txt# 5. 按第二列排序sort-k2data.txtcut 命令 - 字段提取器
cut 命令就像从病历中提取特定种类的信息。
# 1. 按字符位置截取(取每行第 1-10 个字符)cut-c1-10 file.txt# 2. 按指定的分隔符提取字段(指定逗号作为分隔符,取第1、3列)cut-d','-f1,3data.csv# 3. 以 tab 作为分隔符提取特定列(取第1-3列)cut-f1-3 tab_file.txtcp 命令 - 文件复制器
cp 命令就像复印机。
# 1. 复制单个文件cpsource.md destination.md# 2. 复制整个目录cp-rdir1 dir2# 3. 交互式复制(若 file2 已存在,会先询问再覆盖)cp-ifile1 file2# 4. 保留文件属性(权限、时间戳、所有者等)cp-pimportant_file ~/rm 命令 - 文件删除器
rm 命令就像病历销毁机,用来删除文件/目录,使用前要谨慎。
# 1. 删除单个文件rmunwanted_file.md# 2. 递归地删除目录(中所有文件)rm-rold_dir# 3. 强制删除(不提示)rm-flocked_file# 4. 交互式删除(更安全)rm-iimportant_dir/*rmdir 命令 - 空目录删除器
rmdir 命令专门删除空目录。
# 1. 删除空目录rmdirempty_dir# 2. 删除多级空目录rmdir-ppath/to/empty/dir# 3. 显示删除过程rmdir-vdir1 dir2file 命令 - 文件类型识别器
file 命令就像文件类型检测仪。
# 1. 识别文件类型fileunknown_file# 2. 识别多个文件filefile1 file2 file3# 3. 在原有识别基础上,继续识别文件的编码格式file-iimage.jpgfree 命令 - 内存空间查看器
free 命令就像内存使用检测仪。
# 1. 以易读格式显示内存free-h# 2. 实时监控内存变化(每5秒刷新一次)free-s5df 命令 - 磁盘空间查看器
df 命令就像磁盘容量表。
# 1. 显示磁盘分区使用情况(总大小、已用、剩余、挂载点)df-h# 2. 在上面基础上,增添显示文件系统类型df-Th# 3. 显示指定磁盘分区使用情况df-h/homedu 命令 - 硬盘使用分析器
du 命令就像硬盘使用扫描仪。
# 1. 统计指定目录下所有文件/子目录的硬盘占用大小(最后一行是该目录占用的总空间)du-h/home/user# 2. 在上面基础上,增加显示隐藏文件du-ah/home/user# 3. 只显示总大小,不列出每个文件(常用)du-sh/home/usermv 命令 - 文件移动/重命名
mv 命令就像文件搬运工。
# 1. 重命名文件mvoldname.txt newname.txt# 2. 移动文件到指定目录mvfile.txt /target/dir# 3. 移动多个文件mvfile1 file2 file3 /destinationping 命令 - 网络连通性测试器
# 1. 基本连通性测试pinggoogle.com# 2. 指定次数测试ping-c5baidu.com# 3. 每隔一定时间测试一次ping-i2baidu.comhistory 命令 - 历史命令查看器
# 1. 查看最近的命令历史history# 2. 查看最近 10 条命令history10# zsh 中应替换为 history -10# 3. 执行历史命令(!编号)!123# 4. 搜索历史命令history|grep"ssh"总结
上述这些命令就像工具箱中的各种工具(就像已上市的各种药品)。
记住每个命令的基本用法,在实际工作中灵活组合使用,就像医生根据病情选择合适的药品一样。
多练习这些命令,你会发现自己处理文件和管理操作系统的能力越来越强。
