一、文件管理

1. ls - 显示目录中文件及其属性信息

  • 功能:列出目录内容。
  • 常用参数
    • -a:显示所有文件和目录,包括以 . 开头的隐藏文件。
    • -l:以长格式显示文件和目录的详细信息,如权限、所有者、大小、修改时间等。
    • -h:与 -l 结合使用,以人类可读的格式显示文件大小(如 KMG 等)。
    • -R:递归列出子目录的内容。
    • -t:按文件修改时间排序,最新的文件排在最前面。
    • -S:按文件大小排序,最大的文件排在最前面。
  • 示例
    # 显示当前目录下所有文件和目录,包括隐藏文件
    ls -a
    # 以长格式显示当前目录下的文件和目录
    ls -l
    # 以长格式和人类可读的格式显示当前目录下的文件和目录
    ls -lh
    # 递归列出当前目录及其子目录下的所有文件和目录
    ls -R
    # 按文件修改时间排序显示当前目录下的文件和目录
    ls -lt
    # 按文件大小排序显示当前目录下的文件和目录
    ls -lS
  • 题目
    • 如何以长格式显示 /home 目录下的所有文件和目录,包括隐藏文件,并按文件大小排序?
    • 如何递归列出 /var/log 目录下的所有文件和目录,并以人类可读的格式显示文件大小,按修改时间排序?
    • 如何只显示当前目录下的目录,不显示文件,并按文件修改时间排序?

2. cd - 切换目录

  • 功能:改变当前工作目录。
  • 常用参数:无
  • 示例
    # 进入指定目录
    cd /home/user
    # 进入用户主目录
    cd ~
    # 返回上一级目录
    cd ..
    # 返回上上一级目录
    cd ../..
  • 题目
    • 如何从当前目录进入 /usr/local 目录?
    • 如何从 /home/user 目录返回上一级目录?
    • 如何进入当前用户的主目录?

3. mkdir - 创建目录文件

  • 功能:创建新的目录。
  • 常用参数
    • -p:递归创建目录,即如果父目录不存在,也会一并创建。
  • 示例
    # 在当前目录下创建一个名为 test 的目录
    mkdir test
    # 递归创建多层目录
    mkdir -p /home/user/test/subdir
  • 题目
    • 如何在 /home 目录下创建一个名为 new_dir 的目录?
    • 如何在当前目录下递归创建 dir1/dir2/dir3 目录?
    • 如何创建一个带有空格的目录名,如 my new dir

4. rmdir - 删除空目录文件

  • 功能:删除空目录。
  • 常用参数:无
  • 示例
    # 删除当前目录下的空目录 test
    rmdir test
  • 题目
    • 如何删除 /home/user 目录下的空目录 empty_dir
    • 如果目录不为空,使用 rmdir 会有什么结果?
    • 如何删除多层空目录,如 dir1/dir2/dir3

5. rm - 删除文件或目录

  • 功能:删除文件或目录。
  • 常用参数
    • -r:递归删除目录及其内容。
    • -f:强制删除,不提示确认。
    • -i:交互式删除,删除前询问确认。
  • 示例
    # 删除文件
    rm test.txt
    # 递归删除目录及其内容
    rm -r test_dir
    # 强制删除文件
    rm -f test.txt
    # 交互式删除文件
    rm -i test.txt
  • 题目
    • 如何删除 /home/user 目录下的所有 .log 文件?
    • 如何强制递归删除 /home/user/test 目录及其内容?
    • 如何在删除文件前进行交互式确认?

6. cp - 复制文件或目录

  • 功能:复制文件或目录。
  • 常用参数
    • -r:递归复制目录及其内容。
    • -p:保留源文件或目录的属性,如权限、时间戳等。
    • -i:覆盖既有文件之前先询问用户。
    • -a:此参数的效果和同时指定 -dpR 参数相同,即归档复制,保留文件的所有属性。
  • 示例
    # 复制文件
    cp test.txt new_test.txt
    # 递归复制目录
    cp -r test_dir new_test_dir
    # 复制文件并保留属性
    cp -p test.txt new_test.txt
    # 覆盖文件前询问用户
    cp -i test.txt new_test.txt
    # 归档复制目录
    cp -a test_dir new_test_dir
  • 题目
    • 如何将 /home/user 目录下的所有 .txt 文件复制到 /backup 目录下,并保留属性?
    • 如何递归复制 /home/user/test 目录及其内容到 /backup/test 目录下,覆盖文件前询问用户?
    • 如何使用 -a 参数复制 /home/user 目录到 /backup 目录?

7. mv - 移动或改名文件

  • 功能:移动文件或目录,也可用于重命名文件或目录。
  • 常用参数:无
  • 示例
    # 移动文件
    mv test.txt /home/user/
    # 重命名文件
    mv test.txt new_name.txt
  • 题目
    • 如何将 /home/user 目录下的 old_file.txt 移动到 /backup 目录下,并改名为 new_file.txt
    • 如何将 /home/user/test 目录移动到 /backup 目录下?
    • 如何重命名 /home/user 目录为 /home/new_user

8. touch - 创建文件

  • 功能:创建一个新的空文件,如果文件已存在,则更新其访问和修改时间。
  • 常用参数:无
  • 示例
    # 在当前目录下创建一个名为 test.txt 的文件
    touch test.txt
  • 题目
    • 如何在 /home/user 目录下创建一个名为 new_file.txt 的文件?
    • 如果 test.txt 文件已存在,使用 touch 命令会有什么效果?
    • 如何同时创建多个文件,如 file1.txtfile2.txtfile3.txt

9. ln - 创建链接

  • 功能:创建硬链接或符号链接。
  • 常用参数
    • -s:创建符号链接(软链接)。
  • 示例
    # 创建硬链接
    ln /home/user/test.txt /home/user/link_to_test.txt
    # 创建符号链接
    ln -s /home/user/test.txt /home/user/soft_link_to_test.txt
  • 题目
    • 如何在 /home/user 目录下为 /var/log/syslog 文件创建一个符号链接?
    • 硬链接和符号链接有什么区别?
    • 如何删除符号链接?

10. find - 根据路径和条件搜索指定文件

  • 功能:在指定目录下根据各种条件查找文件。
  • 常用参数
    • -name:按文件名查找。
    • -size:按文件大小查找,+ 表示大于指定大小,- 表示小于指定大小,单位可以是 k(KB)、M(MB)、G(GB)等。
    • -type:按文件类型查找,f 表示文件,d 表示目录,l 表示链接文件等。
    • -mtime:按文件修改时间查找,+ 表示大于指定天数,- 表示小于指定天数。
    • -exec:对查找到的文件执行指定的命令,命令以 {} 表示当前文件,以 \; 结尾。
    • -perm:按文件权限查找,可使用数字或符号表示权限。
  • 示例
    # 在当前目录下查找所有名为 test.txt 的文件
    find . -name test.txt
    # 在 /home 目录下查找大小大于 10M 的文件
    find /home -size +10M
    # 在当前目录下查找所有目录
    find . -type d
    # 在当前目录下查找最近 7 天内修改过的文件
    find . -mtime -7
    # 查找当前目录下所有 .txt 文件,并将其删除
    find . -name "*.txt" -exec rm {} \;
    # 查找当前目录下权限为 755 的文件
    find . -perm 755
  • 题目
    • 如何在 /var/log 目录下查找所有扩展名为 .log 且大小小于 1M 的文件?
    • 如何在 /home 目录下查找最近 30 天内未修改过的目录,并将其删除?
    • 如何查找当前目录下权限为 644 的 .sh 文件,并将其权限修改为 755?

