想象一下,Linux就像一座无尽的宝藏岛,而你,就是那位勇敢的探险家。但是,面对岛上成千上万的神秘洞穴(也就是那些让人眼花缭乱的命令),即使是经验最丰富的寻宝者,也难免会迷失方向,仿佛是在浩瀚的大海中捞针一样艰难。
我们深知,每一位Linux用户心中都有一张梦寐以求的地图,能够指引他们快速找到所需的宝藏(命令)。因此,本文立志成为你的私人宝藏地图,它不仅会帮你梳理那些最常用、最实用的命令,还会深入挖掘它们的应用场景,让你从此无需大海捞针,轻松成为Linux世界的探险高手!
文件和目录操作
ls
:列出目录内容
- 参数:
-a
:显示所有文件,包括以.
开头的隐藏文件-l
:使用长列表格式显示-h
:与-l
一起使用,以人类可读的格式显示文件大小-t
:按修改时间排序-R
:递归列出所有子目录的内容-S
:按文件大小排序-F
:显示文件类型的指示符(例如,/
表示目录)
- 示例:
ls -lah # 显示所有文件,长列表格式,人类可读大小
cd
:更改当前工作目录
-
参数:
- 无参数:如果未指定目录,则切换到当前用户的主目录
- 相对路径或绝对路径:指定要切换到的目录的路径
~
或$HOME
:切换到当前用户的主目录..
:切换到上一级目录-
:切换到上一个工作目录
-
示例:
cd /path/to/directory # 切换到指定目录 cd - # 切换到上一个目录
cp
:复制文件或目录
- 参数:
-r
或--recursive
:递归复制目录-i
:交互式复制,在覆盖时提示-v
:详细模式,显示复制进度-p
:保留原文件的属性-u
:只有源文件比目标文件新,或者目标文件不存在时,才复制--preserve=all
:保留所有文件属性
- 示例:
cp -r --preserve=all source_dir destination_dir # 递归复制目录并保留所有属性 cp -u file1 file2 # 只有当file1比file2新时,才复制
mv
:移动或重命名文件或目录
- 参数:
-i
:交互式移动,在覆盖时提示-v
:详细模式,显示移动进度-n
:不覆盖已存在的文件
- 示例:
mv -in file1 file2 # 在覆盖前提示,不覆盖已存在的文件
rm
:删除文件或目录
- 参数:
-r
或--recursive
:递归删除目录及其内容-f
或--force
:强制删除,不提示确认-v
:详细模式,显示删除进度
- 示例:
rm -rf directory # 强制递归删除目录
touch
:更新文件时间戳或创建新文件
- 参数:
-t
:设置特定的时间戳-m
:仅更改修改时间-a
:仅更改访问时间-c
:不创建新文件
- 示例:
touch -t 202401010000 file # 设置文件时间为2024年1月1日 touch -am file # 仅更新文件的访问时间
mkdir
:创建新目录
- 参数:
-p
:创建目录时,如果父目录不存在,也会创建父目录-v
:详细模式,显示创建的目录-m
或--mode
:设置目录的权限模式
- 示例:
mkdir -vp /path/to/new/directory # 显示创建的目录及其父目录 mkdir -m 0755 new_directory # 创建目录并设置为755权限
rename
:重命名文件或目录
- 参数:
-v
:详细模式,显示重命名前后的文件名-n
:模拟执行,仅显示将要执行的操作,不实际重命名-s
:去除文件名中的空格-u
:仅对源字符串不存在的文件进行重命名
- 示例:
rename 's/old/new/' * # 将当前目录下所有文件中的 "old" 替换为 "new" rename -v 's/\.old$/.new/' * # 显示重命名过程,将文件扩展名从 .old 改为 .new rename -n 's/\s+$//' * # 模拟去除所有文件名末尾的空格 rename -s ' ' '_' * # 将文件名中的空格替换为下划线 rename -u 's/backup/Backup/' * # 如果文件名中没有 "Backup" 则进行替换
tree
:以树状图列出目录内容
- 参数:
-a
:显示隐藏文件(以.
开头的文件或目录)-d
:只显示目录,不显示文件-f
:在输出中包括文件名-i
:忽略那些不存在的文件-l
:除了节点之外,还显示符号链接指向的目标-h
:以易读的格式显示文件大小(使用K、M等)-L <level>
:限制目录树的深度
- 示例:
tree # 列出当前目录下的树状图 tree -a # 包括隐藏文件的树状图 tree -d # 只显示目录的树状图 tree -f # 显示文件名的树状图 tree -i # 忽略不存在的文件的树状图 tree -l # 显示符号链接目标的树状图 tree -h # 以易读格式显示文件大小的树状图 tree -L 2 # 限制目录树深度为当前目录和下一级目录
rmdir
:删除空目录
- 参数:
-p
:删除目录时,如果父目录为空,也会递归删除
- 示例:
rmdir -p /path/to/empty/directory # 递归删除空目录及其空父目录
find
:在目录树中查找文件
- 参数:
-name
:按文件名查找-type
:按文件类型查找-newer
:查找比另一个文件更新的文件-user
:查找属于某个用户的文件-size
:按文件大小查找-exec
:对找到的文件执行指定的命令-perm
:按文件权限查找-not
:排除某些条件-o
:或者,用于组合条件-print
:显示文件-quit
:找到第一个匹配的文件后停止搜索
- 示例:
find /path/to/search -name '*.txt' -not -user username # 查找所有txt文件,但不是属于特定用户的 find / -size +10M -print -quit # 查找大于10MB的第一个文件并显示文件
locate
:查找文件系统中的文件
- 参数:
-b
:仅显示完整路径-e
:搜索时不区分大小写-r
:使用正则表达式搜索-i
:忽略文件名的大小写差异
- 示例:
locate filename.txt # 查找名为filename.txt的文件 locate -b filename.txt # 仅显示filename.txt的完整路径 locate -e pattern # 不区分大小写地搜索包含pattern的文件 locate -r '^/.*\.txt' # 使用正则表达式搜索所有txt文件 locate -i "File*" # 忽略大小写地搜索以File开头的文件名
file
:确定文件类型
- 参数:
-i
:显示文件的mime类型-b
:显示简洁的输出,仅文件名-m <magic file>
:使用指定的魔法文件来检查文件类型-v
:显示版本信息
- 示例:
file example.txt # 显示example.txt文件的类型 file -i example.txt # 显示example.txt文件的mime类型 file -b example.txt # 仅显示文件类型,不包含文件名 file -m /path/to/magic file_to_check # 使用自定义魔法文件检查文件类型 file -v # 显示file命令的版本信息
split
:拆分文件为多个部分
- 参数:
-b <大小>
:指定每个输出文件的大小,单位可以是K、M、G等-l <行数>
:指定每个输出文件包含的行数-d
:使用数字作为输出文件的后缀-a <长度>
:设置输出文件后缀的长度-n <份数>
:指定要创建的输出文件的数量--additional-suffix=<后缀>
:在输出文件名的末尾添加指定的后缀
- 示例:
split -b 10M bigfile.txt part # 按照10MB大小拆分bigfile.txt,并以part开头命名 split -l 1000 bigfile.txt part # 按照每1000行拆分bigfile.txt,并以part开头命名 split -d -a 2 -l 500 bigfile.txt part # 按照每500行拆分bigfile.txt,使用数字作为后缀
join
:合并两个文件的行
- 参数:
-a <option>
:指定要补充的文件,1
表示第一个文件,2
表示第二个文件,-a
表示两个文件都会显示未匹配的行-e <string>
:为未找到的字段指定替换字符串-o <list>
:指定要输出的字段列表-1 <number>
:指定第一个文件中用于比较的字段编号-2 <number>
:指定第二个文件中用于比较的字段编号
- 示例:
join file1.txt file2.txt # 默认情况下,合并两个文件中第一个字段相同的行 join -a 1 -e "NA" file1.txt file2.txt # 显示第一个文件中未匹配的行,用 "NA" 替换 join -o 1.1,2.2 file1.txt file2.txt # 只输出两个文件中指定的字段 join -1 2 -2 1 file1.txt file2.txt # 使用第一个文件的第二字段和第二个文件的第一字段进行比较
ln
:创建硬链接
或符号链接
- 参数:
-s
:创建符号链接而不是硬链接
- 示例:
ln -s /path/to/target /path/to/link # 创建指向目标的符号链接
rsync
:同步文件和目录
- 参数:
-a
:归档模式,等价于-rlptgoD
-v
:详细模式,显示更多的信息-z
:压缩数据,以减少数据传输量--dry-run
:进行模拟运行,不执行任何改变--exclude
:指定排除的模式--include
:指定包含的模式--delete
:同步时删除目标中的文件,如果它们在源中不存在
- 示例:
rsync -av /source/directory user@remote_host:/destination/directory # 同步本地目录到远程目录 rsync -avz /source/directory /backup/directory # 本地同步并压缩数据 rsync -av --exclude='*.log' /source/directory /destination/directory # 同步时排除所有日志文件 rsync -av --delete /source/directory /destination/directory # 同步并删除目标中的多余文件 rsync -av --dry-run /source/directory /destination/directory # 模拟同步过程,不执行任何操作
alias
:创建命令别名
- 参数:
- 无特定参数,通常格式为
alias 新命令='原命令'
- 无特定参数,通常格式为
- 示例:
alias ll='ls -l' # 创建别名ll为长列表格式的ls命令
unalias
:删除别名
- 参数:
- 别名名称:指定要删除的别名
- 示例:
unalias ll # 删除 'll' 别名
文件内容查看
cat
:查看或拼接文件内容
- 参数:
file
:指定要查看的文件-n
:显示行号-b
:与-n
类似,但跳过空行的行号显示-E
:在每行末尾显示$
,表示行结束
- 示例:
cat file.txt # 查看文件内容 cat -n file.txt # 显示行号 cat -b file.txt # 显示行号,跳过空行
more
:分页显示文件内容
- 参数:
file
:指定要查看的文件+N
:从第 N 行开始显示
- 示例:
more file.txt # 分页查看文件 more +10 file.txt # 从第10行开始显示
less
:分页显示文件内容,支持前后翻页
- 参数:
-N
:显示每行的行号+G
:直接跳转到文件末尾file
:指定要查看的文件
- 示例:
less file.txt # 分页查看文件,支持前后翻页 less -N file.txt # 显示行号 less +G file.txt # 直接跳转到文件末尾
head
:查看文件的开头部分
- 参数:
file
:指定要查看的文件-n [number]
:显示文件的前 number 行
- 示例:
head file.txt # 查看文件的前10行 head -n 20 file.txt # 查看文件的前20行
tail
:查看文件的尾部部分,常用于查看日志文件
- 参数:
file
:指定要查看的文件-n [number]
:显示文件的最后 number 行-f
:持续监控文件的新增内容
- 示例:
tail file.txt # 查看文件的最后10行 tail -n 20 file.txt # 查看文件的最后20行 tail -f file.txt # 实时显示文件新增内容
grep
:搜索文本并打印匹配行
- 参数:
-i
:忽略大小写-v
:显示不匹配的行-r
:递归搜索指定目录-n
:显示匹配行的行号pattern
:指定搜索的文本模式file
:指定要搜索的文件
- 示例:
grep -inwr 'pattern' file.txt # 忽略大小写搜索模式文本,显示匹配行及行号 grep -r 'pattern' /path/to/dir # 递归搜索目录中的模式
文件权限和所有权
chmod
:更改文件或目录的权限
- 参数:
u
:更改所有者权限g
:更改组权限o
:更改其他用户权限a
:表示所有用户(所有者、组和其他用户)+
或-
:添加或移除权限r
:读权限w
:写权限x
:执行权限mode
:权限设置 通常为三位数字或组合 如 777(读/写/执行)
- 示例:
chmod u+x file.txt # 为所有者添加执行权限 chmod 755 file.txt # 设置文件权限为所有者全部权限 组和其他用户读/执行权限 chmod g-rwx file.txt # 去除组的读写执行权限
chown
:更改文件或目录的所有者
- 参数:
user
:新的所有者用户名user:group
:新的所有者用户名和组名-R
:递归更改指定目录下的所有文件的所有者-f
:静默模式 不显示错误信息
- 示例:
chown user file.txt # 更改文件的所有者为 user chown user:group file.txt # 更改文件的所有者和组为 user:group chown -R user /dir # 递归更改目录的所有者为 user
chgrp
:更改文件或目录的组
- 参数:
group
:新的组名-R
:递归更改指定目录下的所有文件的组-f
:静默模式 不显示错误信息
- 示例:
chgrp group file.txt # 更改文件的组为 group chgrp -R group /dir # 递归更改目录及其内容的组为 group
sudo
:以超级用户权限执行命令
- 参数:
-u, --user=USER
:以指定的用户身份执行命令-s, --shell=SHELL
:使用指定的shell执行命令-l, --list
:列出用户能够通过sudo执行的命令
- 示例:
sudo -u root COMMAND
su
:切换到超级用户或其他用户
- 参数:
-c, --command=COMMAND
:执行指定的命令,然后退出-l, --login
:模拟完整的登录,包括环境变量的切换-m, -p
:保留环境变量,使用当前用户的登录shell
- 示例:
su -l
系统信息和状态
df
:显示磁盘空间使用情况
- 参数:
-h
:以人类可读的格式显示-a
:显示所有文件系统-H
:以易读的格式并以1024字节的单位显示
- 示例:
df -h df -a
du
:显示目录或文件的磁盘使用情况
- 参数:
-h
:以人类可读的格式显示-s
:仅显示总计-c
:显示总计并列出详细信息-m
:以兆为单位显示
- 示例:
df -h df -a
top
:实时显示系统进程信息
- 参数:
- 无特定参数,交互式操作
- 示例:
top
htop
:增强版的top命令
- 参数:
- 无特定参数,交互式操作,支持颜色和更多功能
- 示例:
htop
pgrep
:按名称查找进程
- 参数:
-f
:全名匹配,搜索完整命令行-l
:显示进程名称-u
:指定用户的进程-g
:指定进程组ID的进程
- 示例:
pgrep -f "command-name" # 根据完整命令行查找进程 pgrep -l "process-name" # 根据进程名查找并显示进程列表 pgrep -u username # 根据用户名称查找进程 pgrep -g group-id # 根据进程组ID查找进程
free
:显示内存使用情况
- 参数:
-m
:以兆为单位显示-g
:以吉咖为单位显示-h
:以人类可读的格式显示
- 示例:
free -m
uname
:显示系统信息
- 参数:
- -a:显示所有系统信息
- -s:显示内核名称
- -n:显示网络节点名称(主机名)
- 示例:
uname -a
last
:显示系统登录日志
- 参数:
-n <条数>
:显示最近的指定条数的登录记录-a
:显示所有登录系统的用户-i
:显示IP地址-f <文件>
:指定要分析的日志文件-t <日期>
:显示在指定日期之后的登录记录-s <日期>
:显示在指定日期之前的登录记录
- 示例:
last # 显示所有的登录记录 last -n 10 # 显示最近的10条登录记录 last -a # 显示所有登录系统的用户 last -i # 显示IP地址 last -f /var/log/wtmp.1 # 查看指定的日志文件 last -t 2023-01-01 # 显示在2023年1月1日之后的登录记录
磁盘管理
fdisk
:磁盘分区表操作
- 参数:
-l
:列出所有分区表-u
:显示磁盘和分区的启动标志和分区类型-s [磁盘]
:显示指定磁盘的分区大小-m
:以MB为单位显示分区大小
- 示例:
sudo fdisk -l # 列出所有分区表 sudo fdisk -u /dev/sda # 显示磁盘sda的分区信息 sudo fdisk -s /dev/sda1 # 显示分区sda1的大小 sudo fdisk -m /dev/sda # 以MB为单位显示磁盘sda的分区大小
mkfs
:创建文件系统
- 参数:
-t <type>
:指定文件系统类型,如ext4
、vfat
、ntfs
等-v
:详细模式,显示创建文件系统的进度-n <label>
:设置文件系统的卷标-F
:强制执行文件系统创建,即使设备可能已损坏-c
:检查设备是否有坏块,并在创建文件系统时避免使用它们- 示例:
sudo mkfs -t ext4 /dev/sdx1 # 在/dev/sdx1分区创建ext4文件系统 sudo mkfs -t vfat /dev/sdy1 # 在/dev/sdy1分区创建vfat文件系统,适用于FAT32 sudo mkfs -t ntfs /dev/sdz1 # 在/dev/sdz1分区创建ntfs文件系统,适用于Windows文件系统 sudo mkfs -v -n "MyDataDrive" /dev/sdx1 # 为ext4文件系统设置卷标并显示详细进度 sudo mkfs -F -t ext4 /dev/sdx1 # 强制创建ext4文件系统,忽略可能的损坏 sudo mkfs -c -t ext4 /dev/sdx1 # 在创建文件系统前检查并避免使用坏块
mount
:挂载文件系统
- 参数:
-o
:挂载选项-t <type>
:指定文件系统类型
- 示例:
sudo mount -t ext4 /dev/sdx1 /mnt/mydrive # 挂载分区到指定目录
umount
:卸载文件系统
- 参数:
-f
:强制卸载-v
:详细模式,显示卸载过程
- 示例:
sudo umount /mnt/mydrive # 卸载挂载的文件系统
dd
:复制和转换文件
- 参数:
if=<文件>
:指定输入文件(默认为标准输入)of=<文件>
:指定输出文件(默认为标准输出)bs=<字节数>
:设置缓冲区大小count=<块数>
:复制块的数量skip=<块数>
:跳过输入文件的块数seek=<块数>
:在输出文件中跳过块数
- 示例:
dd if=/dev/zero of=empty_file bs=1M count=1 # 创建一个1MB大小的空文件 dd if=/dev/sda of=disk_image.img # 创建磁盘设备的完整镜像 dd if=disk_image.img of=/dev/sdb bs=4M # 将磁盘镜像写入到另一个磁盘设备 dd if=input_file of=output_file bs=1024 skip=2 count=4 # 从文件中复制4个块,跳过前2个块
fsck
:文件系统检查和修复
- 参数:
-t <type>
:指定文件系统类型,如ext4
、xfs
等-y
:对于所有提示自动回答“yes”,用于修复或确认操作-A
:检查并修复所有文件系统-R
:仅做文件系统的状态报告,不执行修复
- 示例:
fsck /dev/sda1 # 检查指定的分区 fsck -y /dev/sda1 # 检查并自动修复 /dev/sda1 分区的问题 fsck -t ext4 /dev/sda1 # 指定文件系统类型为ext4,并检查 /dev/sda1 分区 fsck -A # 检查并修复所有文件系统 fsck -R /dev/sda1 # 报告 /dev/sda1 分区的状态,不进行修复
网络相关
ip
:显示和操作路由、网络设备、接口地址等,是ifconfig
和route
命令的现代替代品
- 参数:
-a
:显示所有网络接口的状态link
:显示或操作网络设备addr
:显示或操作接口地址route
:显示或操作路由表rule
:显示或操作路由规则
- 示例:
ip -a # 显示所有网络接口的状态 ip link show # 显示所有网络设备 ip addr show # 显示所有接口的地址 ip route show # 显示路由表 ip route add default via 192.168.1.1 # 添加默认路由 ip route del default # 删除默认路由
ping
:测试网络连接
- 参数:
-c <count>
:发送指定数量的ECHO请求-t <time>
:持续发送数据包,直到指定的时间-l <size>
:设置数据包的大小-i <TTL>
:设置数据包的生存时间(TTL)-w <timeout>
:设置等待每个回复的超时时间(毫秒)
- 示例:
ping example.com # 发送默认数量的数据包到example.com ping -t example.com # 持续发送数据包到example.com,直到手动停止 ping -c 4 example.com # 发送4个数据包到example.com ping -l 100 example.com # 发送大小为100字节的数据包到example.com ping -i 128 example.com # 设置数据包的生存时间为128 ping -w 1000 example.com # 设置等待响应的超时时间为1000毫秒
ifconfig
:配置或显示系统网络接口
- 参数:
-a
:显示所有网络接口,不论其是否激活-s
:显示接口的简短信息-up
:仅显示活动状态的网络接口-down
:仅显示非活动状态的网络接口hw
:设置网络设备的类型与硬件地址mtu
:设置网络设备的MTU(最大传输单元)netmask
:设置网络设备的子网掩码
- 示例:
ifconfig -a # 显示所有网络接口的配置 ifconfig eth0 up # 启动eth0网络接口 ifconfig eth0 down # 关闭eth0网络接口 ifconfig eth0 hw ether 00:1A:2B:3C:4D:5E # 设置eth0的硬件地址 ifconfig eth0 mtu 1500 # 设置eth0的MTU为1500字节 ifconfig eth0 netmask 255.255.255.0 # 设置eth0的子网掩码
dig
:查询DNS信息
-
参数:
@server
:指定查询的DNS服务器+short
:只显示简短的查询结果+noall
:不显示除查询结果外的其他信息+answer
:仅显示查询的答案部分
-
示例:
dig example.com # 查询example.com的DNS信息 dig @8.8.8.8 example.com # 使用Google的DNS服务器查询example.com dig +short example.com # 仅显示example.com的简短查询结果 dig +noall +answer example.com # 仅显示example.com的查询答案部分
nmcli
:NetworkManager命令行界面
- 参数:
-e
:以逗号分隔的输出格式-t
:以表格形式输出con
:操作网络连接dev
:操作网络设备type
:显示或设置网络类型ip4
:设置IPv4配置state
:显示网络连接的状态
- 示例:
nmcli -e yes,no list # 以特定格式列出所有设备和连接 nmcli con show # 显示所有网络连接 nmcli con up id <connection-name> # 启用指定的网络连接 nmcli con down id <connection-name> # 禁用指定的网络连接 nmcli dev wifi list # 列出所有可用的Wi-Fi网络 nmcli con add type wifi con-name <name> ifname <interface> ssid <SSID> password <password> # 添加新的Wi-Fi连接 nmcli con modify <connection-name> ipv4.addresses <ip-address>/24 # 修改网络连接的IPv4地址 nmcli con modify <connection-name> ipv4.gateway <gateway> # 修改网络连接的默认网关 nmcli con modify <connection-name> ipv4.dns "<dns1>,<dns2>" # 设置网络连接的DNS服务器
iwconfig
:无线网络配置工具
- 参数:
interface
:指定无线网络接口名称,如wlan0
- 示例:
iwconfig wlan0 # 显示指定无线接口的配置信息
route
:管理网络路由表
- 参数:
-n
:显示路由表,不进行名称解析-A
:指定协议族,如-A inet
用于IPv4add
:添加新的路由规则del
:删除现有的路由规则default
:设置或显示默认路由
- 示例:
route -n # 显示路由表,不进行名称解析 route -n add default gw 192.168.1.1 # 添加默认网关 route -n del default gw 192.168.1.1 # 删除默认网关 route -n add 10.0.0.0 gw 192.168.1.1 # 为特定网络添加网关 route -n add 10.0.0.1 dev eth0 # 通过特定设备添加路由
traceroute
:追踪数据包路由路径
- 说明:
- 参数:
-w <timeout>
:设置超时时间-q <queries>
:设置每个网络跳点的查询次数-p <port>
:使用指定的端口号发送数据包-I
:使用ICMP协议进行路由追踪
- 示例:
traceroute example.com # 追踪到 example.com 的路由路径 traceroute -w 5 example.com # 设置超时时间为5秒 traceroute -q 3 example.com # 每个网络跳点发送3次查询 traceroute -p 33434 example.com # 使用端口33434进行追踪 traceroute -I example.com # 使用ICMP协议进行路由追踪
netstat
:显示网络状态
- 参数:
-a
:显示所有活动的连接和侦听端口-t
:显示TCP端口-u
:显示UDP端口
- 示例:
netstat -a # 显示所有端口的使用情况
ss
:显示套接字统计
- 参数:
-t
:显示TCP套接字-u
:显示UDP套接字-a
:显示所有套接字,包括监听和非监听套接字-l
:仅显示监听的套接字-n
:显示数字地址而不是解析主机名
- 示例:
ss -t # 显示所有TCP套接字 ss -u # 显示所有UDP套接字 ss -a # 显示所有套接字 ss -l # 显示所有监听的套接字 ss -n # 以数字地址显示套接字
ufw
:管理iptables
防火墙规则,旨在简化防火墙规则的创建和维护
- 参数:
enable
:启用防火墙disable
:禁用防火墙status
:显示当前防火墙状态allow <port>/<ip>
:允许特定的端口或IP地址deny <port>/<ip>
:拒绝特定的端口或IP地址delete <rule>
:删除指定的规则reset
:重置所有规则到默认设置
- 示例:
sudo ufw enable # 启用防火墙 sudo ufw disable # 禁用防火墙 sudo ufw status # 显示防火墙状态 sudo ufw allow 22 # 允许SSH端口(22)的流量 sudo ufw allow from 192.168.1.100 # 允许来自特定IP的流量 sudo ufw delete allow 22 # 删除允许SSH端口的规则 sudo ufw reset # 重置所有ufw规则
iptables
:Linux防火墙命令行工具
- 参数:
-A <链>
:向指定的链添加规则-D <链>
:从指定的链删除规则-I <链>
:在指定链的头部插入规则-L <链>
:列出指定链的规则-F
:清空所有链的规则-Z
:重置所有链的计数器-P <链>
:设置指定链的默认策略-s <源IP>
:指定数据包的源地址-d <目标IP>
:指定数据包的目标地址-p <协议>
:指定数据包的协议(如 tcp、udp)--dport <端口>
:指定目标端口
- 示例:
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT # 允许来自特定IP的进入流量 sudo iptables -A OUTPUT -d 192.168.1.100 -j ACCEPT # 允许到特定IP的外出流量 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许进入的SSH流量 sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT # 删除允许SSH流量的规则 sudo iptables -L -n -v # 列出所有规则,以数字形式显示并提供详细信息 sudo iptables -F # 清空所有链的规则 sudo iptables -Z # 重置所有链的计数器
nc
:网络工具,用于读写网络连接
- 参数:
-l
:监听模式,用于等待传入的连接-p
:指定监听端口-v
:详细模式,显示详细信息-z
:扫描模式,仅扫描端口而不发送数据-w
:设置超时时间
- 示例:
nc -l -p 1234 # 在端口1234上监听传入的连接 nc -v example.com 80 # 连接到example.com的80端口,并显示详细信息 nc -z -v localhost 1-1000 # 扫描本地机器的1到1000端口,并显示详细信息 nc -w 5 example.com 1234 # 连接到example.com的1234端口,设置超时时间为5秒
ssh
:安全远程登录到另一台计算机
- 参数:
-i
:指定私钥文件-p
:指定远程主机的端口
- 示例:
ssh user@remote_host # 使用ssh登录到remote_host
telnet
:远程登录和通信工具
- 参数:
-i
:指定远程登录用户名-a
:试图自动登录远程系统-e
:设置转义字符-n
:记录所有网络活动到文件
- 示例:
telnet example.com 23 # 连接到example.com的23号端口 telnet -l user example.com # 使用指定用户名user登录example.com telnet -e ^C example.com 23 # 设置转义字符为Ctrl+C,并连接到example.com的23号端口 telnet -a example.com # 尝试自动登录example.com
scp
:安全复制文件到远程计算机
- 参数:
-P
:指定远程主机的端口-r
:递归复制目录
- 示例:
scp local_file user@remote_host:/path/to/remote_file # 复制文件到远程主机
sftp
:安全文件传输协议
- 参数:
-o
:传递选项给ssh,例如 -oPort=port 设置端口号-p
:指定远程主机端口-i
:指定用于身份验证的私钥文件-b
:从批处理文件读取命令
- 示例:
sftp user@example.com # 连接到example.com的user账号 sftp -P 2222 user@example.com # 使用端口2222连接到example.com的user账号 sftp -i /path/to/private_key user@example.com # 使用指定的私钥文件连接 sftp -b batchfile user@example.com # 从批处理文件读取命令并执行
wget
:非交互式网络下载工具
- 参数:
-r
:递归下载-l
:递归下载的深度-P
:指定下载文件的本地目录-nc
:避免覆盖已存在的文件-q
:安静模式(不显示输出)
- 示例:
wget http://example.com/file.zip # 从指定URL下载文件 wget -r http://example.com/dir/ # 递归下载目录内容 wget -l 2 http://example.com/ # 递归下载,限制在两个层级内 wget -P /path/to/download http://example.com/file.zip # 下载文件到指定目录 wget -nc http://example.com/file.zip # 如果文件已存在,则不覆盖
curl
:用于在命令行中传输数据
- 参数:
-O
:将下载的文件保存到本地文件系统,使用远程文件名-o
:将下载的文件保存到本地文件系统,使用指定的文件名-I
:获取HTTP头信息-d
:发送POST请求数据-H
:设置HTTP头-X
:指定HTTP请求方法)
- 示例:
curl http://example.com # 获取http://example.com的内容 curl -O http://example.com/file.txt # 下载文件并保存为file.txt curl -o localfile.txt http://example.com/file.txt # 下载文件并保存为localfile.txt curl -I http://example.com # 获取http://example.com的HTTP头信息 curl -d "name=value" http://example.com/form # 发送POST请求数据 curl -H "Content-Type: application/json" http://example.com # 设置HTTP头为JSON类型 curl -X DELETE http://example.com/resource # 发送DELETE请求
包管理
apt-get
:Debian系的包管理工具
- 参数:
install <package>
:安装指定的软件包remove <package>
:移除指定的软件包upgrade
:升级所有可升级的软件包update
:更新软件包列表
- 示例:
sudo apt-get install package_name # 安装软件包 sudo apt-get remove package_name # 移除软件包
yum
:RedHat系的包管理工具
- 参数:
install <package>
:安装指定的软件包remove <package>
:移除指定的软件包update
:更新软件包check-update
:检查可更新的软件包
- 示例:
sudo yum install package_name # 安装软件包 sudo yum remove package_name # 移除软件包
dnf
:Fedora的新一代包管理工具
- 参数:
install <package>
:安装指定的软件包remove <package>
:移除指定的软件包update
:更新软件包upgrade
:递增地更新软件包
- 示例:
sudo dnf install package_name # 安装软件包 sudo dnf remove package_name # 移除软件包
rpm
:查询、安装、卸载软件包
- 参数:
-i <package.rpm>
:安装指定的RPM软件包-e <package>
:卸载指定的软件包-q <package>
:查询软件包是否已安装
- 示例:
sudo rpm -i package.rpm # 安装RPM软件包 sudo rpm -e package_name # 卸载软件包
pacman
:Arch Linux的软件包管理器
-
功能:
- 安装、删除、升级软件包
- 管理软件仓库
- 搜索可用的软件包
-
常用参数:
-S
或--sync
:从软件仓库安装或升级软件包-R
或--remove
:卸载软件包-U
或--upgrade
:升级软件包-Syu
或--sysupgrade
:同步软件仓库并升级所有可升级的软件包-Ss
或--search
:搜索软件仓库中的软件包-Q
或--query
:查询已安装的软件包-Qe
或--query-explicit
:列出所有显式安装的软件包-Qm
或--query-missing
:列出系统中缺少的依赖项-Qi
或--info
:显示软件包的详细信息-Ql
或--list
:列出软件包提供的文件
-
示例:
sudo pacman -Sy # 更新软件仓库 sudo pacman -Syu # 升级所有可升级的软件包 sudo pacman -S package_name # 安装软件包 sudo pacman -Rs package_name # 卸载软件包 sudo pacman -Ss search_term # 搜索软件包 sudo pacman -Q # 查询已安装的软件包 sudo pacman -Qi package_name # 显示软件包的详细信息 sudo pacman -Sc # 清理缓存
进程管理
ps
: 显示当前进程状态
- 参数:
-aux
:显示所有运行中的进程信息-ef
:以全格式显示所有进程
- 示例:
ps -aux # 显示所有运行中的进程
kill
:发送信号到特定进程
- 参数:
-SIG
:指定信号,SIG
可以是信号名或数字PID
:进程ID
- 示例:
kill -9 PID # 发送SIGKILL信号到指定进程
pkill
:按名称杀死进程
- 参数:
-f
:通过完整命令名匹配进程SIG
:指定要发送的信号
- 示例:
pkill -f command_name # 按命令名称杀死进程
killall
:按名称杀死进程
- 参数:
- -f:通过完整命令名匹配进程
- SIG:指定要发送的信号
- 示例:
killall -f command_name # 按命令名称杀死进程 killall process_name # 终止特定名称的进程 killall -s SIGNAL process_name # 发送特定信号
top
: 实时显示进程信息
- 参数:
- 无特定参数,交互式操作
- 示例:
top # 实时显示进程和系统状态
bg
: 将进程放到后台运行
- 参数:
- 无特定参数,通常与
jobs
命令结合使用
- 无特定参数,通常与
- 示例:
bg # 将之前暂停的前台进程放到后台继续运行
fg
: 将后台进程调至前台运行
- 参数:
- 无特定参数,通常与
jobs
命令结合使用
- 无特定参数,通常与
- 示例:
fg # 将后台进程调至前台运行
jobs
:显示当前在后台运行的作业列表
- 参数:
- 无
- 示例:
jobs
文本处理
echo
: 输出一行文本到标准输出
- 参数:
-n
:不输出换行符-e
:启用转义字符解释
- 示例:
echo "Hello, World" # 输出文本 echo -n "Hello, " # 不输出换行符 echo "World"
printf
:格式化输出文本
- 参数:
format
:指定输出格式arguments
:要格式化的参数列表
- 示例:
printf "Hello, %s\n" "World" # 格式化字符串输出 printf "Base %d, Octal %o, Hex %x\n" 10 8 10 # 不同数制的格式化输出
vim
:一个高度可配置的文本编辑器
- 参数:
-e
:以交互模式启动Vim-t
:跳转到文件的标签-c
:执行Vim命令-u
:使用指定的初始化文件(vimrc)
- 示例:
vim file.txt # 打开file.txt进行编辑 vim -e file.txt # 以交互模式打开file.txt vim -u NONE file.txt # 不使用任何初始化文件打开file.txt vim + file.txt # 打开file.txt并定位到最后退出时的位置 vim -c 'set number' file.txt # 打开file.txt并设置显示行号
visudo
:锁定文件安全编辑sudoers文件
- 参数:
-c
:检查sudoers
文件的语法,但不编辑-f
:指定sudoers
文件的路径-s
:编辑一个特定的sudoers
包含文件
- 示例:
visudo # 编辑默认的sudoers文件 visudo -c # 检查sudoers文件的语法,不进行编辑 visudo -f /etc/sudoers # 指定sudoers文件的路径 visudo -s /etc/sudoers.d/custom # 编辑自定义的sudoers包含文件
nano
:简单易用的文本编辑器
- 参数:
-v
:显示版本信息-w
:不显示行号-b
:以二进制格式打开文件+lineno
:从指定的行号开始编辑
- 示例:
nano file.txt # 打开file.txt进行编辑 nano -v # 显示nano的版本信息 nano -w file.txt # 打开文件且不显示行号 nano -b file.bin # 以二进制格式打开file.bin nano +5 file.txt # 从第5行开始编辑file.txt
emacs
:高度可定制的文本编辑器
- 参数:
-nw
:以无窗口(no window) 系统模式启动,不加载图形用户界面-batch
:批处理模式,用于非交互式编辑--daemon
:启动或使用已有的 Emacs 守护进程+LINE
:直接跳转到文件的指定行
- 示例:
emacs file.txt # 编辑名为file.txt的文件 emacs -nw file.txt # 在无窗口模式下编辑file.txt emacs -batch file.txt # 以批处理模式编辑file.txt emacs --daemon # 启动Emacs守护进程 emacs +100 file.txt # 打开file.txt并跳转到第100行
gedit
:文本编辑器,用于编辑文件
- 参数:
-s
:以独立窗口模式启动-w
:以新的窗口模式启动-g
:使用现有的gedit窗口-W
:禁用日记
- 示例:
gedit file.txt # 打开file.txt文件进行编辑 gedit -s file.txt # 以独立窗口模式打开file.txt gedit -w file.txt # 以新的窗口模式打开file.txt gedit -g file.txt # 使用现有的gedit窗口打开file.txt
sed
:流编辑器,用于处理文本
- 参数:
-n
:仅打印经过模式选择的行-e
:对每个脚本执行编辑命令's/old/new/'
:替换文本中的 “old” 为 “new”-i
:直接修改文件内容,而不是输出到标准输出-E
:使用扩展正则表达式-r
:使用基础正则表达式(这是默认设置)-i.bak
:直接修改文件内容,并将原始内容备份到以 .bak 结尾的文件
- 示例:
sed -n '5p' file.txt # 只打印文件的第5行 sed 's/old/new/g' file.txt # 替换文件中的所有实例,将 "old" 替换为 "new" sed -i 's/old/new/g' file.txt # 直接在文件中替换所有 "old" 为 "new" sed -i.bak 's/old/new/g' file.txt # 修改文件并创建原始文件的备份 sed -E 's/(old)/\1new/g' file.txt # 使用扩展正则表达式替换匹配的 "old" 为 "new" sed -r 's/[0-9]+/& old/g' file.txt # 使用基础正则表达式匹配数字并附加文本 "old"
awk
:模式扫描和处理语言
- 参数:
-F
:设置输入字段分隔符-v
:传递变量给awk
脚本-f
:从文件中读取awk
脚本--field-separators
:定义字段分隔符
- 示例:
awk '{print $1}' file.txt # 打印文件每一行的第一个字段 awk 'NR % 2 == 0 {print $0}' file.txt # 打印偶数行 awk '$1 == "target" {print $0}' file.txt # 打印包含"target"的行 awk -F, '{print $1}' file.csv # 以逗号为分隔符,打印CSV文件的每一行的第一个字段 awk -v var="value" '{print var}' # 打印外部定义的变量 awk '条件 {动作}' file.txt # 对文件进行条件判断并执行动作 awk -f script.awk file.txt # 执行外部awk脚本文件 awk '{sum += $1; count++} END {print "Average:", sum/count}' numbers.txt # 计算平均值
组合使用sed
和awk
- 示例:
# 使用awk打印特定字段,然后使用sed进行模式替换 awk '{print $1}' file.txt | sed 's/old/new/g' # 先用sed删除行,再用awk打印第二字段 sed '/pattern/d' file.txt | awk '{print $2}' # 使用awk选择行,然后通过管道用sed进行替换操作 awk '$1 == "target" {print $0}' file.txt | sed 's/sometext/replacement/g' # 先用sed增加文本行,然后用awk处理数据 echo "new line to add" | sed 'i\new header line' file.txt && awk '{sum+=$1} END {print sum}' file.txt # 先用awk计算总和,然后将结果传递给sed进行插入操作 awk '{sum+=$1} END {print sum}' file.txt | sed -i "/pattern/i\\total sum is: $(cat)" file.txt
cut
:从文件或标准输入中提取文本
- 参数:
-b
:按字节提取-c
:按字符提取-d
:指定字段分隔符-f
:提取指定字段
- 示例:
cut -b 1-4 filename # 提取文件filename中每行的第1到第4个字节 cut -c 1-4 filename # 提取文件filename中每行的第1到第4个字符 cut -d ':' -f 1,3 filename # 提取文件filename中以':'分隔的第1和第3个字段
sort
:对文本的行进行排序
- 参数:
-f
:忽略大小写差异进行排序-n
:按照数值大小进行排序-r
:反向排序-k
:通过指定的字段(列)进行排序-t
:设置字段分隔符,默认为空格
- 示例:
sort file.txt # 对文件中的行进行字典序排序 sort -f file.txt # 忽略大小写进行排序 sort -n file.txt # 按照数值大小排序 sort -r file.txt # 反向字典序排序 sort -k 2 file.txt # 按照第二列进行排序 sort -t : -k 1 file.txt # 使用":"作为分隔符,按第一列排序 echo -e "3:apple\n1:banana\n2:orange" | sort -t : -k 2 # 对输入排序
diff
:比较文件差异
- 参数:
-u
:统一格式输出,显示三个文件的公共行以及不同的行-c
:上下文格式输出,显示差异周围的行-w
:忽略空白字符差异-i
:忽略大小写差异-b
:忽略空格和制表符的差异-r
:递归比较任何子目录中的文件
- 示例:
diff file1.txt file2.txt # 比较两个文件的差异 diff -u file1.txt file2.txt # 以统一格式显示差异 diff -c file1.txt file2.txt # 以上下文格式显示差异 diff -r /path/to/dir1 /path/to/dir2 # 递归比较两个目录下的所有文件
patch
:应用补丁文件到源代码
- 参数:
-p <num>
:指定补丁文件中路径前缀的长度,<num>
通常为0或1-i <file>
:指定补丁文件的路径-o <file>
:指定输出文件的路径,如果未指定,将直接修改原文件-R
:反向应用补丁,将补丁视为还原更改--dry-run
:模拟应用补丁,不实际修改文件
- 示例:
patch -p1 -i patchfile -o originalfile # 应用补丁,-p1表示路径前缀长度为1 patch -R -p0 -i reversepatch # 反向应用补丁,-p0表示路径前缀长度为0 patch --dry-run -p1 -i testpatch # 模拟应用补丁,不进行实际修改
expand
:将制表符转换为空格
- 参数:
-t <num>
:指定制表位的宽度,<num>
是制表符的间隔,默认是8个字符
- 示例:
expand file.txt # 将file.txt中的制表符转换为8个空格 expand -t 4 file.txt # 设置制表位宽度为4个字符
系统管理
reboot
:重启系统
- 参数:
-f
:强制重启,忽略所有挂起的文件写入操作-w
:仅将所有挂起的文件写入磁盘,但不执行重启
- 示例:
sudo reboot # 重启系统 sudo reboot -f # 强制重启系统 sudo reboot -w # 将所有挂起的文件写入磁盘
shutdown
:关闭系统,可以指定时间或是否重启
- 参数:
-h now
:立即关机
-r now
:立即重启系统-c
:取消预定的关机或重启操作-t <秒数>
:设置关机或重启前的等待时间- 示例:
shutdown -h now # 立即关机 shutdown -r now # 立即重启系统 shutdown -c # 取消预定的关机或重启操作 shutdown -t 10 # 设置10秒后关机或重启
poweroff
:立即关闭系统
- 参数:
-f
:强制关闭系统,不进行任何确认
- 示例:
poweroff # 立即关闭系统 poweroff -f # 强制立即关闭系统
systemctl
:systemd系统和服务管理器,用于控制服务和系统状态
- 参数:
start <unit>
:启动服务stop <unit>
:停止服务status <unit>
:查看服务状态enable <unit>
:设置服务自启动disable <unit>
:禁用服务自启动
- 示例:
sudo systemctl start service_name # 启动服务 sudo systemctl status service_name # 查看服务状态
chkconfig
:管理系统服务的启动状态,主要用于较旧的System V init系统
- 参数:
--level <level>
:指定运行级别的服务管理list
:列出所有服务的启动状态on
:设置服务自启动off
:禁止服务自启动
- 示例:
sudo chkconfig --level 35 service_name on # 设置服务在运行级别3和5自启动 sudo chkconfig list # 列出所有服务的启动状态
service
:管理系统服务状态,使用System V init系统
- 参数:
start
:启动服务stop
:停止服务restart
:重启服务status
:查看服务状态enable
:设置服务在启动时自动运行disable
:禁止服务在启动时自动运行
- 示例:
sudo service apache2 start # 启动apache2服务 sudo service apache2 stop # 停止apache2服务 sudo service apache2 restart # 重启apache2服务 sudo service apache2 status # 查看apache2服务状态 sudo service apache2 enable # 设置apache2服务在启动时自动运行 sudo service apache2 disable # 禁止apache2服务在启动时自动运行
systemctl
:控制systemd系统和服务管理器
- 参数:
start <单元>
:启动指定的服务或目标stop <单元>
:停止指定的服务或目标restart <单元>
:重启指定的服务或目标status <单元>
:显示指定服务的状态enable <单元>
:在启动时启用服务disable <单元>
:禁止服务在启动时自动启动is-enabled <单元>
:检查服务是否设置为在启动时自动启动list-unit-files
:列出所有已安装的服务单元文件--all
:显示所有单元的状态,包括已禁用的
- 示例:
systemctl start apache2.service # 启动apache2服务 systemctl stop apache2.service # 停止apache2服务 systemctl restart apache2.service # 重启apache2服务 systemctl status apache2.service # 查看apache2服务状态 systemctl enable apache2.service # 启用apache2服务,使其在启动时自动启动 systemctl disable apache2.service # 禁用apache2服务的自启动 systemctl is-enabled apache2.service # 检查apache2服务是否设置为自启动 systemctl list-unit-files # 列出所有服务单元文件 systemctl --all # 显示所有单元的状态
iostat
:显示CPU和I/O设备的使用情况
- 参数:
-c
:显示CPU使用情况-d
:显示磁盘使用情况-x
:显示扩展的磁盘使用统计-t
:显示每个设备的I/O统计数据的时间戳-k
:以千字节为单位显示
- 示例:
iostat # 显示CPU和设备的基本使用情况 iostat -c # 仅显示CPU使用情况 iostat -d # 仅显示磁盘使用情况 iostat -x # 显示扩展的磁盘使用统计 iostat -t # 显示每个设备的I/O统计数据的时间戳 iostat -k # 以千字节为单位显示统计数据
vmstat
:显示虚拟内存统计信息
-
参数:
-a
:显示活动和非活动内存的详细信息-s
:以详细的形式显示内存使用情况-n
:显示缓冲区与磁盘交换情况-d
:显示磁盘操作情况-p
:显示分区使用情况-w
:以宽字符格式输出
-
示例:
vmstat # 显示虚拟内存的基本统计信息 vmstat -a # 显示活动和非活动内存的详细信息 vmstat -s # 以详细的形式显示内存使用情况 vmstat -n # 显示缓冲区与磁盘交换情况 vmstat -d # 显示磁盘操作情况 vmstat -p # 显示分区使用情况 vmstat -w # 以宽字符格式输出
用户和群组管理
useradd
:添加新用户,并可以设置主目录和默认shell
- 参数:
-m
:创建用户主目录-s
:设置默认shell
- 示例:
sudo useradd -m -s /bin/bash new_user # 添加新用户并设置默认shell
userdel
:删除用户,可选项删除用户主目录
- 参数:
-r
:删除用户主目录
- 示例:
sudo userdel -r user_name # 删除用户及其主目录
groupadd
:添加新用户组
- 示例:
sudo groupadd new_group # 添加新用户组
groupdel
:删除用户组
- 示例:
sudo groupdel group_name # 删除用户组
备份和压缩
tar
:打包、压缩或解压缩文件
- 参数:
-c
:创建新的归档文件-v
:在压缩或解压时显示进度-f
:指定归档文件名-z
:使用gzip压缩或解压缩-x
:解压缩-j
:使用bzip2压缩或解压缩-t
:列出归档文件的内容-r
:将文件追加到现有的归档文件
- 示例:
tar -czvf archive.tar.gz directory/ # 创建gzip压缩的tar归档 tar -xzvf archive.tar.gz # 解压gzip压缩的tar归档 tar -cjvf archive.tar.bz2 directory/ # 创建bzip2压缩的tar归档 tar -xjvf archive.tar.bz2 # 解压bzip2压缩的tar归档 tar -cvf archive.tar directory/ # 创建tar归档文件而不压缩 tar -tvf archive.tar # 列出tar归档文件的内容 tar -rvf archive.tar newfile.tx # 将文件添加到现有tar归档文件
gzip
:压缩或解压文件
- 参数:
-c
:将压缩数据输出到标准输出,不修改原始文件-d
:解压缩文件-k
:解压缩后保留原始文件-v
:详细模式,显示压缩或解压过程中的信息-9
:使用最大压缩等级,尝试获得最佳压缩效果-r
`:递归地压缩或解压文件夹中的所有文件
- 示例:
gzip file.txt # 压缩 file.txt 文件,生成 file.txt.gz gzip -c file.txt > file.txt.gz # 将 file.txt 压缩并输出到 file.txt.gz gzip -d file.txt.gz # 解压缩 file.txt.gz 到原始的 file.txt gzip -k file.txt.gz # 解压缩 file.txt.gz 并保留压缩文件 gzip -v file.txt # 压缩 file.txt 并显示压缩过程的详细信息 gzip -9 file.txt # 使用最大压缩等级压缩 file.txt gzip -r folder/ # 递归压缩 folder/ 下的所有文件
zip
:创建或解压ZIP压缩文件
- 参数:
-r
:递归地包含目录内的所有文件和子目录-j
:仅加入文件,不包含任何目录结构(即扁平化压缩)-m
:压缩后保留文件的时间戳不变-q
:安静模式,不输出任何信息-u
:更新模式,只压缩那些比压缩文件新的文件-x
:排除某些文件或模式-0
:不压缩,只打包文件-9
:使用最高级别的压缩
- 示例:
zip -r archive.zip directory/ # 压缩整个目录 zip -jr flat-archive.zip directory/* # 扁平化压缩目录中的文件 zip -u archive.zip newfile.txt # 更新现有的ZIP文件 zip -r archive.zip directory/ -x "*/temp/*" # 排除特定文件或模式进行压缩 zip -0 quick-archive.zip file1 file2 # 不压缩,只打包文件 unzip archive.zip # 解压ZIP文件 unzip archive.zip -d destination_directory/ # 解压到指定目录 unzip -l archive.zip # 查看ZIP文件内容
unzip
:解压ZIP文件
- 参数:
-l
:列出ZIP文件中的内容,但不解压-n
:如果输出文件存在,则不会覆盖,即使使用了-o
也会被忽略-o
:无提示覆盖输出文件-d <directory>
:指定解压后的文件存放目录-q
:静默模式,不显示解压过程信息-p
:打印文件内容到标准输出,而不是解压-t
:测试ZIP文件是否损坏
- 示例:
unzip archive.zip # 解压ZIP文件 unzip -l archive.zip # 列出ZIP文件中的内容 unzip archive.zip -d destination_directory/ # 解压到指定目录 unzip -t archive.zip # 测试ZIP文件完整性 unzip -q archive.zip # 静默模式解压
xz
:压缩和解压文件
- 参数:
-z
:创建压缩文件-e
:对压缩文件进行编码-d
:解压缩文件-k
:保留压缩文件的原始文件名-c
:输出到标准输出(用于管道)-9
:使用最高压缩等级
- 示例:
xz file.txt # 压缩file.txt文件 xz -9 file.txt # 使用最高压缩等级压缩file.txt xz -c file.txt > file.txt.xz # 将压缩数据输出到标准输出(可用于管道) xz -d file.txt.xz # 解压缩file.txt.xz到原始文件 xz -k file.txt.xz # 解压缩但保留压缩文件
unrar
:解压RAR压缩文件
- 参数:
-e
:提取文件而不创建目录结构-x
:排除特定的文件或目录-p
:设置或移除压缩文件的密码-l
:列出压缩文件的内容-t
:检查压缩文件的完整性-d
:指定解压后的文件存放目录
- 示例:
unrar x archive.rar # 解压RAR文件 unrar x archive.rar destination_directory/ # 解压RAR文件 unrar l archive.rar # 列出RAR文件内容 unrar t archive.rar # 测试RAR文件完整性 unrar x -x "temp/*" archive.rar # 解压RAR文件,排除某些文件 unrar p -p"my_password" archive.rar # 设置RAR文件密码
其他
gcc
:GNU C编译器
- 参数:
-o <file>
:指定输出的可执行文件名-Wall
:打开几乎所有的警告消息-g
:生成调试信息-I <dir>
:添加头文件搜索路径-L <dir>
:添加库文件搜索路径-l <lib>
:链接时搜索指定的库
- 示例:
gcc program.c -o program # 编译 C 程序并生成可执行文件 gcc -Wall -g program.c -o program # 开启所有警告并生成调试信息 gcc -I /path/to/include program.c -o program # 添加头文件搜索路径 gcc -L /path/to/lib -l mylib program.c -o program # 链接指定的库文件
g++
:GNU C++编译器
- 参数:
-o output_file
:指定输出的可执行文件名-Wall
:开启所有警告信息-Werror
:将所有警告视为错误-std=c++11
:指定C++标准版本-g
:生成调试信息-O2
:优化代码,提高执行效率-c
:仅编译,不链接-I include_path
:添加包含文件的路径-L lib_path
:添加库文件的路径-l library
:链接指定的库
- 示例:
g++ main.cpp -o main #编译C++源代码文件 g++ main.cpp -o main -Wall #编译并开启所有警告信息 g++ main.cpp -o main -g #编译并生成调试信息 g++ main.cpp -o main -O2 #编译并优化代码 g++ main.cpp -c -o main.o #仅编译,不进行链接 g++ main.cpp -o main -L/lib/path -lmylib #编译并链接指定的库
git
:分布式版本控制系统
- 参数:
-init
:初始化一个新的Git仓库clone
:克隆一个仓库到本地add
:将文件添加到暂存区准备提交git commit
: 提交暂存区的更改到仓库git status
: 查看当前仓库的状态git branch
: 列出所有分支git checkout
: 切换到指定的分支git push
: 推送本地分支到远程仓库git pull
: 从远程仓库拉取并合并到本地分支git log
: 查看提交历史git tag
: 创建一个新标签git diff
: 显示两次提交之间的差异git fetch
: 下载远程仓库的变化,但不自动合并
- 示例:
git init git clone https://github.com/user/repo.git git commit -m "Add new feature" git checkout development git push origin master指定的库 git diff HEAD HEAD~1 # 比较当前分支的最新提交(HEAD)与前一个提交(HEAD~1)之间的差异指定的库
make
:自动化构建工具,根据Makefile文件自动构建目标
-
参数:
-
-f FILE
:指定要使用的 Makefile 文件-j N
:并行构建,同时运行 N 个命令-k
:即使有错误也继续构建-n
:不执行任何命令,仅显示将要执行的操作-p
:打印 Makefile 的变量和函数定义-q
:快速模式,仅检查 Makefile 是否需要更新,不执行构建-s
:静默模式,仅显示执行的命令-B
:强制重新构建目标,即使它是最新的-t
:更新 Makefile 的时间戳,使其看起来比所有依赖项都要新
-
示例:
make # 构建 Makefile 中的默认目标 make target # 构建特定目标 make clean # 清理构建产物 make clean && make # 重新构建所有目标 make -j 4 # 并行构建,同时运行 4 个命令 make -k # 即使遇到错误也继续构建 make -n # 显示将要执行的操作,但不实际执行 make -t # 更新 Makefile 时间戳
dmesg
:查看系统启动时的内核消息
- 参数:
-T
:以秒为单位显示时间戳-c
:清除内核日志缓冲区-n level
:设置消息级别,只显示等于或高于该级别的消息-t
:显示时间戳-s
:只显示消息的最后一行
dmesg # 显示内核
export
:设置或导出环境变量
- 参数:
VARNAME=value
:设置环境变量VARNAME
的值为value
-n
:取消之前导出的环境变量
- 示例:
export VARNAME="value" # 设置环境变量VARNAME的值为value export VARNAME # 导出当前shell的环境变量VARNAME unset VARNAME # 删除环境变量VARNAME export -n VARNAME # 取消导出环境变量VARNAME,使其在子shell中不可用
xargs
:构建并执行命令行
- 说明:
- 参数:
-n <num>
:指定每次执行命令时使用的参数数量-I <string>
:将<string>
替换为输入的项
- 示例:
echo "one two three" | xargs # 将输入作为参数执行 echo "file1 file2 file3" | xargs -n 2 rm # 每次删除两个文件 find / -name "*.txt" | xargs -I {} rm {} # 删除所有找到的.txt文件
clear
:清除终端屏幕
- 参数:
- 无参数
- 示例:
clear # 清除终端屏幕
exit
:退出shell
- 参数:
<status>
:可选的退出状态码,用于指示脚本或程序的执行结果
- 示例:
exit # 退出当前shell,返回默认状态码0 exit 1 # 退出当前shell,返回状态码1,通常用于表示出错
nohup
:运行命令或进程,忽略挂断信号
- 参数:
-a
:在输出文件中包含退出状态-b
:在输出文件中包含终止信号-c
:不忽略挂断信号,与-b
选项一起使用
- 示例:
nohup command > output.log 2>&1 & # 运行命令并忽略挂断信号,输出保存到 output.log nohup -a command > output.log 2>&1 & # 运行命令,包含退出状态到输出文件 nohup -b command > output.log 2>&1 & # 运行命令,包含终止信号到输出文件 nohup -c command > output.log 2>&1 & # 运行命令,不忽略挂断信号
history
:显示用户命令历史
- 参数:
-c
:清除历史记录-a
:将当前shell的命令追加到历史文件
- 示例:
history # 显示命令历史
env
:显示和设置环境变量
- 参数:
-u
:删除指定的环境变量-i
:忽略环境变量,从头开始设置一个环境
- 示例:
env # 显示当前所有环境变量及其值 env | grep PATH # 显示包含PATH的环境变量 env -u VARIABLE_NAME # 删除指定的环境变量 env -i command # 忽略环境变量,从头开始执行command
crontab
:定时任务管理
- 参数:
-l
:列出当前用户的cron任务-e
:编辑当前用户的cron任务列表-r
:删除当前用户的cron任务列表中的所有任务
- 示例:
crontab -l # 列出当前用户的cron任务 crontab -e # 编辑当前用户的cron任务 crontab -r # 删除当前用户的所有cron任务
cal
:显示日历
- 参数:
-y
:显示当前年份的日历-B
:显示给定月份或年份之前的日历-A
:显示给定月份或年份之后的日历
- 示例:
cal # 显示当前月份的日历 cal 03 # 显示3月份的日历 cal 2023 # 显示2023年的日历 cal -y # 显示当前年份每个月的日历 cal -B 1 # 显示上个月的日历 cal -A 1 # 显示下个月的日历
date
:显示或设置系统日期和时间
- 参数:
+FORMAT
:指定输出格式-s "DATESTRING"
:设置系统日期和时间--set="DATESTRING"
:同-s
,设置系统日期和时间--utc
:以UTC时间显示或设置时间--localtime
:以本地时间显示或设置时间--hwclock
:与硬件时钟交互,用于同步
- 示例:
date # 显示当前日期和时间(默认格式) date "+%Y-%m-%d %H:%M:%S" # 显示当前日期和时间(自定义格式) date -s "2023-04-01 12:00:00 # 设置系统日期和时间 date --set="2023-04-01 12:00:00" --utc # 设置系统日期和时间(UTC) date --localtime # 显示系统日期和时间(本地时间) date +%s -s "$(date +%s)" > /dev/rtc0 # 同步系统时钟到硬件时钟 hwclock --systohc # 读取硬件时钟并设置系统时钟
w
:显示当前登录用户及其活动
- 参数:
-u
:仅显示用户信息,不显示正在执行的命令-h
:不打印头部信息-s
:仅显示用户名称、终端和正在执行的命令
- 示例:
w # 显示当前所有用户的活动信息 w username # 显示特定用户的活动信息 w -u # 仅显示用户活动,不显示正在执行的命令 w -h # 不打印头部信息 w -s # 仅显示简化的用户活动信息
uptime
:显示系统运行时间和当前负载
- 参数:
- 无特定参数
- 示例:
uptime
hostname
:显示或设置系统的主机名
- 参数:
-a
:显示所有别名-f
:显示完整的主机名-i
:显示主机的网络地址-d
:显示DNS域名
- 示例:
hostname # 显示当前系统的简写主机名 hostname -f # 显示当前系统的完整主机名 hostname -i # 显示主机的网络地址 hostname -d # 显示系统的DNS域名 hostname newhostname # 将系统的主机名更改为newhostname
which
:查找并显示命令的路径
- 参数:
- 无特定参数
- 示例:
which ls # 查找ls命令的路径
whatis
:显示命令的简短描述
- 参数:
- 无特定参数
- 示例:
whatis ls # 显示ls命令的简短描述
whereis
:查找和显示指定命令的二进制、源代码和手册页文件的位置
- 参数:
-b
:只查找二进制文件-m
:只查找手册页文件-s
:只查找源文件-f
:在查找时,不显示文件的路径前缀
- 示例:
whereis java # 查找java命令相关的文件 whereis -b java # 只查找java的二进制文件 whereis -m ls # 查找ls命令的手册页文件 whereis -s gcc # 查找gcc的源代码文件 whereis -f vim # 查找vim的文件,不显示路径前缀
whoami
:显示当前用户的用户名
- 参数:
- 无参数:默认显示当前用户的用户名
- 示例:
whoami # 显示当前用户的用户名
man
:显示命令的手册页
- 参数:
-f
:显示命令的简短描述,不显示完整手册页-k
:在手册页数据库中搜索关键词,列出所有匹配的手册页-w
:显示man手册页的何处可以找到-a
:显示所有可用的手册页,包括不同部分的手册页-p
:指定手册页显示格式,如-p ad
显示所有的手册页-M
:指定搜索手册页时的目录路径
- 示例:
man ls # 显示ls命令的手册页 man -f ls # 显示ls命令的简短描述 man -k search_term # 在手册页中搜索关键词search_term man -w ls # 显示ls手册页的位置 man -a ls # 显示ls命令的所有手册页 man -p options ls # 以指定的选项显示ls的手册页 man -M /usr/share/man/man1 ls # 在指定目录下查找ls的手册页
info
:访问程序的在线帮助信息,比man更加详细
- 参数:
-f <file>
:指定要查看的info页面文件-n
:不自动启动info程序,而是使用默认的pager(如less
)-o <file>
:将输出保存到文件--apropos <keyword>
:搜索关键词,列出所有匹配的info页面
- 示例:
关注我的微信公众号,获取更多精彩内容!info bash # 访问bash的在线帮助信息 info -f /usr/share/info/bash.info.gz # 直接查看指定的info文件 info -n tar # 以默认pager查看tar的在线帮助信息 info -o output.txt grep # 将grep的在线帮助信息保存到文件 info --apropos regex # 搜索与正则表达式相关的在线帮助信息