基础
以下列出常见 50 个 Linux 命令:
ls
- 列出目录内容cd
- 更改当前目录pwd
- 显示当前工作目录mkdir
- 创建新目录rm
- 删除文件或目录cp
- 复制文件或目录mv
- 移动文件或目录touch
- 创建空文件或更改文件时间戳cat
- 显示文件内容more
- 分页显示文件内容less
- 以可滚动方式显示文件内容head
- 显示文件的前几行tail
- 显示文件的后几行grep
- 在文件中搜索指定模式find
- 查找文件chmod
- 修改文件权限chown
- 修改文件所有者chgrp
- 修改文件所属组tar
- 打包和解压文件gzip
- 压缩文件gunzip
- 解压缩文件df
- 显示文件系统使用情况du
- 显示目录或文件的磁盘使用情况uname
- 显示系统信息date
- 显示或设置系统日期和时间ps
- 显示进程状态kill
- 终止进程top
- 显示系统资源使用情况ping
- 测试主机的网络连通性ifconfig
- 显示和配置网络接口信息ssh
- 远程登录到另一台主机scp
- 安全复制文件wget
- 下载文件curl
- 发送或接收数据apt-get
- Debian 系统中安装、升级和删除软件包yum
- Red Hat 系统中安装、升级和删除软件包lsblk
- 列出块设备信息fdisk
- 磁盘分区工具mount
- 挂载文件系统umount
- 卸载文件系统passwd
- 修改用户密码useradd
- 添加新用户userdel
- 删除用户groupadd
- 添加新用户组groupdel
- 删除用户组shutdown
- 关闭系统reboot
- 重启系统alias
- 取别名nc
- 网络工具,用于发送和接收数据traceroute
- 跟踪数据包的路由路径
ls
ls
命令用于列出目录的内容。以下是一些常见的 ls
命令及其用法:
逐行列出文件:
1
ls -1
列出所有文件,包括隐藏文件:
1
ls -a
列出所有文件,并在目录名称后面添加
/
标识:1
ls -F
列出所有文件的长格式列表(包括权限、所有者、大小和修改日期):
1
ls -la
列出所有文件的长格式列表,并以人类可读的单位(KiB、MiB、GiB)显示大小:
1
ls -lh
递归地按大小(降序)对所有文件进行长格式列表排序:
1
ls -lSR
按修改日期(最旧的在前)对所有文件进行长格式列表排序:
1
ls -ltr
仅列出目录:
1
ls -d */
这些选项可以根据需要帮助你定制 ls
命令的输出。
cd
cd
命令用于更改当前工作目录。以下是一些常见的 cd
命令及其用法:
进入指定目录:
1
cd path/to/directory
进入当前目录的父目录:
1
cd ..
进入当前用户的家目录:
1
cd
进入指定用户的家目录:
1
cd ~username
返回上次访问的目录:
1
cd -
进入根目录:
1
cd /
使用这些选项可以轻松地导航到不同的目录,并管理文件系统中的文件和目录。
pwd
pwd
命令用于打印当前工作目录的名称。以下是一些常见的 pwd
命令及其用法:
打印当前目录:
1
pwd
打印当前目录,并解析所有符号链接(即显示“物理”路径):
1
pwd --physical
打印当前逻辑目录:
1
pwd --logical
使用这些选项可以根据需要查看当前工作目录的不同属性。
mkdir
mkdir
命令用于创建目录并设置其权限。以下是一些常见的用法:
创建指定的目录:
1
mkdir path/to/directory1 path/to/directory2 ...
如果需要,创建指定目录及其父目录:
1
mkdir -p path/to/directory1 path/to/directory2 ...
创建具有特定权限的目录:
1
mkdir -m rwxrw-r-- path/to/directory1 path/to/directory2 ...
这些命令可用于在文件系统中创建目录并设置其权限。
rm
rm
命令用于删除文件或目录。以下是一些常见的用法:
删除指定的文件:
1
rm path/to/file1 path/to/file2 ...
删除指定的文件,忽略不存在的文件:
1
rm --force path/to/file1 path/to/file2 ...
删除指定的文件,在每次删除之前进行交互式提示:
1
rm --interactive path/to/file1 path/to/file2 ...
删除指定的文件,并打印有关每次删除的信息:
1
rm --verbose path/to/file1 path/to/file2 ...
递归地删除指定的文件和目录:
1
rm --recursive path/to/file_or_directory1 path/to/file_or_directory2 ...
这些命令可用于在文件系统中删除文件和目录。
cp
cp
命令用于复制文件和目录。以下是一些常见的 cp
命令及其用法:
将文件复制到另一个位置:
1
cp path/to/source_file.ext path/to/target_file.ext
将文件复制到另一个目录,保留文件名:
1
cp path/to/source_file.ext path/to/target_parent_directory
递归地将目录的内容复制到另一个位置(如果目标位置存在,则目录将被复制到其中):
1
cp -r path/to/source_directory path/to/target_directory
以详细模式递归地复制目录的内容(显示复制的文件):
1
cp -vr path/to/source_directory path/to/target_directory
一次性将多个文件复制到目录:
1
cp -t path/to/destination_directory path/to/file1 path/to/file2 ...
将所有具有特定扩展名的文件复制到另一个位置,在交互模式下(在覆盖之前提示用户):
1
cp -i *.ext path/to/target_directory
在复制之前跟随符号链接:
1
cp -L link path/to/target_directory
使用源文件的完整路径,在复制时创建任何缺失的中间目录:
1
cp --parents source/path/to/file path/to/target_file
mv
mv
命令用于移动或重命名文件和目录。以下是一些常见的 mv
命令及其用法:
当目标不是一个已存在的目录时,重命名文件或目录:
1
mv path/to/source path/to/target
将文件或目录移动到一个已存在的目录中:
1
mv path/to/source path/to/existing_directory
将多个文件移动到一个已存在的目录中,保持文件名不变:
1
mv path/to/source1 path/to/source2 ... path/to/existing_directory
在覆盖已存在文件之前不提示确认:
1
mv -f path/to/source path/to/target
在覆盖已存在文件之前提示确认,无论文件权限如何:
1
mv -i path/to/source path/to/target
不覆盖目标位置已存在的文件:
1
mv -n path/to/source path/to/target
以详细模式移动文件,显示文件移动后的状态:
1
mv -v path/to/source path/to/target
touch
touch
命令用于创建文件并设置访问/修改时间。以下是一些常见的 touch
命令及其用法:
创建特定文件:
1
touch path/to/file1 path/to/file2 ...
将文件的访问或修改时间设置为当前时间,并且如果文件不存在则不创建:
1
touch -c -a|m path/to/file1 path/to/file2 ...
将文件的时间设置为特定值,并且如果文件不存在则不创建:
1
touch -c -t YYYYMMDDHHMM.SS path/to/file1 path/to/file2 ...
将特定文件的时间设置为另一个文件的时间,并且如果文件不存在则不创建:
1
touch -c -r ~/.emacs path/to/file1 path/to/file2 ...
cat
cat
命令用于打印和连接文件。以下是一些常见的 cat
命令及其用法:
将文件的内容打印到
stdout
:1
cat path/to/file
将多个文件连接到一个输出文件:
1
cat path/to/file1 path/to/file2 ... > path/to/output_file
将多个文件追加到一个输出文件:
1
cat path/to/file1 path/to/file2 ... >> path/to/output_file
将
stdin
写入到一个文件中:1
cat - > path/to/file
对所有输出行进行编号:
1
cat -n path/to/file
显示非打印字符和空白字符(如果是非 ASCII 字符则带有
M-
前缀):1
cat -v -t -e path/to/file
more
more
命令用于交互式地显示文件,允许滚动和搜索。以下是一些常见的 more
命令及其用法:
打开一个文件:
1
more path/to/file
显示特定行:
1
more +line_number path/to/file
转到下一页:
<Space>
搜索字符串(按
n
跳转到下一个匹配项):1
/something
退出:
1
q
显示有关交互命令的帮助:
1
h
less
less
命令用于交互式地阅读文件,允许滚动和搜索。以下是一些常见的 less
命令及其用法:
打开一个文件:
1
less source_file
向下/向上翻页:
<Space>
(向下),b
(向上)转到文件末尾/开头:
G
(末尾),g
(开头)向前搜索字符串(按
n
/N
跳转到下一个/上一个匹配项):1
/something
向后搜索字符串(按
n
/N
跳转到下一个/上一个匹配项):1
?something
跟随当前打开文件的输出:
1
F
在编辑器中打开当前文件:
1
v
退出:
1
q
head
head
命令用于输出文件的前部分内容。以下是一些常见的 head
命令及其用法:
输出文件的前几行:
1
head --lines count path/to/file
输出文件的前几个字节:
1
head --bytes count path/to/file
输出除文件最后几行之外的所有内容:
1
head --lines -count path/to/file
输出除文件最后几个字节之外的所有内容:
1
head --bytes -count path/to/file
tail
tail
命令用于显示文件的最后部分内容。以下是一些常见的 tail
命令及其用法:
显示文件中最后 ‘count’ 行:
1
tail --lines count path/to/file
从特定行号开始打印文件:
1
tail --lines +count path/to/file
打印给定文件末尾的特定字节数:
1
tail --bytes count path/to/file
打印给定文件的最后几行,并持续读取直到
Ctrl + C
:1
tail --follow path/to/file
即使文件不可访问,也持续读取文件直到
Ctrl + C
:1
tail --retry --follow path/to/file
显示文件的最后 ‘num’ 行,并每 ‘n’ 秒刷新一次:
1
tail --lines count --sleep-interval seconds --follow path/to/file
grep
grep
命令用于在文件中使用正则表达式查找模式。以下是一些常见的 grep
命令及其用法:
在文件中搜索模式:
1
grep "search_pattern" path/to/file
搜索精确字符串(禁用正则表达式):
1
grep --fixed-strings "exact_string" path/to/file
在目录中递归搜索所有文件,显示匹配行的行号,忽略二进制文件:
1
grep --recursive --line-number --binary-files=without-match "search_pattern" path/to/directory
使用扩展正则表达式(支持
?
、+
、{}
、()
和|
),在不区分大小写的模式下:1
grep --extended-regexp --ignore-case "search_pattern" path/to/file
打印每个匹配的前、后或周围的 3 行:
1
grep --context|before-context|after-context=3 "search_pattern" path/to/file
打印每个匹配的文件名和行号,并使用彩色输出:
1
grep --with-filename --line-number --color=always "search_pattern" path/to/file
搜索匹配模式的行,仅打印匹配的文本:
1
grep --only-matching "search_pattern" path/to/file
在
stdin
中搜索不匹配模式的行:1
cat path/to/file | grep --invert-match "search_pattern"
find
find
命令用于在目录树下递归查找文件或目录。以下是一些常见的 find
命令及其用法:
按扩展名查找文件:
1
find root_path -name '*.ext'
查找与多个路径/名称模式匹配的文件:
1
find root_path -path '**/path/**/*.ext' -or -name '*pattern*'
在不区分大小写的模式下查找匹配给定名称的目录:
1
find root_path -type d -iname '*lib*'
查找匹配给定模式的文件,排除特定路径:
1
find root_path -name '*.py' -not -path '*/site-packages/*'
查找匹配给定大小范围的文件,限制递归深度为 “1”:
1
find root_path -maxdepth 1 -size +500k -size -10M
对每个文件运行一个命令(在命令中使用
{}
来访问文件名):1
find root_path -name '*.ext' -exec wc -l {} \;
查找今天修改的所有文件,并将结果作为参数传递给单个命令:
1
find root_path -daystart -mtime -1 -exec tar -cvf archive.tar {} \+
查找空(0 字节)文件并删除它们:
1
find root_path -type f -empty -delete
chmod
chmod
命令用于更改文件或目录的访问权限。以下是一些常见的 chmod
命令及其用法:
给文件的所有者添加执行权限:
1
chmod u+x path/to/file
给用户添加读取和写入文件/目录的权限:
1
chmod u+rw path/to/file_or_directory
从组中移除可执行权限:
1
chmod g-x path/to/file
给所有用户添加读取和执行权限:
1
chmod a+rx path/to/file
给其他用户(不属于文件所有者的组)赋予与组相同的权限:
1
chmod o=g path/to/file
从其他用户移除所有权限:
1
chmod o= path/to/file
递归更改权限,给组和其他用户赋予写入权限:
1
chmod -R g+w,o+w path/to/directory
递归地给所有用户在目录中的文件添加读取权限,并给子目录添加执行权限:
1
chmod -R a+rX path/to/directory
chown
chown
命令用于更改文件和目录的用户和组所有权。以下是一些常见的 chown
命令及其用法:
更改文件/目录的所有者用户:
1
chown user path/to/file_or_directory
更改文件/目录的所有者用户和组:
1
chown user:group path/to/file_or_directory
将文件/目录的所有者用户和组都更改为
user
:1
chown user: path/to/file_or_directory
递归地更改目录及其内容的所有者:
1
chown -R user path/to/directory
更改符号链接的所有者:
1
chown -h user path/to/symlink
将文件/目录的所有者更改为与参考文件相匹配:
1
chown --reference=path/to/reference_file path/to/file_or_directory
chgrp
chgrp
命令用于更改文件和目录的组所有权。以下是一些常见的 chgrp
命令及其用法:
更改文件/目录的所有者组:
1
chgrp group path/to/file_or_directory
递归地更改目录及其内容的所有者组:
1
chgrp -R group path/to/directory
更改符号链接的所有者组:
1
chgrp -h group path/to/symlink
将文件/目录的所有者组更改为与参考文件相匹配:
1
chgrp --reference=path/to/reference_file path/to/file_or_directory
tar
tar
是一个归档实用程序,通常与压缩方法(如 gzip
或 bzip2
)结合使用。以下是一些常见的 tar
命令及其用法:
创建一个归档并将其写入文件:
1
tar cf path/to/target.tar path/to/file1 path/to/file2 ...
创建一个压缩的归档并将其写入文件:
1
tar czf path/to/target.tar.gz path/to/file1 path/to/file2 ...
使用相对路径从目录创建一个压缩的归档:
1
tar czf path/to/target.tar.gz --directory=path/to/directory .
将(压缩的)归档文件解压缩到当前目录:
1
tar xvf path/to/source.tar[.gz|.bz2|.xz]
将(压缩的)归档文件解压缩到目标目录:
1
tar xf path/to/source.tar[.gz|.bz2|.xz] --directory=path/to/directory
创建一个压缩的归档,并根据文件扩展名自动确定压缩程序:
1
tar caf path/to/target.tar.xz path/to/file1 path/to/file2 ...
以详细模式列出归档文件的内容:
1
tar tvf path/to/source.tar
从归档文件中提取与模式匹配的文件:
1
tar xf path/to/source.tar --wildcards "*.html"
gzip
gzip
是一个使用 gzip
压缩(LZ77)的文件压缩/解压实用程序。以下是一些常见的 gzip
命令及其用法:
压缩一个文件,用
gzip
归档替换它:1
gzip file.ext
解压一个文件,用原始未压缩版本替换它:
1
gzip -d file.ext.gz
压缩一个文件,保留原始文件:
1
gzip --keep file.ext
压缩一个文件并指定输出文件名:
1
gzip -c file.ext > compressed_file.ext.gz
解压一个
gzip
归档并指定输出文件名:1
gzip -c -d file.ext.gz > uncompressed_file.ext
指定压缩级别。1=最快(最差),9=最慢(最佳),默认级别是 6:
1
gzip -9 -c file.ext > compressed_file.ext.gz
gunzip
gunzip
是用于从 gzip
(.gz
)归档中提取文件的命令。以下是一些常见的 gunzip
命令及其用法:
从归档中提取文件,并替换原始文件(如果存在):
1
gunzip archive.tar.gz
将文件提取到目标目的地:
1
gunzip --stdout archive.tar.gz > archive.tar
提取文件并保留归档文件:
1
gunzip --keep archive.tar.gz
列出压缩文件的内容:
1
gunzip --list file.txt.gz
从
stdin
解压缩归档:1
cat path/to/archive.gz | gunzip
df
df
用于显示文件系统磁盘空间使用情况的概述。
更多信息:https://www.gnu.org/software/coreutils/df.
显示所有文件系统及其磁盘使用情况:
1
df
以人类可读的形式显示所有文件系统及其磁盘使用情况:
1
df -h
显示包含给定文件或目录的文件系统及其磁盘使用情况:
1
df path/to/file_or_directory
包括关于空闲索引节点数量的统计信息:
1
df -i
显示文件系统但排除指定类型:
1
df -x squashfs -x tmpfs
du
du
用于估算和总结文件和目录的空间使用情况。
更多信息:https://www.gnu.org/software/coreutils/du.
列出目录及其所有子目录的大小,以给定单位(字节/KiB/MiB)显示:
1
du -b|k|m path/to/directory
以人类可读的形式列出目录及其所有子目录的大小(即根据每个大小自动选择适当的单位):
1
du -h path/to/directory
显示单个目录的大小,以人类可读的单位显示:
1
du -sh path/to/directory
列出目录及其所有文件和子目录的人类可读大小:
1
du -ah path/to/directory
列出目录及其任何子目录的人类可读大小,最多到第 N 级深度:
1
du -h --max-depth=N path/to/directory
列出当前目录子目录中所有
.jpg
文件的人类可读大小,并在末尾显示累积总和:1
du -ch */*.jpg
uname
uname
打印有关运行它的机器和操作系统的信息。
更多信息:https://www.gnu.org/software/coreutils/manual/html_node/uname-invocation.html.
打印所有信息:
1
uname --all
打印当前内核名称:
1
uname --kernel-name
打印当前网络节点主机名:
1
uname --nodename
打印当前内核发布版本:
1
uname --kernel-release
打印当前内核版本:
1
uname --kernel-version
打印当前机器硬件名称:
1
uname --machine
打印当前处理器类型:
1
uname --processor
打印当前操作系统名称:
1
uname --operating-system
date
date
用于设置或显示系统日期。
更多信息:https://www.gnu.org/software/coreutils/date.
使用默认区域设置的格式显示当前日期:
1
date +%c
使用 ISO 8601 格式,在 UTC 中显示当前日期:
1
date -u +%Y-%m-%dT%H:%M:%S%Z
将当前日期显示为 Unix 时间戳(自 Unix 纪元以来的秒数):
1
date +%s
将指定的 Unix 时间戳转换为默认格式:
1
date -d @1473305798
将给定日期转换为 Unix 时间戳格式:
1
date -d "2018-09-01 00:00" +%s --utc
使用 RFC-3339 格式 (
YYYY-MM-DD hh:mm:ss TZ
) 显示当前日期:1
date --rfc-3339=s
使用格式
MMDDhhmmYYYY.ss
设置当前日期(YYYY
和.ss
是可选的):1
date 093023592021.59
显示当前 ISO 周数:
1
date +%V
ps
ps
提供关于运行中进程的信息。
更多信息:https://manned.org/ps.
列出所有运行中的进程:
1
ps aux
列出所有运行中的进程,包括完整的命令字符串:
1
ps auxww
搜索与指定字符串匹配的进程:
1
ps aux | grep string
以额外完整格式列出当前用户的所有进程:
1
ps --user $(id -u) -F
以树形式列出当前用户的所有进程:
1
ps --user $(id -u) f
获取一个进程的父进程的 PID:
1
ps -o ppid= -p pid
按内存消耗对进程进行排序:
1
ps --sort size
kill
kill
发送信号给一个进程,通常用于停止进程。
除了 SIGKILL
和 SIGSTOP
之外的所有信号都可以被进程拦截,以执行干净的退出。
更多信息:https://manned.org/kill.
使用默认的
SIGTERM
(终止)信号终止一个程序:1
kill process_id
列出信号值及其对应的名称(不带
SIG
前缀):1
kill -L|-table
终止一个后台作业:
1
kill %job_id
使用
SIGHUP
(挂起)信号终止一个程序。许多守护进程将重新加载而不是终止:1
kill -1|HUP process_id
使用
SIGINT
(中断)信号终止一个程序。这通常是由用户按下Ctrl + C
触发的:1
kill -2|INT process_id
告知操作系统立即终止一个程序(它没有机会捕获信号):
1
kill -9|KILL process_id
通知操作系统暂停一个程序,直到收到
SIGCONT
(”继续”)信号:1
kill -17|STOP process_id
向具有给定 GID(组 ID)的所有进程发送
SIGUSR1
信号:1
kill -SIGUSR1 -group_id
top
top
显示关于运行中进程的动态实时信息。
更多信息:https://manned.org/top.
启动
top
:1
top
不显示任何空闲或僵尸进程:
1
top -i
仅显示给定用户拥有的进程:
1
top -u username
按字段对进程进行排序:
1
top -o field_name
显示给定进程的各个线程:
1
top -Hp process_id
仅显示具有给定 PID(作为逗号分隔的列表传递)的进程。(通常您不会手头知道 PID。此示例从进程名称中选择 PID):
1
top -p $(pgrep -d ',' process_name)
显示有关交互式命令的帮助:
1
?
ping
ping
发送 ICMP ECHO_REQUEST 数据包到网络主机。
更多信息:https://manned.org/ping.
Ping 主机:
1
ping host
仅对主机进行特定次数的 ping:
1
ping -c count host
Ping 主机,指定请求之间的间隔时间(默认为 1 秒):
1
ping -i seconds host
Ping 主机而不尝试查找地址的符号名称:
1
ping -n host
Ping 主机并在接收到数据包时发出响铃(如果您的终端支持):
1
ping -a host
如果未收到响应,也显示一条消息:
1
ping -O host
ifconfig
ifconfig
是网络接口配置工具。
更多信息:https://net-tools.sourceforge.io/man/ifconfig.8.html.
查看以太网适配器的网络设置:
1
ifconfig eth0
显示所有接口的详细信息,包括禁用的接口:
1
ifconfig -a
禁用 eth0 接口:
1
ifconfig eth0 down
启用 eth0 接口:
1
ifconfig eth0 up
为 eth0 接口分配 IP 地址:
1
ifconfig eth0 ip_address
ssh
SSH(Secure Shell)是一种用于安全登录远程系统的协议。它可以用于登录远程服务器或执行命令。
更多信息:https://man.openbsd.org/ssh.
连接到远程服务器:
1
ssh username@remote_host
使用特定身份(私钥)连接到远程服务器:
1
ssh -i path/to/key_file username@remote_host
使用特定端口连接到远程服务器:
1
ssh username@remote_host -p 2222
在远程服务器上运行命令,并分配一个 tty 允许与远程命令进行交互:
1
ssh username@remote_host -t command command_arguments
SSH 隧道:动态端口转发(在
localhost:1080
上建立 SOCKS 代理):1
ssh -D 1080 username@remote_host
SSH 隧道:将特定端口转发(将
localhost:9999
转发到example.org:80
),并禁用伪终端分配和执行远程命令:1
ssh -L 9999:example.org:80 -N -T username@remote_host
SSH 跳跃:通过跳板机连接到远程服务器(可以指定多个跳板机,用逗号分隔):
1
ssh -J username@jump_host username@remote_host
代理转发:将身份验证信息转发到远程机器(查看
man ssh_config
以获取可用选项):1
ssh -A username@remote_host
scp
scp
是 Secure Copy 的缩写,用于在主机之间使用 SSH 安全拷贝协议复制文件。
更多信息:https://man.openbsd.org/scp.
将本地文件复制到远程主机:
1
scp path/to/local_file remote_host:path/to/remote_file
连接到远程主机时使用特定端口:
1
scp -P port path/to/local_file remote_host:path/to/remote_file
从远程主机复制文件到本地目录:
1
scp remote_host:path/to/remote_file path/to/local_directory
递归地将远程主机目录的内容复制到本地目录:
1
scp -r remote_host:path/to/remote_directory path/to/local_directory
在两个远程主机之间通过本地主机传输文件:
1
scp -3 host1:path/to/remote_file host2:path/to/remote_directory
连接到远程主机时使用特定用户名:
1
scp path/to/local_file remote_username@remote_host:path/to/remote_directory
使用特定的 SSH 私钥进行与远程主机的身份验证:
1
scp -i ~/.ssh/private_key path/to/local_file remote_host:path/to/remote_file
连接到远程主机时使用特定代理:
1
scp -J proxy_username@proxy_host path/to/local_file remote_host:path/to/remote_file
wget
wget
用于从 Web 上下载文件,支持 HTTP、HTTPS 和 FTP。
更多信息:https://www.gnu.org/software/wget.
将 URL 的内容下载到一个文件(在这种情况下命名为 “foo”):
1
wget https://example.com/foo
将 URL 的内容下载到一个文件(在这种情况下命名为 “bar”):
1
wget --output-document bar https://example.com/foo
下载单个网页及其所有资源,请求之间间隔 3 秒(脚本、样式表、图像等):
1
wget --page-requisites --convert-links --wait=3 https://example.com/somepage.html
下载目录及其子目录中列出的所有文件(不下载嵌入的页面元素):
1
wget --mirror --no-parent https://example.com/somepath/
限制下载速度和连接重试次数:
1
wget --limit-rate=300k --tries=100 https://example.com/somepath/
使用基本身份验证从 HTTP 服务器下载文件(对 FTP 也有效):
1
wget --user=username --password=password https://example.com
继续未完成的下载:
1
wget --continue https://example.com
将存储在文本文件中的所有 URL 下载到指定目录:
1
wget --directory-prefix path/to/directory --input-file URLs.txt
curl
curl
用于从服务器传输数据,支持大多数协议,包括 HTTP、FTP 和 POP3。
更多信息:https://curl.se/docs/manpage.html.
将 URL 的内容下载到一个文件:
1
curl http://example.com --output path/to/file
下载一个文件,并将输出保存为 URL 指示的文件名:
1
curl --remote-name http://example.com/filename
下载一个文件,跟随位置重定向,并自动继续(恢复)上次的文件传输,并在服务器错误时返回错误:
1
curl --fail --remote-name --location --continue-at - http://example.com/filename
发送表单编码数据(POST 请求的类型为
application/x-www-form-urlencoded
)。使用--data @file_name
或--data @'-'
从标准输入读取:1
curl --data 'name=bob' http://example.com/form
发送带有额外头部的请求,使用自定义的 HTTP 方法:
1
curl --header 'X-My-Header: 123' --request PUT http://example.com
发送 JSON 格式的数据,指定适当的内容类型头部:
1
curl --data '{"name":"bob"}' --header 'Content-Type: application/json' http://example.com/users/1234
传递用户名并提示输入密码以对服务器进行身份验证:
1
curl --user username http://example.com
传递客户端证书和密钥以获取资源,跳过证书验证:
1
curl --cert client.pem --key key.pem --insecure https://example.com
apt
apt
是用于 Debian 系统的软件包管理实用程序。在 Ubuntu 16.04 及更高版本中,交互式使用时推荐使用它来替代 apt-get
。
更多信息:https://manpages.debian.org/latest/apt/apt.8.html.
更新可用软件包和版本的列表(建议在运行其他
apt
命令之前运行此命令):1
sudo apt update
搜索给定软件包:
1
apt search package
显示软件包的信息:
1
apt show package
安装一个软件包,或将其更新到最新可用版本:
1
sudo apt install package
移除一个软件包(使用
purge
选项也会删除其配置文件):1
sudo apt remove package
将所有已安装的软件包升级到它们的最新可用版本:
1
sudo apt upgrade
列出所有软件包:
1
apt list
列出已安装的软件包:
1
apt list --installed
yum
yum
是用于 RHEL、Fedora 和 CentOS(较旧版本)的软件包管理实用程序。
更多信息:https://manned.org/yum.
安装一个新的软件包:
1
yum install package
安装一个新的软件包并假设对所有问题都回答 “是”(也适用于更新,非常适合自动更新):
1
yum -y install package
查找提供特定命令的软件包:
1
yum provides command
移除一个软件包:
1
yum remove package
显示已安装软件包的可用更新:
1
yum check-update
将已安装软件包升级到最新可用版本:
1
yum upgrade
lsblk
lsblk
列出有关设备的信息。
更多信息:https://manned.org/lsblk.
以树形格式列出所有存储设备:
1
lsblk
还列出空设备:
1
lsblk -a
将 SIZE 列以字节而不是人类可读的格式打印出来:
1
lsblk -b
输出关于文件系统的信息:
1
lsblk -f
使用 ASCII 字符进行树状格式化:
1
lsblk -i
输出关于块设备拓扑的信息:
1
lsblk -t
排除由逗号分隔的主设备号指定的设备:
1
lsblk -e 1,7,...
使用以逗号分隔的列名的自定义摘要:
1
lsblk --output NAME,SERIAL,MODEL,TRAN,TYPE,SIZE,FSTYPE,MOUNTPOINT,...
fdisk
fdisk
用于管理硬盘的分区表和分区。
更多信息:https://manned.org/fdisk.
列出分区:
1
sudo fdisk -l
启动分区操作程序:
1
sudo fdisk /dev/sdX
对硬盘进行分区后,创建一个分区:
1
n
对硬盘进行分区后,选择要删除的分区:
1
d
对硬盘进行分区后,查看分区表:
1
p
对硬盘进行分区后,写入所做的更改:
1
w
对硬盘进行分区后,放弃所做的更改:
1
q
对硬盘进行分区后,打开帮助菜单:
1
m
mount
mount
提供对整个文件系统的访问,并将其挂载到一个目录中。
更多信息:https://manned.org/mount.8.
显示所有已挂载的文件系统:
1
mount
将设备挂载到一个目录中:
1
mount -t filesystem_type path/to/device_file path/to/target_directory
如果不存在特定目录,则创建该目录并将设备挂载到其中:
1
mount --mkdir path/to/device_file path/to/target_directory
将设备挂载到一个目录中,供特定用户使用:
1
mount -o uid=user_id,gid=group_id path/to/device_file path/to/target_directory
将 CD-ROM 设备(文件类型为 ISO9660)挂载到
/cdrom
(只读):1
mount -t iso9660 -o ro /dev/cdrom /cdrom
挂载
/etc/fstab
中定义的所有文件系统:1
mount -a
挂载
/etc/fstab
中描述的特定文件系统(例如/dev/sda1 /my_drive ext2 defaults 0 2
):1
mount /my_drive
将一个目录挂载到另一个目录:
1
mount --bind path/to/old_dir path/to/new_dir
umount
umount
从其挂载点断开文件系统的链接,使其不再可访问。当文件系统正在被使用时,无法卸载它。
更多信息:https://manned.org/umount.8.
通过传递挂载源的路径来卸载文件系统:
1
umount path/to/device_file
通过传递已挂载目录的路径来卸载文件系统:
1
umount path/to/mounted_directory
当卸载失败时,尝试将文件系统重新挂载为只读:
1
umount --read-only path/to/mounted_directory
递归地卸载每个指定的目录:
1
umount --recursive path/to/mounted_directory
卸载所有已挂载的文件系统(除了
proc
文件系统):1
umount -a
ftp
ftp
是通过文件传输协议与服务器进行交互的工具。
更多信息:https://manned.org/ftp.
连接到 FTP 服务器:
1
ftp ftp.example.com
指定 IP 地址和端口连接到 FTP 服务器:
1
ftp ip_address port
切换到二进制传输模式(图像、压缩文件等):
1
binary
在每个文件上都不需要确认的情况下传输多个文件:
1
prompt off
下载多个文件(通配符表达式):
1
mget *.png
上传多个文件(通配符表达式):
1
mput *.zip
在远程服务器上删除多个文件:
1
mdelete *.txt
在远程服务器上重命名文件:
1
rename original_filename new_filename
alias
alias
创建别名,即由命令字符串替换的单词。
别名在当前 shell 会话结束时失效,除非在 shell 的配置文件中定义,例如 ~/.bashrc
。
更多信息:https://tldp.org/LDP/abs/html/aliases.html.
列出所有别名:
1
alias
创建一个通用别名:
1
alias word="command"
查看与给定别名相关联的命令:
1
alias word
移除别名命令:
1
unalias word
将
rm
转换为交互式命令:1
alias rm="rm --interactive"
创建
la
作为ls --all
的快捷方式:1
alias la="ls --all"
echo
echo
打印给定的参数。
更多信息:https://www.gnu.org/software/coreutils/echo.
打印一个文本消息。注意:引号是可选的:
1
echo "Hello World"
打印包含环境变量的消息:
1
echo "My path is $PATH"
打印消息但不包含尾随换行符:
1
echo -n "Hello World"
将消息追加到文件中:
1
echo "Hello World" >> file.txt
启用反斜杠转义(特殊字符)的解释:
1
echo -e "Column 1\tColumn 2"
打印上次执行命令的退出状态(注意:在 Windows 命令提示符和 PowerShell 中,相应的命令分别是
echo %errorlevel%
和$lastexitcode
):1
echo $?
source
source
在当前 shell 中执行文件中的命令。
更多信息:https://manned.org/source.
执行给定文件的内容:
1
source path/to/file
执行给定文件的内容(也可以用
.
替换source
):1
. path/to/file
exit
exit
退出 shell。
更多信息:https://manned.org/exit.1posix.
使用最近执行的命令的退出状态退出:
1
exit
使用特定的退出状态退出:
1
exit exit_code
reboot
reboot
重新启动系统。
更多信息:https://manned.org/reboot.8.
重新启动系统:
1
reboot
关闭系统电源(与
poweroff
相同):1
reboot --poweroff
关闭系统(终止所有进程并关闭 CPU)(与
halt
相同):1
reboot --halt
立即重新启动,而不联系系统管理器:
1
reboot --force
写入 wtmp 关机记录而不重新启动系统:
1
reboot --wtmp-only
ln
ln
创建文件和目录的链接。
更多信息:https://www.gnu.org/software/coreutils/ln.
创建到文件或目录的符号链接:
1
ln -s /path/to/file_or_directory path/to/symlink
覆盖现有的符号链接,使其指向不同的文件:
1
ln -sf /path/to/new_file path/to/symlink
创建到文件的硬链接:
1
ln /path/to/file path/to/hardlink
tree
tree
将当前目录的内容显示为树形结构。
更多信息:http://mama.indstate.edu/users/ice/tree/.
打印文件和目录,直到 ‘num’ 层深度(其中 1 表示当前目录):
1
tree -L num
仅打印目录:
1
tree -d
打印隐藏文件并使用颜色显示:
1
tree -a -C
打印树形结构,不显示缩进线,而是显示完整路径(使用
-N
不转义非可打印字符):1
tree -i -f
打印每个文件的大小和每个目录的累积大小,以人类可读的格式显示:
1
tree -s -h --du
使用通配符(glob)模式在树形结构中打印文件,并剪除不包含匹配文件的目录:
1
tree -P '*.txt' --prune
使用通配符(glob)模式在树形结构中打印目录,并剪除不是所需目录的祖先目录:
1
tree -P directory_name --matchdirs --prune
忽略给定目录并打印树:
1
tree -I 'directory_name1|directory_name2'
lsof
lsof
列出打开的文件及其对应的进程。
更多信息:https://manned.org/lsof.
查找打开了给定文件的进程:
1
lsof path/to/file
查找打开了本地网络端口的进程:
1
lsof -i :port
仅输出进程 ID(PID):
1
lsof -t path/to/file
列出指定用户打开的文件:
1
lsof -u username
列出由给定命令或进程打开的文件:
1
lsof -c process_or_command_name
列出由指定进程(通过其 PID)打开的文件:
1
lsof -p PID
列出一个目录中打开的文件:
1
lsof +D path/to/directory
查找监听本地 IPv6 TCP 端口的进程,并不转换网络或端口号:
1
lsof -i6TCP:port -sTCP:LISTEN -n -P
sudo
sudo
可以以超级用户或其他用户的身份执行单个命令。
更多信息:https://www.sudo.ws/sudo.html.
以超级用户身份运行命令:
1
sudo less /var/log/syslog
以超级用户身份用默认编辑器编辑文件:
1
sudo --edit /etc/fstab
以其他用户和/或组的身份运行命令:
1
sudo --user=user --group=group id -a
使用
sudo
前缀重复上一个命令(仅适用于 Bash、Zsh 等):1
sudo !!
以超级用户特权启动默认 shell 并运行登录特定文件(
.profile
、.bash_profile
等):1
sudo --login
以超级用户特权启动默认 shell,但不更改环境:
1
sudo --shell
以指定用户身份启动默认 shell,加载用户的环境并读取登录特定文件(
.profile
、.bash_profile
等):1
sudo --login --user=user
列出调用用户被允许(和禁止)执行的命令:
1
sudo --list
su
su
命令可以切换到另一个用户的 shell。
更多信息:https://manned.org/su.
切换到超级用户(需要 root 密码):
1
su
切换到指定用户(需要用户密码):
1
su username
切换到指定用户并模拟完整的登录 shell:
1
su - username
以另一个用户的身份执行命令:
1
su - username -c "command"
whoami
whoami
命令打印与当前有效用户ID相关联的用户名。
更多信息:https://www.gnu.org/software/coreutils/whoami.
显示当前登录的用户名:
1
whoami
在用户ID更改后显示用户名:
1
sudo whoami
whois
whois
是用于WHOIS(RFC 3912)协议的命令行客户端。
更多信息:https://github.com/rfc1036/whois.
获取关于域名的信息:
1
whois example.com
获取关于IP地址的信息:
1
whois 8.8.8.8
获取IP地址的滥用联系人信息:
1
whois -b 8.8.8.8
free
free
命令用于显示系统中空闲和已使用的内存量。
更多信息:https://manned.org/free.
显示系统内存:
1
free
以字节/KB/MB/GB为单位显示内存:
1
free -b|k|m|g
以人类可读的单位显示内存:
1
free -h
每2秒刷新一次输出:
1
free -s 2
crontab
crontab
命令用于为当前用户安排cron作业以在时间间隔内运行。
更多信息:https://crontab.guru/.
编辑当前用户的crontab文件:
1
crontab -e
编辑指定用户的crontab文件:
1
sudo crontab -e -u user
用给定文件的内容替换当前的crontab文件:
1
crontab path/to/file
查看当前用户的现有cron作业列表:
1
crontab -l
删除当前用户的所有cron作业:
1
crontab -r
示例作业,每天10:00运行一次(*表示任何值):
1
0 10 * * * command_to_execute
示例crontab条目,每10分钟运行一次命令:
1
*/10 * * * * command_to_execute
示例crontab条目,每周五02:30运行特定脚本:
1
30 2 * * Fri /absolute/path/to/script.sh
nohup
nohup
命令允许进程在终端关闭时继续运行。
更多信息:https://www.gnu.org/software/coreutils/nohup.
运行一个可以在终端关闭后继续存在的进程:
1
nohup command argument1 argument2 ...
在后台模式下启动
nohup
:1
nohup command argument1 argument2 ... &
运行一个可以在终端关闭后继续存在的shell脚本:
1
nohup path/to/script.sh &
运行一个进程并将输出写入特定文件:
1
nohup command argument1 argument2 ... > path/to/output_file &
systemctl
systemctl
是用于控制systemd系统和服务管理器的命令。
更多信息:https://www.freedesktop.org/software/systemd/man/systemctl.html.
显示所有运行中的服务:
1
systemctl status
列出失败的单元:
1
systemctl --failed
启动/停止/重启/重新加载一个服务:
1
systemctl start|stop|restart|reload unit
显示一个单元的状态:
1
systemctl status unit
启用/禁用一个单元以在启动时启动:
1
systemctl enable|disable unit
屏蔽/取消屏蔽一个单元以防止启用和手动激活:
1
systemctl mask|unmask unit
重新加载systemd,扫描新的或更改的单元:
1
systemctl daemon-reload
检查单元是否已启用:
1
systemctl is-enabled unit
进阶
z
z
是一个跟踪最常使用的(按照频率和最近访问时间)目录,并允许使用字符串模式或正则表达式快速导航到它们的工具。以下是一些常见的 z
命令及其用法:
转到包含名称中有 “foo” 的目录:
1
z foo
转到包含 “foo” 和 “bar” 的目录:
1
z foo bar
转到匹配 “foo” 的排名最高的目录:
1
z -r foo
转到最近访问的匹配 “foo” 的目录:
1
z -t foo
列出
z
数据库中匹配 “foo” 的所有目录:1
z -l foo
从
z
数据库中删除当前目录:1
z -x .
限制匹配到当前目录的子目录:
1
z -c foo
bat
bat
是一个打印和连接文件的工具,类似于 cat
,但具有语法高亮和 Git 集成功能。以下是一些常见的 bat
命令及其用法:
将一个或多个文件的内容漂亮地打印到
stdout
:1
bat path/to/file1 path/to/file2 ...
将多个文件连接到目标文件:
1
bat path/to/file1 path/to/file2 ... > path/to/target_file
移除装饰和禁用分页(
--style plain
可以替换为-p
,或两个选项都可以用-pp
替换):1
bat --style plain --pager never path/to/file
使用不同的背景颜色突出显示特定行或行范围:
1
bat --highlight-line|-H 10|5:10|:10|10:|10:+5 path/to/file
显示非打印字符,如空格、制表符或换行符:
1
bat --show-all|-A path/to/file
在输出中移除所有装饰,除了行号:
1
bat --number|-n path/to/file
通过显式设置语言来对 JSON 文件进行语法高亮:
1
bat --language|-l json path/to/file.json
显示所有支持的语言:
1
bat --list-languages|-L
fdfind
fd
是 find
的替代工具,旨在比 find
更快、更易于使用。以下是一些常见的 fd
命令及其用法:
在当前目录递归查找匹配特定模式的文件:
1
fd "string|regex"
查找以
foo
开头的文件:1
fd "^foo"
查找具有特定扩展名的文件:
1
fd --extension txt
在特定目录中查找文件:
1
fd "string|regex" path/to/directory
在搜索中包括被忽略和隐藏的文件:
1
fd --hidden --no-ignore "string|regex"
对每个搜索结果执行一个命令:
1
fd "string|regex" --exec command
ripgrep
rg
是一个递归的以行为单位搜索工具,旨在成为 grep
的更快替代工具。以下是一些常见的 rg
命令及其用法:
在当前目录递归搜索正则表达式:
1
rg regular_expression
在当前目录递归搜索正则表达式,包括隐藏文件和
.gitignore
中列出的文件:1
rg --no-ignore --hidden regular_expression
仅在子目录集合中搜索正则表达式:
1
rg regular_expression set_of_subdirs
在匹配 glob 的文件中搜索正则表达式(例如
README.*
):1
rg regular_expression --glob glob
搜索与正则表达式匹配的文件名:
1
rg --files | rg regular_expression
仅列出匹配的文件(当管道到其他命令时很有用):
1
rg --files-with-matches regular_expression
显示不匹配给定正则表达式的行:
1
rg --invert-match regular_expression
搜索一个字面字符串模式:
1
rg --fixed-strings -- string
nginx
nginx
是一个 Web 服务器。以下是一些常见的 nginx
命令及其用法:
使用默认配置文件启动服务器:
1
nginx
使用自定义配置文件启动服务器:
1
nginx -c configuration_file
使用前缀为配置文件中的所有相对路径添加前缀:
1
nginx -c configuration_file -p prefix/for/relative/paths
在不影响正在运行的服务器的情况下测试配置:
1
nginx -t
通过发送信号重新加载配置,实现无停机时间:
1
nginx -s reload
docker
docker
是用于管理 Docker 容器和镜像的工具。以下是一些常见的 docker
命令及其用法:
列出所有 Docker 容器(运行和停止状态):
1
docker ps --all
使用自定义名称从镜像启动一个容器:
1
docker run --name container_name image
启动或停止现有容器:
1
docker start|stop container_name
从 Docker 注册表中拉取镜像:
1
docker pull image
显示已经下载的镜像列表:
1
docker images
在运行的容器内打开一个 shell:
1
docker exec -it container_name sh
删除一个已经停止的容器:
1
docker rm container_name
获取并跟踪容器的日志:
1
docker logs -f container_name
htop
htop
是一个显示关于运行进程的动态实时信息的工具,是 top
的增强版本。以下是一些常见的 htop
命令及其用法:
启动
htop
:1
htop
启动
htop
并显示特定用户拥有的进程:1
htop --user username
按指定的
sort_item
对进程进行排序(使用htop --sort help
查看可用选项):1
htop --sort sort_item
以指定的更新间隔启动
htop
,单位为十分之一秒(例如 50 = 5 秒):1
htop --delay 50
在运行
htop
时查看交互式命令:1
?
切换到不同的标签:
1
tab
显示帮助:
1
htop --help
nmap
nmap
是一个网络探测工具和安全/端口扫描器。以下是一些常见的 nmap
命令及其用法:
使用不同的 [v]erbosity 级别扫描远程主机的前 1000 个端口:
1
nmap -v1|2|3 ip_or_hostname
对整个子网或单个主机进行一个非常激进的 ping 扫描:
1
nmap -T5 -sn 192.168.0.0/24|ip_or_hostname1,ip_or_hostname2,...
启用操作系统检测、版本检测、脚本扫描和跟踪路由:
1
sudo nmap -A ip_or_hostname1,ip_or_hostname2,...
扫描指定列表的端口(使用
-p-
扫描 1 到 65535 的所有端口):1
nmap -p port1,port2,... ip_or_host1,ip_or_host2,...
使用默认的 NSE 脚本对前 1000 个端口执行服务和版本检测,并将结果写入输出文件 (
-oA
):1
nmap -sC -sV -oA top-1000-ports ip_or_host1,ip_or_host2,...
使用
default and safe
NSE 脚本小心地扫描目标:1
nmap --script "default and safe" ip_or_host1,ip_or_host2,...
使用所有可用的
http-*
NSE 脚本扫描标准端口 80 和 443 上运行的 Web 服务器:1
nmap --script "http-*" ip_or_host1,ip_or_host2,... -p 80,443
尝试通过使用极慢的扫描 (
-T0
)、假源地址 (-D
)、[f]ragmented 分组、随机数据和其他方法来回避 IDS/IPS 检测:1
sudo nmap -T0 -D decoy_ip1,decoy_ip2,... --source-port 53 -f --data-length 16 -Pn ip_or_host
gcc
gcc
是用于预处理和编译 C 和 C++ 源文件,然后将它们汇编和链接在一起的工具。以下是一些常见的 gcc
命令及其用法:
将多个源文件编译为一个可执行文件:
1
gcc path/to/source1.c path/to/source2.c ... -o path/to/output_executable
显示常见警告,在输出中包含调试符号,并在不影响调试的情况下进行优化:
1
gcc path/to/source.c -Wall -g -Og -o path/to/output_executable
从不同路径包含库文件:
1
gcc path/to/source.c -o path/to/output_executable -Ipath/to/header -Lpath/to/library -llibrary_name
将源代码编译为汇编指令:
1
gcc -S path/to/source.c
将源代码编译为目标文件而不进行链接:
1
gcc -c path/to/source.c
为了提高性能对编译程序进行优化:
1
gcc path/to/source.c -O1|2|3|fast -o path/to/output_executable
xxd
xxd
是一个用于从二进制文件生成十六进制表示(hexdump),或者反之的工具。以下是一些常见的 xxd
命令及其用法:
从二进制文件生成十六进制表示并显示输出:
1
xxd input_file
从二进制文件生成十六进制表示并保存为文本文件:
1
xxd input_file output_file
使用更紧凑的输出,将连续的零(如果有)替换为星号:
1
xxd -a input_file
每行显示十个字节(八位)的十六进制数据:
1
xxd -c 10 input_file
仅显示前 32 个字节的输出:
1
xxd -l 32 input_file
以纯文本模式显示输出,列之间没有间隔:
1
xxd -p input_file
将十六进制表示的文本转换回二进制,并将其保存为二进制文件:
1
xxd -r -p input_file output_file
ffmpeg
ffmpeg
是一个用于视频转换的工具。以下是一些常见的 ffmpeg
命令及其用法:
从视频中提取音频并保存为 MP3:
1
ffmpeg -i path/to/video.mp4 -vn path/to/sound.mp3
将 FLAC 文件转码为 Red Book CD 格式(44100kHz,16bit):
1
ffmpeg -i path/to/input_audio.flac -ar 44100 -sample_fmt s16 path/to/output_audio.wav
将视频保存为 GIF,将高度缩放为 1000px,并设置帧率为 15:
1
ffmpeg -i path/to/video.mp4 -vf 'scale=-1:1000' -r 15 path/to/output.gif
将编号的图像(
frame_1.jpg
、frame_2.jpg
等)合并为视频或 GIF:1
ffmpeg -i path/to/frame_%d.jpg -f image2 video.mpg|video.gif
从给定的开始时间 mm:ss 到结束时间 mm2:ss2 对视频进行修剪(省略 -to 标志以修剪至结尾):
1
ffmpeg -ss mm:ss -to mm2:ss2 -i path/to/input_video.mp4 -codec copy path/to/output_video.mp4
将 AVI 视频转换为 MP4。AAC 音频 @ 128kbit,h264 视频 @ CRF 23:
1
ffmpeg -i path/to/input_video.avi -codec:a aac -b:a 128k -codec:v libx264 -crf 23 path/to/output_video.mp4
将 MKV 视频重新混流为 MP4,而不重新编码音频或视频流:
1
ffmpeg -i path/to/input_video.mkv -codec copy path/to/output_video.mp4
将 MP4 视频转换为 VP9 编解码器。对于最佳质量,请使用 CRF 值(推荐范围 15-35),并且 -b:v 必须为 0:
1
ffmpeg -i path/to/input_video.mp4 -codec:v libvpx-vp9 -crf 30 -b:v 0 -codec:a libopus -vbr on -threads number_of_threads path/to/output_video.webm
git
git
是一个分布式版本控制系统。以下是一些常见的 git
命令及其用法:
执行一个 Git 子命令:
1
git subcommand
在自定义仓库根路径上执行一个 Git 子命令:
1
git -C path/to/repo subcommand
使用给定的配置集执行一个 Git 子命令:
1
git -c 'config.key=value' subcommand
显示帮助:
1
git --help
显示特定子命令(如
clone
、add
、push
、log
等)的帮助:1
git help subcommand
显示版本:
1
git --version
awk
awk
是一个多功能的文件处理编程语言。以下是一些常见的 awk
命令及其用法:
打印空格分隔文件中的第五列(也称为字段):
1
awk '{print $5}' path/to/file
打印包含“foo”的行中的第二列在一个空格分隔的文件中:
1
awk '/foo/ {print $2}' path/to/file
使用逗号(而不是空格)作为字段分隔符,在文件中打印每行的最后一列:
1
awk -F ',' '{print $NF}' path/to/file
对文件中的第一列的值进行求和并打印总和:
1
awk '{s+=$1} END {print s}' path/to/file
从第一行开始,打印每三行中的一行:
1
awk 'NR%3==1' path/to/file
根据条件打印不同的值:
1
awk '{if ($1 == "foo") print "Exact match foo"; else if ($1 ~ "bar") print "Partial match bar"; else print "Baz"}' path/to/file
打印第 10 列值等于指定值的所有行:
1
awk '($10 == value)' path/to/file
打印第 10 列值在最小值和最大值之间的所有行:
1
awk '($10 >= min_value && $10 <= max_value)' path/to/file
sed
sed
是一种脚本化文本编辑工具,以下是一些常见的 sed
命令及其用法:
将所有
apple
(基本正则表达式)出现替换为mango
(基本正则表达式)在所有输入行中,并将结果打印到stdout
:1
command | sed 's/apple/mango/g'
将所有
apple
(扩展正则表达式)出现替换为APPLE
(扩展正则表达式)在所有输入行中,并将结果打印到stdout
:1
command | sed -E 's/(apple)/\U\1/g'
在特定文件中将所有
apple
(基本正则表达式)出现替换为mango
(基本正则表达式),并就地覆盖原始文件:1
sed -i 's/apple/mango/g' path/to/file
执行特定的脚本文件并将结果打印到
stdout
:1
command | sed -f path/to/script.sed
只打印第一行到
stdout
:1
command | sed -n '1p'
删除文件的第一行:
1
sed -i 1d path/to/file
在文件的第一行插入新行:
1
sed -i '1i\your new line text\' path/to/file
man
man
是一个用于格式化和显示手册页的命令,以下是一些常见的用法:
显示一个命令的手册页:
1
man command
在浏览器中打开一个命令的手册页:
1
man --html command
显示第 7 节中一个命令的手册页:
1
man 7 command
列出一个命令的所有可用节:
1
man --whatis command
显示搜索 man 手册页的路径:
1
man --path
显示手册页的位置而不是手册页本身:
1
man --where command
使用特定的语言环境显示手册页:
1
man --locale=locale command
搜索包含搜索字符串的手册页:
1
man --apropos "search_string"
md5sum
md5sum
是一个用于计算 MD5 密码校验和的命令,以下是一些常见的用法:
计算一个或多个文件的 MD5 校验和:
1
md5sum path/to/file1 path/to/file2 ...
计算并将 MD5 校验和列表保存到文件中:
1
md5sum path/to/file1 path/to/file2 ... > path/to/file.md5
从
stdin
计算 MD5 校验和:1
command | md5sum
读取包含 MD5 校验和和文件名的文件,并验证所有文件的校验和是否匹配:
1
md5sum --check path/to/file.md5
仅在缺失文件或验证失败时显示消息:
1
md5sum --check --quiet path/to/file.md5
仅在验证失败时显示消息,忽略缺失的文件:
1
md5sum --ignore-missing --check --quiet path/to/file.md5
gpg
gpg
是 GNU 隐私保护工具。以下是一些常见的 gpg
命令及其用法:
交互式创建 GPG 公钥和私钥:
1
gpg --full-generate-key
对
doc.txt
进行签名但不加密(输出到doc.txt.asc
):1
gpg --clearsign doc.txt
对
doc.txt
进行加密和签名,发送给 alice@example.com 和 bob@example.com(输出到doc.txt.gpg
):1
gpg --encrypt --sign --recipient alice@example.com --recipient bob@example.com doc.txt
使用仅密码对
doc.txt
进行加密(输出到doc.txt.gpg
):1
gpg --symmetric doc.txt
解密
doc.txt.gpg
(输出到标准输出):1
gpg --decrypt doc.txt.gpg
导入一个公钥:
1
gpg --import public.gpg
导出 alice@example.com 的公钥(输出到标准输出):
1
gpg --export --armor alice@example.com
导出 alice@example.com 的私钥(输出到标准输出):
1
gpg --export-secret-keys --armor alice@example.com
sha256sum
sha256sum
用于计算 SHA256 加密校验和。以下是一些常见的 sha256sum
命令及其用法:
计算一个或多个文件的 SHA256 校验和:
1
sha256sum path/to/file1 path/to/file2 ...
计算并将 SHA256 校验和列表保存到文件:
1
sha256sum path/to/file1 path/to/file2 ... > path/to/file.sha256
从
stdin
计算 SHA256 校验和:1
command | sha256sum
读取包含 SHA256 校验和和文件名的文件,并验证所有文件的校验和是否匹配:
1
sha256sum --check path/to/file.sha256
仅在文件丢失或验证失败时显示消息:
1
sha256sum --check --quiet path/to/file.sha256
仅在验证失败时显示消息,忽略丢失的文件:
1
sha256sum --ignore-missing --check --quiet path/to/file.sha256