11. nl - 为文件添加行号

  • 功能:为文件内容添加行号,可对行号进行多种显示设计。
  • 常用参数
    • -b:指定行号指定的方式,-b a 表示不论是否为空行,也同样列出行号;-b t 表示空行不列出行号(默认值)。
    • -n:列出行号表示的方法,-n ln 表示行号在屏幕最左方显示;-n rn 表示行号在自己栏位最右方显示,且不加 0;-n rz 表示行号在自己栏位最右方显示,且加 0。
    • -w:行号栏位占用的位数。
    • -p:在逻辑定界符处不重新开始计算行号。
  • 示例
    # 为文件添加行号
    .nl test.txt
    # 空行也加上行号
    .nl -b a test.txt
    # 让行号前面自动补上 0,统一输出格式
    .nl -b a -n rz test.txt
    # 调整行号位数为 3 位
    .nl -b a -n rz -w 3 test.txt
  • 题目
    • 如何为 /home/user/test.txt 文件添加行号,且空行也显示行号,行号显示在最右方,位数为 3 位?
    • 如何在逻辑定界符处不重新开始计算行号?
    • 如何将行号的显示格式设置为 001002 等?

12. tail - 查看文件尾部内容

  • 功能:查看文件尾部内容,默认显示文件末尾 10 行。
  • 常用参数
    • -c:设置显示文件尾部的字符数。
    • -f:持续显示文件尾部最新内容。
    • -n:设置显示文件尾部的行数。
    • --pid:当指定 PID 进程结束时,自动退出命令。
  • 示例
    # 默认显示指定文件尾部的后 10 行内容
    .tail File.cfg
    # 指定显示指定文件尾部的后 5 行内容
    .tail -n 5 File.cfg
    # 指定显示指定文件尾部的后 30 个字节
    .tail -c 30 File.cfg
    # 持续刷新显示指定文件尾部的后 10 行内容
    .tail -f File.cfg
    # 当指定 PID 进程结束时,自动退出命令
    .tail -f --pid=1234 File.cfg
  • 题目
    • 如何查看 /var/log/syslog 文件的最后 20 行内容?
    • 如何持续监控 /var/log/messages 文件的最新内容,直到 PID 为 5678 的进程结束?
    • 如何查看 /home/user/test.txt 文件的最后 50 个字符?

13. head - 查看文件开头内容

  • 功能:显示文件开头的内容,默认为前 10 行。
  • 常用参数
    • -c:设置显示头部内容的字符数。
    • -n:设置显示行数。
    • -v:显示文件名的头信息。
    • -q:不显示文件名的头信息。
  • 示例
    # 默认显示文件的前 10 行内容
    .head -n 10 File.cfg
    # 显示指定文件的前 5 行内容
    .head -n 5 File.cfg
    # 显示指定文件的前 20 个字符
    .head -c 20 File.cfg
    # 显示文件名的头信息
    .head -v File.cfg
    # 不显示文件名的头信息
    .head -q File.cfg
  • 题目
    • 如何查看 /var/log/syslog 文件的前 15 行内容,并显示文件名的头信息?
    • 如何查看 /home/user/test.txt 文件的前 30 个字符,不显示文件名的头信息?
    • 如何同时查看多个文件(如 file1.txtfile2.txt)的前 5 行内容,并显示文件名的头信息?

二、文档编辑

1. cat - 在终端设备上显示文件内容

  • 功能:显示文件内容,也可用于合并文件。
  • 常用参数
    • -n:显示行号。
    • -b:只对非空行显示行号。
    • -s:压缩连续的空行,只显示一行。
  • 示例
    # 显示文件内容
    cat test.txt
    # 显示文件内容并显示行号
    cat -n test.txt
    # 只对非空行显示行号
    cat -b test.txt
    # 压缩连续的空行
    cat -s test.txt
    # 合并两个文件并输出到新文件
    cat file1.txt file2.txt > new_file.txt
  • 题目
    • 如何显示 /var/log/syslog 文件的内容,并显示行号,同时压缩连续的空行?
    • 如何将 file1.txtfile2.txtfile3.txt 合并为一个文件 merged.txt,并显示合并后文件的行号?
    • 如何只显示文件的前 10 行内容,并显示行号?

2. grep - 强大的文本搜索工具

  • 功能:在文件中搜索匹配指定模式的行。
  • 常用参数
    • -n:显示匹配行的行号。
    • -i:忽略大小写。
    • -r:递归搜索目录及其子目录中的文件。
    • -v:显示不匹配的行。
    • -E:使用扩展正则表达式。
  • 示例
    # 在文件中搜索包含 hello 的行,并显示行号
    grep -n "hello" test.txt
    # 递归搜索目录及其子目录中的文件,查找包含 hello 的行
    grep -r "hello" /home/user/
    # 搜索不包含 hello 的行
    grep -v "hello" test.txt
    # 使用扩展正则表达式搜索包含数字的行
    grep -E "[0-9]" test.txt
  • 题目
    • 如何在 /var/log/syslog 文件中搜索包含 error 的行,并显示行号,忽略大小写?
    • 如何递归搜索 /home/user 目录及其子目录中的文件,查找不包含 password 的行?
    • 如何使用扩展正则表达式搜索 /home/user/test.txt 文件中以字母开头的行?

3. sed - 批量编辑文本文件

  • 功能:流编辑器,用于对文本进行替换、删除、插入等操作。
  • 常用参数
    • -i:直接修改文件内容。
    • s:替换操作,格式为 s/原字符串/新字符串/gg 表示全局替换。
    • d:删除操作。
    • a:在指定行后插入内容。
    • i:在指定行前插入内容。
  • 示例
    # 将文件中的所有 hello 替换为 world,并输出结果
    sed 's/hello/world/g' test.txt
    # 直接修改文件中的所有 hello 替换为 world
    sed -i 's/hello/world/g' test.txt
    # 删除文件中的所有空行
    sed '/^$/d' test.txt
    # 在第 3 行后插入内容
    sed '3a This is a new line.' test.txt
    # 在第 5 行前插入内容
    sed '5i This is a new line before.' test.txt
  • 题目
    • 如何将 /var/log/syslog 文件中的所有 error 替换为 warning,并直接修改文件内容?
    • 如何删除 /home/user/test.txt 文件中以 # 开头的行?
    • 如何在 /home/user/test.txt 文件的第 10 行后插入内容 New content

