Linux期末复习二

110 阅读7分钟

shell命令

写出5个显示文本文件的内容的命令,简要说明其功能

  • cat(查看完整文件):将整个文本文件内容一次性输出到终端。适用于查看较小的文件。
  • more(分页查看,仅向下翻页):分页显示文本文件内容,按空格键向下翻页,适用于查看较大的文件。
  • less(分页查看,可上下翻页):分页显示文件内容,支持上下翻页和搜索,比 more更强大。
  • head(查看文件开头部分):默认显示文件的前 10 行。可以通过 -n选项指定行数。
  • tail(查看文件末尾部分):默认显示文件的最后 10 行。也可用 -n指定行数,常用于实时查看日志(如 tail -f)。

写出5个目录操作的命令,简要说明其功能

  • mkdir 目录名:创建一个新的目录。可以使用-p选项创建多级目录。
  • rmdir 目录名:删除空目录。如果目录不为空,会报错。
  • pwd:pwd命令不带任何选项或参数,Linux系统用 pwd 命令来查看“当前工作目录”的完整路径。
  • cd 目录名:切换当前工作目录。常用来进入指定目录或返回上级/根目录。
  • ls 目录名:列出目录中的文件和子目录。常配合 -l(详细信息)或 -a(显示隐藏文件)等选项使用。

如果umask设置为022, 那么文件权限和目录的权限分别是什么

文件权限:644(所有者可读写,其他人只读)

目录权限:755(所有者可完全访问,其他人可读和进入)

解析:

  1. 文件权限(默认是666)
  • 文件默认权限:rw-rw-rw-(八进制666)。
  • umask 022:移除群组和其他用户的写权限(w),所以移除两个“w”。
  • 计算:666 - 022 = 644。
  • 结果:rw-r--r--(所有者可读写,群组和其他人只读)。
  1. 目录权限(默认是777)
  • 目录默认权限:rwxrwxrwx(八进制777)。
  • umask 022:同样移除群组和其他用户的写权限(w),但目录的“执行权限”(x)允许进入目录,所以保留执行权限。
  • 计算:777 - 022 = 755。
  • 结果:rwxr-xr-x(所有者可完全访问,群组和其他人可读和进入)。

shell命令的重定向符号有哪些,分别有什么含义

  • 输出重定向(标准输出):
    • 将标准输出重定向到文件(覆盖原内容)    

    • 将标准输出追加到文件末尾    

  • 输出重定向(标准输出):
    • < 从文件中读取输入作为命令的标准输入    
  • 错误输出重定向(标准错误):
    • 2> 将标准错误重定向到文件(覆盖)    
    • 2>> 将标准错误追加到文件    
  • 同时重定向标准输出和错误输出:
    • &>或 > file 2>&1 将标准输出和错误输出都重定向到同一个文件中(覆盖)    
    • file 2>&1 将标准输出和错误输出都追加到同一个文件 

  • 其他特殊重定向:
    • << “Here Document”,从脚本中输入多行文本到命令    
    • <<<  “Here String”,将字符串作为标准输入

文件的时间有哪三种?怎样显示?怎样修改?

  • 文件的时间

    • atime  最近一次读取文件的时间(如用cat查看文件)    
    • mtime  最近一次修改文件内容的时间(不包括权限/属性的修改)    
    • ctime  最近一次改变文件元数据的时间(如权限、所有者变化等)
  • 显示

    • 使用 ls命令
      • ls -l filename      # 显示 mtime(默认)
      • ls -lu filename     # 显示 atime
      • ls -lc filename     # 显示 ctime
    • 使用 stat命令(信息最全)
      • stat filename
  • 修改(使用 touch命令)

    • 更新 atime和 mtime为当前时间:touch filename
    • 指定时间修改:touch -t 202505231200 filename   # 修改为 2025年5月23日 12:00
    • 单独修改 atime或 mtime:
      • touch -a filename     # 仅修改 atime
      • touch -m filename     # 仅修改 mtime
    • ctime无法直接修改,只能通过改变文件属性(如 chmod、chown)间接更新。

