banner
Hi my new friend!

LINUX命令详解

Scroll down

基础

以下列出常见 50 个 Linux 命令:

  1. ls - 列出目录内容
  2. cd - 更改当前目录
  3. pwd - 显示当前工作目录
  4. mkdir - 创建新目录
  5. rm - 删除文件或目录
  6. cp - 复制文件或目录
  7. mv - 移动文件或目录
  8. touch - 创建空文件或更改文件时间戳
  9. cat - 显示文件内容
  10. more - 分页显示文件内容
  11. less - 以可滚动方式显示文件内容
  12. head - 显示文件的前几行
  13. tail - 显示文件的后几行
  14. grep - 在文件中搜索指定模式
  15. find - 查找文件
  16. chmod - 修改文件权限
  17. chown - 修改文件所有者
  18. chgrp - 修改文件所属组
  19. tar - 打包和解压文件
  20. gzip - 压缩文件
  21. gunzip - 解压缩文件
  22. df - 显示文件系统使用情况
  23. du - 显示目录或文件的磁盘使用情况
  24. uname - 显示系统信息
  25. date - 显示或设置系统日期和时间
  26. ps - 显示进程状态
  27. kill - 终止进程
  28. top - 显示系统资源使用情况
  29. ping - 测试主机的网络连通性
  30. ifconfig - 显示和配置网络接口信息
  31. ssh - 远程登录到另一台主机
  32. scp - 安全复制文件
  33. wget - 下载文件
  34. curl - 发送或接收数据
  35. apt-get - Debian 系统中安装、升级和删除软件包
  36. yum - Red Hat 系统中安装、升级和删除软件包
  37. lsblk - 列出块设备信息
  38. fdisk - 磁盘分区工具
  39. mount - 挂载文件系统
  40. umount - 卸载文件系统
  41. passwd - 修改用户密码
  42. useradd - 添加新用户
  43. userdel - 删除用户
  44. groupadd - 添加新用户组
  45. groupdel - 删除用户组
  46. shutdown - 关闭系统
  47. reboot - 重启系统
  48. alias - 取别名
  49. nc - 网络工具,用于发送和接收数据
  50. 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 命令及其用法:

  • 输出文件的前几行:

    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 是一个归档实用程序,通常与压缩方法(如 gzipbzip2)结合使用。以下是一些常见的 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 发送信号给一个进程,通常用于停止进程。
除了 SIGKILLSIGSTOP 之外的所有信号都可以被进程拦截,以执行干净的退出。

更多信息: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

fdfind 的替代工具,旨在比 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.jpgframe_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
  • 显示特定子命令(如 cloneaddpushlog 等)的帮助:

    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.combob@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
其他文章
目录导航 置顶
  1. 1. 基础
    1. 1.1. ls
    2. 1.2. cd
    3. 1.3. pwd
    4. 1.4. mkdir
    5. 1.5. rm
    6. 1.6. cp
    7. 1.7. mv
    8. 1.8. touch
    9. 1.9. cat
    10. 1.10. more
    11. 1.11. less
    12. 1.12. head
    13. 1.13. tail
    14. 1.14. grep
    15. 1.15. find
    16. 1.16. chmod
    17. 1.17. chown
    18. 1.18. chgrp
    19. 1.19. tar
    20. 1.20. gzip
    21. 1.21. gunzip
    22. 1.22. df
    23. 1.23. du
    24. 1.24. uname
    25. 1.25. date
    26. 1.26. ps
    27. 1.27. kill
    28. 1.28. top
    29. 1.29. ping
    30. 1.30. ifconfig
    31. 1.31. ssh
    32. 1.32. scp
    33. 1.33. wget
    34. 1.34. curl
    35. 1.35. apt
    36. 1.36. yum
    37. 1.37. lsblk
    38. 1.38. fdisk
    39. 1.39. mount
    40. 1.40. umount
    41. 1.41. ftp
    42. 1.42. alias
    43. 1.43. echo
    44. 1.44. source
    45. 1.45. exit
    46. 1.46. reboot
    47. 1.47. ln
    48. 1.48. tree
    49. 1.49. lsof
    50. 1.50. sudo
    51. 1.51. su
    52. 1.52. whoami
    53. 1.53. whois
    54. 1.54. free
    55. 1.55. crontab
    56. 1.56. nohup
    57. 1.57. systemctl
  2. 2. 进阶
    1. 2.1. z
    2. 2.2. bat
    3. 2.3. fdfind
    4. 2.4. ripgrep
    5. 2.5. nginx
    6. 2.6. docker
    7. 2.7. htop
    8. 2.8. nmap
    9. 2.9. gcc
    10. 2.10. xxd
    11. 2.11. ffmpeg
    12. 2.12. git
    13. 2.13. awk
    14. 2.14. sed
    15. 2.15. man
    16. 2.16. md5sum
    17. 2.17. gpg
    18. 2.18. sha256sum
请输入关键词进行搜索