4. awk - 文本处理工具

  • 功能:用于文本处理和数据提取,支持模式匹配和编程。
  • 常用参数:无
  • 示例
    # 打印文件的第一列
    awk '{print $1}' test.txt
    # 计算文件中第二列的总和
    awk '{sum+=$2} END {print sum}' test.txt
    # 筛选出第二列大于 10 的行
    awk '$2 > 10 {print}' test.txt
    # 按第三列排序并输出
    awk '{print $0}' test.txt | sort -k 3
  • 题目
    • 如何打印 /var/log/syslog 文件的第三列?
    • 如何统计文件中每行的字段数?
    • 如何筛选出 /home/user/test.txt 文件中第一列以 abc 开头的行?

5. vi/vim - 文本编辑器

  • 功能:强大的文本编辑器,用于编辑各种文本文件。
  • 常用操作
    • i:进入插入模式,开始编辑文本。
    • Esc:退出插入模式,进入命令模式。
    • :wq:保存并退出。
    • :q!:不保存并退出。
    • /:在命令模式下,用于搜索文本。
    • :%s/原字符串/新字符串/g:在命令模式下,用于全局替换文本。
  • 示例
    # 编辑文件
    vi test.txt
  • 题目
    • 如何使用 vi 编辑器打开 /home/user/test.txt 文件,并在文件末尾添加一行内容 Hello, World!
    • 如何在 vi 编辑器中查找文件中的 hello 字符串,并将其替换为 world
    • 如何在 vi 编辑器中删除第 5 行到第 10 行的内容?

6. cut - 文本切割工具

  • 功能:使用分隔符、字节、字段和列从平面文件数据库或行中获取所需的字符串。
  • 常用参数
    • -b:按字节位置切割。
    • -c:按字符位置切割。
    • -d:与 -f 配合,指定分隔符来提取字符串。
    • -f:按指定字段提取。
    • -s:仅提取包含分隔符的行。
    • --complement:打印除指定字段外的输出。
    • --output-delimiter:替换输出中的分隔符。
  • 示例
    # 按字节位置提取字符串
    .echo "Hello World" | cut -b 1,2,3,5,8,9
    # 按字符位置提取字符串
    .echo "Hello World" | cut -c 1,2,3,5,6,8,10,11
    # 按字段提取字符串
    .cut -f 3 database.txt
    # 使用分隔符提取字符串
    .cut -d ':' -f 1 /etc/passwd
    # 仅提取包含分隔符的行
    .cut -d ':' -f 1 -s /etc/passwd
    # 打印除指定字段外的输出
    .cut -d ':' --complement -s -f 5 /etc/passwd
    # 替换输出中的分隔符
    .cut -d ':' -f 1,5 --output-delimiter='@' /etc/passwd
  • 题目
    • 如何从 /etc/passwd 文件中提取第二列内容?
    • 如何将 echo "The 1% of the 1%" 的输出按空格分隔,提取第二和第三字段,并替换输出分隔符为逗号?
    • 如何按字节范围提取字符串,如提取前 5 个字节?

7. wc - 统计文件的行数、字数和字节数

  • 功能:计算文件的行数、字数和字节数。
  • 常用参数
    • -l:显示行数。
    • -w:显示字数。
    • -m:显示字符数。
    • -c:显示字节数。
    • -L:显示最长行的长度。
  • 示例
    # 统计文件的行数、字数和字节数
    .wc /home/linuxy/passwd-10
    # 统计文件的行数
    .wc -l /home/linuxy/passwd-10
    # 统计文件的字数
    .wc -w /home/linuxy/passwd-10
    # 统计文件的字符数
    .wc -m /home/linuxy/passwd-10
    # 统计文件的字节数
    .wc -c /home/linuxy/passwd-10
    # 统计文件最长行的长度
    .wc -L /home/linuxy/passwd-10
  • 题目
    • 如何统计 /var/log/syslog 文件的行数?
    • 如何统计 /home/user/test.txt 文件的字数?
    • 如何统计多个文件(如 file1.txtfile2.txt)的总行数?

8. sort - 对文本进行排序

  • 功能:对文本进行排序。
  • 常用参数
    • -n:按数字顺序排序。
    • -r:反向排序。
    • -k:指定排序的字段。
    • -t:指定字段分隔符。
  • 示例
    # 对文件内容进行排序
    .sort test.txt
    # 按数字顺序排序
    .sort -n numbers.txt
    # 反向排序
    .sort -r test.txt
    # 按指定字段排序
    .sort -k 2 data.txt
    # 按指定字段排序,指定字段分隔符为逗号
    .sort -k 2 -t ',' data.csv
  • 题目
    • 如何对 /home/user/numbers.txt 文件中的数字进行排序?
    • 如何对 /var/log/syslog 文件按第二列进行反向排序,字段分隔符为空格?
    • 如何对包含多列数据的文件按第三列进行数字排序,字段分隔符为制表符?

9. tr - 字符转换、删除和压缩工具

  • 功能:用于字符转换,删除和压缩。可将一组字符转换为另一组字符,删除一组字符,或者压缩一组字符。
  • 常用参数
    • -d:删除 SET1 中所有的字符。
    • -s:压缩 SET1 中所有重复的字符。
    • -c:使用 SET1 中未列出的字符替代原始字符。
  • 示例
    # 将小写字母转换为大写字母
    .echo 'hello world' | tr 'a-z' 'A-Z'
    # 删除字符串中的所有数字
    .echo 'hello world123' | tr -d '0-9'
    # 将字符串中的所有空格替换为下划线
    .echo 'hello world' | tr ' ' '_'
    # 压缩字符串中的连续空格
    .echo 'hello   world' | tr -s ' '
    # 使用 SET1 中未列出的字符替代原始字符
    .echo 'hello' | tr -c 'aeiou' 'X'
  • 题目
    • 如何将 /home/user/test.txt 文件中的所有小写字母转换为大写字母?
    • 如何删除 /var/log/syslog 文件中的所有数字和标点符号?
    • 如何将 /home/user/input.txt 文件中的所有空格替换为逗号,并压缩连续的逗号?

10. rev - 反转文本的字符顺序

  • 功能:将指定文件或标准输入的每一行文本的字符顺序反转。
  • 常用参数
    • -V:显示版本信息并退出。
    • -h:显示帮助信息并退出。
  • 示例
    # 从标准输入读取数据并反转
    .rev
    # 从文件读取数据并反转
    .rev filelist.txt
    # 使用 echo 命令将文本传递给 rev 命令
    .echo "Linux is fun" | rev
    # 反转文件内容并保存到新文件
    .rev file.txt > new_file.txt
  • 题目
    • 如何反转 /home/user/test.txt 文件中每一行的字符顺序,并保存到新文件 reversed.txt
    • 如何使用 rev 命令去除文本中的标点符号?
    • 如何提取文件名的后缀?

