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(所有者可完全访问,其他人可读和进入)
解析:
- 文件权限(默认是666) :
- 文件默认权限:
rw-rw-rw-(八进制666)。 - umask 022:移除群组和其他用户的写权限(w),所以移除两个“w”。
- 计算:666 - 022 = 644。
- 结果:
rw-r--r--(所有者可读写,群组和其他人只读)。
- 目录权限(默认是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
- 使用 ls命令
-
修改(使用 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
计算
- 所有者:
rwx= 4(读) + 2(写) + 1(执行) = 7 - 同组用户:
r-x= 4(读) + 0(无写) + 1(执行) = 5 - 其他用户:
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命令
- 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
- 使用find 查找当前目录下 文件名 .sh或.c的文件 并且 三天内访问过
find . ( -name ".sh" -o -name ".c" ) -atime -3
find . | 从当前目录开始搜索 |
|---|---|
\( \) | 正确转义分组符 (确保-o逻辑作用域) |
-name "*.sh" | 匹配.sh后缀文件 |
-o | 逻辑或(OR) (非-a表示AND) |
-name "*.c" | 匹配.c后缀文件 |
-atime -3 | 3天内访问过 |
|---|---|
-atime 3 | 恰好3天前访问 |
-atime +3 | 超过3天前访问 |
- 使用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命令
- grep 从student.txt 中查找 只有英文字母组成的行,行内没有其他字符
grep -P '^[A-Za-z]+$' student.txt
grep -P | 启用 Perl 兼容正则(PCRE) 支持高级语法 |
|---|---|
^ | 匹配行首 确保开头无其他字符 |
[A-Za-z] | 匹配任意大小写英文字母,覆盖 a-z 和 A-Z |
+ | 表示1个或多个字母 |
$ | 匹配行尾 确保结尾无其他字符 |
- grep 从student.txt 中查找 没有a的行。
grep -v -i 'a' student.txt
-v反向选择 显示不匹配模式的行-i不区分大小写
- grep 从student.txt 中查找 有小于60分的行。提示 分数可能是三位100,2位和1位
grep -P '\b[0-5]?[0-9]\b' student.txt
- grep 从student.txt 中查找 没有不及格的行
grep -v -P '\b[0-5]?[0-9]\b' student.txt