用数字形式来为文件file设置权限,要求所有者可读、可写、可执行;其他用户和同组用户只有读和执行的权限。写出权限的数字表示

解析

  • 所有者(Owner) :可读(r)、可写(w)、可执行(x) → rwx
  • 同组用户(Group) :只读(r)和可执行(x) → r-x
  • 其他用户(Others) :只读(r)和可执行(x) → r-x

计算

  1. 所有者rwx = 4(读) + 2(写) + 1(执行) = 7
  2. 同组用户r-x = 4(读) + 0(无写) + 1(执行) = 5
  3. 其他用户r-x = 4(读) + 0(无写) + 1(执行) = 5

答案: chmod 755 file

ls -l  或ll 显示的文件的类型有哪些,简要说明其含义

  • -普通文件    一般的文本文件、二进制文件、脚本、程序等    
  • d   目录    文件夹,包含其他文件或目录    
  • l   符号链接    类似 Windows 的快捷方式,指向另一个文件或目录    
  • b   块设备文件    提供以块为单位访问的设备,如硬盘、光驱    
  • c   字符设备文件    提供按字符访问的设备,如键盘、串口    
  • p   管道文件    一种进程间通信的方式(FIFO),可用 mkfifo创建    
  • s   套接字文件    用于进程间网络通信,常见于服务程序(如 /run/docker.sock)

cp命令

用cp命令将/etc目录及其下所有内容复制到test目录下 cp -r /etc test/

  • -r:递归复制(必需)

统计文件的字节数、行数、字数

wc默认输出行数、字数、字节数

  • -l:仅行数(如wc -l file
  • -c:仅字节数
  • -w:仅字数(以空格分隔的单词)

修改文件名称

重命名:mv

将test目录改名为test2:mv test test2

find命令

  1. find 查找/root下3分钟内访问过的*.txt文件,并将其拷贝到/tmp目录下

find /root -name "*.txt" -amin -3 -exec cp -a -t /tmp {} +

  • 时间参数区别:
    • -amin:访问时间(access time,本题要求)
    • -mmin:修改时间(modify time)
    • -cmin:状态变更时间(change time)
  • cp -a 作用:相当于 -pdr(保留属性+递归复制)
  • -t /tmp:明确指定目标目录为/tmp
  • {} +:批量传递文件给cp
  1. 使用find 查找当前目录下 文件名 .sh或.c的文件 并且 三天内访问过

find . ( -name ".sh" -o -name ".c" ) -atime -3

find .从当前目录开始搜索
\( \)正确转义分组符 (确保-o逻辑作用域)
-name "*.sh"匹配.sh后缀文件
-o逻辑或(OR) (非-a表示AND)
-name "*.c"匹配.c后缀文件
-atime -33天内访问过
-atime 3恰好3天前访问
-atime +3超过3天前访问
  1. 使用find 查找当前目录下 文件名 *.c的文件,三天内访问过,长度小于4k 权限是644 打印其文件名

find . -name "*.c" -atime -3 -size -4k -perm 644 -print

-size -4k文件小于4KB(4096字节),注意-表示小于
-perm 644权限精确匹配rw-r--r--(644=用户读写/组读/其他读)
-print显式打印文件名

grep命令

  1. grep 从student.txt 中查找 只有英文字母组成的行,行内没有其他字符

grep -P '^[A-Za-z]+$' student.txt

grep -P启用 Perl 兼容正则(PCRE) 支持高级语法
^匹配行首 确保开头无其他字符
[A-Za-z]匹配任意大小写英文字母,覆盖 a-z 和 A-Z
+表示1个或多个字母
 $ 匹配行尾 确保结尾无其他字符
  1. grep 从student.txt 中查找 没有a的行。

grep -v -i  'a' student.txt

  • -v 反向选择 显示不匹配模式的行
  • -i 不区分大小写
  1. grep 从student.txt 中查找 有小于60分的行。提示 分数可能是三位100,2位和1位

grep  -P '\b[0-5]?[0-9]\b' student.txt

  1. grep 从student.txt 中查找 没有不及格的行

grep -v  -P '\b[0-5]?[0-9]\b' student.txt