11. nl - 为文件添加行号

  • 功能:为文件内容添加行号,可对行号进行多种显示设计。
  • 常用参数
    • -b:指定行号指定的方式,-b a 表示不论是否为空行,也同样列出行号;-b t 表示空行不列出行号(默认值)。
    • -n:列出行号表示的方法,-n ln 表示行号在屏幕最左方显示;-n rn 表示行号在自己栏位最右方显示,且不加 0;-n rz 表示行号在自己栏位最右方显示,且加 0。
    • -w:行号栏位占用的位数。
    • -p:在逻辑定界符处不重新开始计算行号。
  • 示例
    # 为文件添加行号
    .nl test.txt
    # 空行也加上行号
    .nl -b a test.txt
    # 让行号前面自动补上 0,统一输出格式
    .nl -b a -n rz test.txt
    # 调整行号位数为 3 位
    .nl -b a -n rz -w 3 test.txt
  • 题目
    • 如何为 /home/user/test.txt 文件添加行号,且空行也显示行号,行号显示在最右方,位数为 3 位?
    • 如何在逻辑定界符处不重新开始计算行号?
    • 如何将行号的显示格式设置为 001002 等?

12. tail - 查看文件尾部内容

  • 功能:查看文件尾部内容,默认显示文件末尾 10 行。
  • 常用参数
    • -c:设置显示文件尾部的字符数。
    • -f:持续显示文件尾部最新内容。
    • -n:设置显示文件尾部的行数。
    • --pid:当指定 PID 进程结束时,自动退出命令。
  • 示例
    # 默认显示指定文件尾部的后 10 行内容
    .tail File.cfg
    # 指定显示指定文件尾部的后 5 行内容
    .tail -n 5 File.cfg
    # 指定显示指定文件尾部的后 30 个字节
    .tail -c 30 File.cfg
    # 持续刷新显示指定文件尾部的后 10 行内容
    .tail -f File.cfg
    # 当指定 PID 进程结束时,自动退出命令
    .tail -f --pid=1234 File.cfg
  • 题目
    • 如何查看 /var/log/syslog 文件的最后 20 行内容?
    • 如何持续监控 /var/log/messages 文件的最新内容,直到 PID 为 5678 的进程结束?
    • 如何查看 /home/user/test.txt 文件的最后 50 个字符?

13. head - 查看文件开头内容

  • 功能:显示文件开头的内容,默认为前 10 行。
  • 常用参数
    • -c:设置显示头部内容的字符数。
    • -n:设置显示行数。
    • -v:显示文件名的头信息。
    • -q:不显示文件名的头信息。
  • 示例
    # 默认显示文件的前 10 行内容
    .head -n 10 File.cfg
    # 显示指定文件的前 5 行内容
    .head -n 5 File.cfg
    # 显示指定文件的前 20 个字符
    .head -c 20 File.cfg
    # 显示文件名的头信息
    .head -v File.cfg
    # 不显示文件名的头信息
    .head -q File.cfg
  • 题目
    • 如何查看 /var/log/syslog 文件的前 15 行内容,并显示文件名的头信息?
    • 如何查看 /home/user/test.txt 文件的前 30 个字符,不显示文件名的头信息?
    • 如何同时查看多个文件(如 file1.txtfile2.txt)的前 5 行内容,并显示文件名的头信息?

三、系统管理

1. ps - 显示进程状态

  • 功能:显示当前系统中正在运行的进程信息。
  • 常用参数
    • -e:显示所有进程。
    • -f:显示完整格式的进程信息。
    • -u:显示指定用户的进程。
    • -p:显示指定 PID 的进程。
    • -aux:显示所有用户的所有进程的详细信息,包括 CPU 和内存使用情况。
    • -o:自定义输出格式。
  • 示例
    # 显示所有进程
    ps -e
    # 显示所有进程的完整信息
    ps -ef
    # 显示指定用户的进程
    ps -u user
    # 显示指定 PID 的进程
    ps -p 1234
    # 显示所有用户的所有进程的详细信息
    ps -aux
    # 自定义输出格式,显示 PID 和命令
    ps -eo pid,cmd
  • 题目
    • 如何显示所有用户的所有进程的完整信息,并按 CPU 使用率排序?
    • 如何显示用户 root 的所有进程,并只显示 PID、用户和命令?
    • 如何显示 PID 为 5678 的进程的详细信息?

2. top - 实时监控系统中进程的资源使用情况

  • 功能:实时显示系统中各个进程的资源使用情况,如 CPU、内存等。
  • 常用参数:无
  • 示例
    # 启动 top 命令
    .top
  • 题目
    • 如何在 top 命令中按 CPU 使用率排序?
    • 如何在 top 命令中查看指定用户的进程?
    • 如何退出 top 命令?

3. kill - 杀死进程

  • 功能:向进程发送信号,终止进程。
  • 常用参数
    • -9:强制终止进程。
    • -1:发送 SIGHUP 信号,通常用于重启或重新加载进程。
    • -2:发送 SIGINT 信号,通常由 Ctrl+C 发送给前台进程。
    • -15:发送 SIGTERM 信号,默认的终止信号,要求进程优雅地退出。
  • 示例
    # 终止指定 PID 的进程
    kill 1234
    # 强制终止指定 PID 的进程
    kill -9 1234
    # 发送 SIGHUP 信号给指定 PID 的进程
    kill -1 1234
    # 发送 SIGINT 信号给指定 PID 的进程
    kill -2 1234
    # 发送 SIGTERM 信号给指定 PID 的进程
    kill -15 1234
  • 题目
    • 如何终止 PID 为 5678 的进程?
    • 如果进程无法正常终止,应该使用什么参数?
    • 如何向进程发送 SIGHUP 信号?

4. useradd - 创建并设置用户信息

  • 功能:创建新用户。
  • 常用参数
    • -m:自动创建用户的主目录。
    • -g:指定用户所属的主组。
    • -G:指定用户所属的附加组。
    • -s:指定用户的登录 Shell。
    • -c:指定用户的注释信息。
  • 示例
    # 创建新用户,并自动创建主目录
    useradd -m new_user
    # 创建新用户,并指定主组和附加组
    useradd -m -g users -G wheel new_user
    # 创建新用户,并指定登录 Shell
    useradd -m -s /bin/bash new_user
    # 创建新用户,并指定注释信息
    useradd -m -c "Test user" new_user
  • 题目
    • 如何创建一个名为 test_user 的用户,并自动创建主目录,指定主组为 users,附加组为 sudo,登录 Shell 为 /bin/zsh
    • 如果忘记使用 -m 参数创建用户,应该如何解决?
    • 如何查看新创建用户的信息?

5. userdel - 删除用户

  • 功能:删除用户。
  • 常用参数
    • -r:同时删除用户的主目录和邮件 spool。
  • 示例
    # 删除用户
    userdel new_user
    # 删除用户,并删除主目录和邮件 spool
    userdel -r new_user
  • 题目
    • 如何删除用户 test_user,并删除其主目录和邮件 spool?
    • 删除用户后,相关的系统文件会有什么变化?
    • 如果用户正在登录,能否直接删除该用户?

6. usermod - 修改用户信息

  • 功能:修改用户的信息,如用户名、主目录、登录 Shell 等。
  • 常用参数
    • -d:修改用户的主目录。
    • -s:修改用户的登录 Shell。
    • -g:修改用户的主组。
    • -G:修改用户的附加组。
    • -l:修改用户名。
  • 示例
    # 修改用户的主目录
    usermod -d /home/new_home new_user
    # 修改用户的登录 Shell
    usermod -s /bin/bash new_user
    # 修改用户的主组
    usermod -g users new_user
    # 修改用户的附加组
    usermod -G sudo new_user
    # 修改用户名
    usermod -l new_username old_username
  • 题目
    • 如何将用户 test_user 的主目录修改为 /home/new_test_user
    • 如何将用户 test_user 的登录 Shell 修改为 /bin/zsh
    • 如何将用户 test_user 的用户名修改为 new_test_user

7. groupadd - 创建用户组

  • 功能:创建新的用户组。
  • 常用参数
    • -g:指定组的 GID。
  • 示例
    # 创建新的用户组
    .groupadd new_group
    # 创建新的用户组,并指定 GID
    .groupadd -g 1001 new_group
  • 题目
    • 如何创建一个名为 test_group 的用户组?
    • 如何创建一个名为 new_group 的用户组,并指定 GID 为 1002?
    • 如何查看新创建用户组的信息?

8. groupdel - 删除用户组

  • 功能:删除用户组。
  • 常用参数:无
  • 示例
    # 删除用户组
    .groupdel new_group
  • 题目
    • 如何删除用户组 test_group
    • 如果用户组中还有用户,能否直接删除该用户组?
    • 删除用户组后,相关的系统文件会有什么变化?

9. chmod - 改变文件或目录权限

  • 功能:修改文件或目录的权限。
  • 常用参数
    • 数字表示法:如 755644 等。
    • 符号表示法:如 u+rg+wo-x 等。
    • -R:递归修改目录及其子目录下的所有文件和目录的权限。
  • 示例
    # 使用数字表示法修改文件权限
    chmod 755 test.txt
    # 使用符号表示法修改文件权限
    chmod u+rwx,g+rx,o+r test.txt
    # 递归修改目录及其子目录下的所有文件和目录的权限
    chmod -R 755 test_dir
  • 题目
    • 如何将 /home/user/test.txt 文件的权限修改为所有者可读、可写、可执行,所属组可读、可执行,其他用户可读?
    • 如何使用符号表示法为 /home/user/test_dir 目录及其子目录下的所有文件和目录的所有者添加写权限?
    • 如何查看文件或目录的当前权限?

10. chown - 改变文件或目录的所有者和所属组

  • 功能:修改文件或目录的所有者和所属组。
  • 常用参数:无
  • 示例
    # 修改文件的所有者和所属组
    chown new_user:new_group test.txt
    # 修改目录及其子目录下的所有文件和目录的所有者和所属组
    chown -R new_user:new_group test_dir
  • 题目
    • 如何将 /home/user/test.txt 文件的所有者修改为 new_user,所属组修改为 new_group
    • 如何递归修改 /home/user/test_dir 目录及其子目录下的所有文件和目录的所有者为 root,所属组为 root
    • 修改文件或目录的所有者和所属组需要什么权限?

四、磁盘管理

1. df - 显示磁盘空间使用量情况

  • 功能:显示文件系统的磁盘使用情况,如已用空间、可用空间、挂载点等。
  • 常用参数
    • -h:以人类可读的格式显示磁盘空间。
    • -T:显示文件系统的类型。
  • 示例
    # 显示所有文件系统的磁盘使用情况
    .df
    # 以人类可读的格式显示所有文件系统的磁盘使用情况
    .df -h
    # 显示所有文件系统的磁盘使用情况,并显示文件系统类型
    .df -hT
  • 题目
    • 如何以人类可读的格式显示 /home 分区的磁盘使用情况,并显示文件系统类型?
    • 如何查看某个文件系统的详细信息?
    • 如何查看所有挂载点的磁盘使用情况?

2. du - 显示目录或文件的磁盘使用量

  • 功能:估算文件或目录的磁盘使用量。
  • 常用参数
    • -h:以人类可读的格式显示磁盘使用量。
    • -s:只显示总计。
    • -c:显示所有文件和目录的总大小。
  • 示例
    # 显示当前目录及其子目录的磁盘使用量
    .du
    # 以人类可读的格式显示当前目录及其子目录的磁盘使用量
    .du -h
    # 只显示当前目录的总计磁盘使用量
    .du -s
    # 显示所有文件和目录的总大小
    .du -hc
  • 题目
    • 如何以人类可读的格式显示 /var/log 目录的磁盘使用量,并显示总大小?
    • 如何查看某个文件的磁盘使用量?
    • 如何只显示 /home/user 目录的总计磁盘使用量?

3. fdisk - 管理磁盘分区

  • 功能:用于创建、删除、修改磁盘分区。
  • 常用参数:无
  • 示例
    # 查看磁盘分区信息
    .fdisk -l
    # 对 /dev/sda 磁盘进行分区操作
    .fdisk /dev/sda
  • 题目
    • 如何查看 /dev/sdb 磁盘的分区信息?
    • 如何在 /dev/sdc 磁盘上创建一个新的分区?
    • 分区操作后,需要做什么才能使分区生效?

4. mkfs - 格式化磁盘分区

  • 功能:对磁盘分区进行格式化,创建文件系统。
  • 常用参数:无
  • 示例
    # 对 /dev/sda1 分区进行 ext4 格式化
    .mkfs.ext4 /dev/sda1
    # 对 /dev/sdb2 分区进行 xfs 格式化
    .mkfs.xfs /dev/sdb2
  • 题目
    • 如何对 /dev/sdb2 分区进行 xfs 格式化?
    • 格式化磁盘分区会有什么后果?
    • 格式化前需要注意什么?

5. mount - 将文件系统挂载到目录

  • 功能:将文件系统挂载到指定的挂载点。
  • 常用参数
    • -t:指定文件系统类型。
    • -o:指定挂载选项,如 ro(只读)、rw(读写)等。
  • 示例
    # 将 /dev/sda1 分区挂载到 /mnt 目录
    .mount /dev/sda1 /mnt
    # 将 /dev/sdb2 分区以只读方式挂载到 /backup 目录
    .mount -t xfs -o ro /dev/sdb2 /backup
  • 题目
    • 如何将 /dev/sdb2 分区挂载到 /backup 目录,并指定文件系统类型为 xfs?
    • 如何将 /dev/sda1 分区以读写方式挂载到 /mnt 目录?
    • 如何查看当前系统的挂载信息?

6. umount - 卸载挂载的文件系统

  • 功能:卸载已挂载的文件系统。
  • 常用参数:无
  • 示例
    # 卸载 /mnt 目录的挂载
    .umount /mnt
    # 卸载 /dev/sda1 分区的挂载
    .umount /dev/sda1
  • 题目
    • 如何卸载 /backup 目录的挂载?
    • 如果文件系统正在被使用,能否直接卸载?
    • 卸载文件系统后,相关的目录会有什么变化?

五、文件传输

1. scp - 安全地复制文件和目录

  • 功能:在本地和远程主机之间安全地复制文件和目录。
  • 常用参数
    • -r:递归复制目录。
    • -P:指定远程主机的 SSH 端口。
  • 示例
    # 从远程主机复制文件到本地
    .scp user@remote:/path/to/file /local/path
    # 从本地复制文件到远程主机
    .scp /local/path user@remote:/path/to/file
    # 递归复制目录
    .scp -r user@remote:/path/to/dir /local/path
    # 指定远程主机的 SSH 端口
    .scp -P 2222 user@remote:/path/to/file /local/path
  • 题目
    • 如何从远程主机 remote_server/home/user 目录复制 test.txt 文件到本地的 /backup 目录,远程主机的 SSH 端口为 2222?
    • 如何将本地的 /home/user/test_dir 目录递归复制到远程主机 remote_server/backup 目录?
    • 复制文件或目录时,需要注意什么?

2. rsync - 远程数据同步工具

  • 功能:用于在本地和远程主机之间同步文件和目录,支持增量同步。
  • 常用参数
    • -r:递归同步目录。
    • -a:归档模式,保留文件的所有属性。
    • -v:显示详细的同步信息。
    • -z:压缩传输数据。
  • 示例
    # 从远程主机同步文件到本地
    .rsync -av user@remote:/path/to/dir /local/path
    # 从本地同步文件到远程主机
    .rsync -av /local/path user@remote:/path/to/dir
    # 递归同步目录并压缩传输数据
    .rsync -avz user@remote:/path/to/dir /local/path
  • 题目
    • 如何从远程主机 remote_server/home/user 目录同步 test_dir 目录到本地的 /backup 目录,并显示详细的同步信息,压缩传输数据?
    • 如何将本地的 /home/user/test_dir 目录同步到远程主机 remote_server/backup 目录,只同步修改过的文件?
    • rsyncscp 有什么区别?

3. ftp - 文件传输协议客户端

  • 功能:用于通过 FTP 协议进行文件传输。
  • 常用参数:无
  • 示例
    # 连接到 FTP 服务器
    .ftp ftp.example.com
    # 登录 FTP 服务器
    .user username password
    # 下载文件
    .get file.txt
    # 上传文件
    .put file.txt
    # 退出 FTP 客户端
    .quit
  • 题目
    • 如何连接到 FTP 服务器 ftp.example.com,并下载 test.txt 文件?
    • 如何上传本地的 new_file.txt 文件到 FTP 服务器?
    • FTP 协议有什么优缺点?

六、网络通讯

1. ping - 测试主机间网络连通性

  • 功能:测试与目标主机的网络连通性。
  • 常用参数
    • -c:指定发送的数据包数量。
    • -i:指定发送数据包的时间间隔。
    • -w:指定等待响应的超时时间。
    • -s:指定数据包的大小。
  • 示例
    # 测试与目标主机的连通性,发送 5 个数据包
    .ping -c 5 8.8.8.8
    # 测试与目标主机的连通性,发送数据包的时间间隔为 2 秒
    .ping -i 2 8.8.8.8
    # 测试与目标主机的连通性,等待响应的超时时间为 10 秒
    .ping -w 10 8.8.8.8
    # 测试与目标主机的连通性,指定数据包大小为 1000 字节
    .ping -s 1000 8.8.8.8
  • 题目
    • 如何测试与 www.google.com 的网络连通性,发送 10 个数据包,时间间隔为 1 秒,数据包大小为 500 字节?
    • 如果 ping 命令没有响应,可能是什么原因?
    • 如何查看 ping 命令的详细统计信息?

2. traceroute - 跟踪数据包到达目标主机的路径

  • 功能:跟踪数据包从本地主机到目标主机所经过的路由。
  • 常用参数
    • -n:以数字形式显示 IP 地址,不进行域名解析。
    • -m:指定最大跳数。
  • 示例
    # 跟踪到目标主机的路由
    .traceroute 8.8.8.8
    # 以数字形式显示 IP 地址,跟踪到目标主机的路由
    .traceroute -n 8.8.8.8
    # 指定最大跳数为 20,跟踪到目标主机的路由
    .traceroute -m 20 8.8.8.8
  • 题目
    • 如何跟踪到 www.baidu.com 的路由,并以数字形式显示 IP 地址?
    • traceroute 命令的输出结果表示什么?
    • 如果 traceroute 命令在某个节点停止,可能是什么原因?

3. nslookup - 查询 DNS 记录

  • 功能:查询域名对应的 IP 地址或反向查询 IP 地址对应的域名。
  • 常用参数:无
  • 示例
    # 查询域名对应的 IP 地址
    .nslookup www.google.com
    # 反向查询 IP 地址对应的域名
    .nslookup 8.8.8.8
  • 题目
    • 如何查询 www.github.com 的 IP 地址?
    • 如何反向查询 192.168.1.1 的域名?
    • 如果 nslookup 命令没有返回结果,可能是什么原因?

4. dig - 查询 DNS 信息

  • 功能:更强大的 DNS 查询工具,可查询各种 DNS 记录。
  • 常用参数
    • -t:指定查询的记录类型,如 AMXNS 等。
  • 示例
    # 查询域名的 A 记录
    .dig www.google.com A
    # 查询域名的 MX 记录
    .dig www.google.com MX
  • 题目
    • 如何查询 www.baidu.com 的 A 记录?
    • 如何查询 example.com 的 MX 记录?
    • dig 命令与 nslookup 命令有什么区别?

5. ssh - 安全的远程连接服务

  • 功能:通过 SSH 协议安全地远程连接到其他主机。
  • 常用参数
    • -p:指定远程主机的 SSH 端口。
    • -i:指定私钥文件。
  • 示例
    # 连接到远程主机
    .ssh user@remote
    # 连接到远程主机,并指定端口
    .ssh -p 2222 user@remote
    # 连接到远程主机,并指定私钥文件
    .ssh -i /path/to/private_key user@remote
  • 题目
    • 如何连接到远程主机 remote_server,使用用户 test_user 登录,远程主机的 SSH 端口为 2222?
    • 如何使用私钥文件连接到远程主机 remote_server
    • 如何在 SSH 连接中执行远程命令?

6. netstat - 显示网络状态

  • 功能:显示网络连接、路由表、接口状态等信息。
  • 常用参数
    • -a:显示所有连接和监听端口。
    • -t:只显示 TCP 连接。
    • -u:只显示 UDP 连接。
    • -n:以数字形式显示地址和端口。
    • -p:显示建立相关链接的程序名。
  • 示例
    # 显示所有网络连接和监听端口
    .netstat -a
    # 只显示 TCP 连接
    .netstat -t
    # 只显示 UDP 连接
    .netstat -u
    # 以数字形式显示地址和端口
    .netstat -n
    # 显示建立相关链接的程序名
    .netstat -p
  • 题目
    • 如何显示所有 TCP 连接的详细信息,包括建立链接的程序名?
    • 如何查看监听端口的信息,并以数字形式显示地址和端口?
    • netstat 命令的输出结果中,各个字段表示什么含义?

7. ifconfig - 显示或设置网络设备参数信息

  • 功能:显示或设置网络接口的配置信息。
  • 常用参数:无
  • 示例
    # 显示所有网络接口的配置信息
    .ifconfig
    # 显示指定网络接口的配置信息
    .ifconfig eth0
    # 设置网络接口的 IP 地址
    .ifconfig eth0 192.168.1.100 netmask 255.255.255.0
  • 题目
    • 如何显示 eth1 网络接口的配置信息?
    • 如何设置 eth0 网络接口的 IP 地址为 192.168.1.200,子网掩码为 255.255.255.0
    • ifconfig 命令已逐渐被 ip 命令取代,ip 命令有什么优势?

8. ip - 管理网络接口、路由、设备和隧道

  • 功能:更强大的网络管理命令,可替代 ifconfig 等命令。
  • 常用参数:无
  • 示例
    # 显示网络接口的 IP 地址和状态
    .ip addr show
    # 设置网络接口的 IP 地址
    .ip addr add 192.168.1.100/24 dev eth0
    # 删除网络接口的 IP 地址
    .ip addr del 192.168.1.100/24 dev eth0
    # 显示路由表
    .ip route show
    # 添加路由
    .ip route add 192.168.2.0/24 via 192.168.1.1
  • 题目
    • 如何显示 eth1 网络接口的详细信息?
    • 如何设置 eth0 网络接口的 IP 地址为 192.168.1.200,子网掩码为 255.255.255.0
    • 如何添加一条默认路由,网关为 192.168.1.1

七、备份压缩

1. tar - 压缩和解压缩文件

  • 功能:用于打包和压缩文件或目录。
  • 常用参数
    • -c:创建新的归档文件。
    • -x:从归档文件中提取文件。
    • -v:显示详细的操作信息。
    • -f:指定归档文件的名称。
    • -z:使用 gzip 压缩。
    • -j:使用 bzip2 压缩。
    • -C:指定解压的目标目录。
  • 示例
    # 创建一个 gzip 压缩的归档文件
    .tar -zcvf archive.tar.gz file1 file2 dir1
    # 解压 gzip 压缩的归档文件到指定目录
    .tar -zxvf archive.tar.gz -C /backup
    # 创建一个 bzip2 压缩的归档文件
    .tar -jcvf archive.tar.bz2 file1 file2 dir1
    # 解压 bzip2 压缩的归档文件
    .tar -jxvf archive.tar.bz2
  • 题目
    • 如何将 /home/user 目录下的所有 .txt 文件打包并压缩为 backup.tar.gz 文件?
    • 如何解压 backup.tar.bz2 文件到 /backup 目录?
    • tar 命令的不同压缩选项有什么区别?

2. zip - 压缩文件

  • 功能:用于压缩文件或目录。
  • 常用参数
    • -r:递归压缩目录及其子目录。
    • -e:添加密码保护。
  • 示例
    # 压缩文件
    .zip archive.zip file1 file2
    # 递归压缩目录
    .zip -r archive.zip dir1
    # 压缩文件并添加密码保护
    .zip -e archive.zip file1
  • 题目
    • 如何将 /home/user 目录下的 test_dir 目录压缩为 test.zip 文件,并添加密码保护?
    • 如何在压缩文件时排除某些文件?
    • ziptar 有什么区别?

3. unzip - 解压缩 zip 格式文件

  • 功能:用于解压 zip 格式的压缩文件。
  • 常用参数
    • -d:指定解压的目标目录。
    • -l:列出 .zip 文件中的内容,但不解压。
    • -v:显示详细信息,包括 .zip 文件的结构和压缩率等信息。
    • -t:测试 .zip 文件的完整性,但不解压。
    • -n:解压时不覆盖已存在的文件。
    • -o:解压时覆盖已存在的文件,而不提示。
    • -x:解压时排除指定的文件或目录。
    • -j:解压时不保留目录结构,将所有文件解压到当前目录中。
  • 示例
    # 解压缩 .zip 文件
    unzip archive.zip
    # 解压到指定目录
    unzip archive.zip -d /path/to/directory
    # 列出 .zip 文件的内容
    unzip -l archive.zip
    # 测试 .zip 文件的完整性
    unzip -t archive.zip
    # 解压时排除特定文件
    unzip archive.zip -x "*.log"
    # 解压时不覆盖已存在的文件
    unzip -n archive.zip
    # 解压缩文件并覆盖已存在的文件
    unzip -o archive.zip
    # 解压缩时不保留目录结构
    unzip -j archive.zip
  • 题目
    • 如何将 test.zip 文件解压到 /home/user/extract 目录?
    • 如果解压时遇到同名文件,应该如何处理?
    • 如何查看 zip 文件的内容而不解压?

4. xz - 高压缩率的压缩和解压缩工具

  • 功能:使用 LZMA2 压缩算法,对文件进行高压缩率的压缩和解压缩。
  • 常用参数
    • -z, --compress:强制压缩。
    • -d, --decompress, --uncompress:强制解压缩。
    • -t, --test:测试压缩文件的完整性。
    • -l, --list:列出有关 .xz 文件的信息。
    • -k, --keep:保留输入文件。
    • -f, --force:强制覆盖输出文件和(解)压缩链接。
    • -c, --stdout, --to-stdout:写入标准输出,不删除输入文件。
    • -0-9:压缩预设,默认为 6,使用 7 - 9 前需考虑压缩和解压缩内存使用量。
    • -e, --extreme:尝试通过使用更多的 CPU 时间来提高压缩比。
    • -T, --threads=NUM:最多使用 NUM 个线程,默认值为 1,设置为 0 则使用与处理器内核一样多的线程。
  • 示例
    # 压缩文件
    xz 20221119test2.txt
    # 解压文件并保留原文件
    xz -dk 20221119test2.txt.xz
    # 显示 .xz 文件的基本信息
    xz -l 20221119test2.txt.xz
  • 题目
    • 如何将 /home/user/test.txt 文件压缩为 test.txt.xz,并保留原文件,使用多线程压缩?
    • 如何测试 test.txt.xz 文件的完整性?
    • 如何以最高压缩比压缩 /home/user/data.txt 文件?

5. gzip - 压缩文件

  • 功能:使用 DEFLATE 压缩算法减小文件大小,主要用于压缩文本文件、Tar 归档文件和网页。
  • 常用参数
    • -d:解压缩文件。
    • -f:强制压缩文件,即使已经存在同名的压缩文件。
    • -k:压缩文件并保留原始文件。
    • -r:递归地压缩目录中的所有文件。
    • -v:显示正在处理的文件的名称和压缩比。
    • -1:最快的压缩速度,最小的压缩比。
    • -9:最慢的压缩速度,最大的压缩比。
  • 示例
    # 压缩单个文件
    .gzip filename
    # 保留原始文件
    .gzip -k filename
    # 压缩多个文件
    .gzip file1 file2 file3
    # 改变压缩级别
    .gzip -9 filename
    # 解压缩文件
    .gzip -d filename.gz
    # 递归压缩目录
    .gzip -r directoryname
  • 题目
    • 如何将 /home/user 目录下的所有 .txt 文件压缩为 .gz 文件,并保留原始文件,以最快速度压缩?
    • 如何解压缩 /backup/test.txt.gz 文件,并显示详细的解压缩信息?
    • 如何递归压缩 /home/user/backup 目录下的所有文件,并显示压缩进度?

6. gunzip - 解压文件

  • 功能:解开被 gzip 压缩过的文件。
  • 常用参数
    • -c:将解压缩后的文件内容输出到标准输出(而不是写入文件)。
    • -d:解压缩文件(默认行为,可省略)。
    • -f:强制解压缩,即使已存在同名的解压缩文件。
    • -k:保留原始的压缩文件。
    • -l:显示压缩文件的详细信息,包括压缩前后的文件大小、压缩比等。
    • -n:不覆盖已存在的解压缩文件。
    • -q:静默模式,不显示解压缩进度和错误信息。
    • -r:递归地解压缩指定目录下的所有文件。
    • -t:测试压缩文件的完整性,而不进行实际的解压缩操作。
    • -v:显示详细的解压缩信息,包括解压缩的文件名、压缩比等。
  • 示例
    # 解压缩文件
    .gunzip example.txt.gz
    # 解压缩文件并保留原始文件
    .gunzip -k example.txt.gz
    # 解压缩文件并将内容输出到标准输出
    .gunzip -c example.txt.gz
    # 递归地解压缩目录下的所有文件
    .gunzip -r directory
  • 题目
    • 如何解压缩 /backup/test.txt.gz 文件,并将解压缩后的内容输出到标准输出,保留原始压缩文件?
    • 如何测试 test.txt.gz 文件的完整性,并显示详细信息?
    • 如何递归地解压缩 /home/user/backup 目录下的所有 .gz 文件,不覆盖已存在的解压缩文件?

八、其他命令

1. echo - 输出字符串或提取后的变量值

  • 功能:输出字符串或变量的值。
  • 常用参数
    • -n:不输出换行符。
    • -e:启用反斜杠转义功能。
  • 示例
    # 输出字符串
    .echo "Hello, World!"
    # 输出变量的值
    .name="John"
    .echo $name
    # 不输出换行符
    .echo -n "No newline."
    # 启用反斜杠转义功能
    .echo -e "Hello\tWorld!"
  • 题目
    • 如何输出当前日期和时间,不输出换行符?
    • 如何将输出结果重定向到文件,并启用反斜杠转义功能?
    • 如何在输出中使用变量和字符串的组合,并输出换行符?

2. history - 显示与管理历史命令记录

  • 功能:显示历史命令记录。
  • 常用参数
    • -c:清除历史命令记录。
    • -n:显示最近的 n 条历史命令记录。
  • 示例
    # 显示历史命令记录
    .history
    # 清除历史命令记录
    .history -c
    # 显示最近的 10 条历史命令记录
    .history -n 10
  • 题目
    • 如何查看最近 10 条历史命令记录?
    • 如何清除历史命令记录?
    • 如何重复执行上一条命令?

3. alias - 创建命令别名

  • 功能:创建命令的别名,方便使用。
  • 常用参数:无
  • 示例
    # 创建别名
    .alias ll='ls -l'
    # 使用别名
    .ll
  • 题目
    • 如何创建一个名为 rmf 的别名,其实际命令为 rm -rf
    • 如何查看已创建的别名?
    • 如何删除已创建的别名?

4. export - 设置环境变量

  • 功能:设置环境变量。
  • 常用参数:无
  • 示例
    # 设置环境变量
    .export PATH=$PATH:/home/user/bin
    # 查看环境变量的值
    .echo $PATH
  • 题目
    • 如何设置一个名为 MY_VAR 的环境变量,其值为 hello
    • 如何使环境变量在所有会话中都生效?
    • 如何查看所有环境变量的值?

5. source - 执行脚本并在当前 shell 中生效

  • 功能:执行脚本文件,并使脚本中的变量和函数在当前 shell 中生效。
  • 常用参数:无
  • 示例
    # 执行脚本文件
    .source script.sh
  • 题目
    • 如何执行 /home/user/test.sh 脚本文件,并使其中的变量在当前 shell 中生效?
    • source 命令与直接执行脚本有什么区别?
    • 如果脚本文件有错误,source 命令会有什么反应?

14. test - 条件测试命令

  • 功能:用于测试文件类型、比较数值、字符串等条件。
  • 常用参数
    • 文件测试:-e(文件是否存在)、-f(是否为普通文件)、-d(是否为目录)、-r(是否可读)、-w(是否可写)、-x(是否可执行)等。
    • 数值比较:-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)等。
    • 字符串比较:=(相等)、!=(不相等)、-z(字符串是否为空)、-n(字符串是否不为空)等。
  • 示例
    # 测试文件是否存在
    .if test -e test.txt; then echo "File exists"; fi
    # 比较数值
    .if test 5 -gt 3; then echo "5 is greater than 3"; fi
    # 比较字符串
    .if test "hello" = "hello"; then echo "Strings are equal"; fi
    # 测试文件是否可读
    .if test -r test.txt; then echo "File is readable"; fi
  • 题目
    • 如何测试 /home/user/test.txt 文件是否存在且可写?
    • 如何比较两个数值(如 10 和 20)的大小,并输出比较结果?
    • 如何判断两个字符串(如 “abc” 和 “def”)是否相等,并根据结果执行不同的操作?

15. ss - 查看套接字统计信息

  • 功能:查看套接字统计信息,可替代 netstat 命令。
  • 常用参数
    • -t:只显示 TCP 套接字。
    • -u:只显示 UDP 套接字。
    • -l:只显示监听套接字。
    • -n:以数字形式显示地址和端口。
    • -p:显示使用套接字的进程信息。
  • 示例
    # 显示所有 TCP 监听套接字
    .ss -tl
    # 显示所有 UDP 套接字
    .ss -u
    # 以数字形式显示地址和端口,显示使用套接字的进程信息
    .ss -tnp
  • 题目
    • 如何查看所有 TCP 连接的详细信息,包括使用套接字的进程信息?
    • 如何查看监听 UDP 端口的信息,并以数字形式显示地址和端口?
    • ss 命令与 netstat 命令有什么区别?

16. ethtool - 查看和修改网络接口的硬件设置

  • 功能:查看和修改网络接口的硬件设置,如速度、双工模式等。
  • 常用参数:无
  • 示例
    `bash

    查看网络接口的设置

    .ethtool eth0

    修改网络接口的速度

    .ethtool -s eth0 speed 1
作者:严锋  创建时间:2023-11-07 12:14
最后编辑:严锋  更新时间:2025-04-27 18:22