Linux文件与目录管理
Linux文件与目录管理关于路径相对路径与绝对路径Linux文件路径的变量:$PATH文件与目录管理文件与目录查看:ls目录的相关操作:cd、pwd、mkdir、rmdir复制、删除、移动与创建:cp、rm、mv、touch获取路径的文件名与目录名称:basename、dirname文件内容查看直接查看:cat、tac、nl翻页查看:more、less数据截取:head、tail非纯文本文件:od
关于路径
相对路径与绝对路径
- 绝对路径:绝对路径是从根目录(/)开始指定文件或目录的路径。
- 相对路径:相对路径则是相对于当前工作目录来指定文件或目录的路径。
Linux文件路径的变量:$PATH
在Linux系统中,$PATH
是一个重要的环境变量,用来指定系统在哪些目录中查找可执行文件
当用户在终端中输入一个命令时,系统会在列出的路径中逐一查找是否有与该命令同名的可执行文件,如果找到则执行该可执行文件
可以通过在终端中输入 echo $PATH
命令来查看当前配置的 $PATH
环境变量的值
[root@chenshiren ~]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
$PATH
环境变量中的路径是用冒号:
分隔的,每个路径代表一个存储可执行程序的目录- 当用户输入一个命令时,系统会按照
$PATH
中列出的顺序逐个查找对应的可执行文件,直到找到为止。 - 用户可以通过修改
$PATH
环境变量来添加新的目录,以便系统能够搜索更多的可执行文件
文件与目录管理
文件与目录查看
ls:命令用于查看文件和目录列表
ls [选项] [文件]
选项 | 作用 |
---|---|
-a | 列出所有文件,包括以. 开头的隐藏文件 |
-A | 类似于-a ,但不包括. 和.. |
-d | 显示目录自身的信息,而不是显示目录中的内容 |
-f | 直接列出结果,而不进行排序(ls默认会以文件名排序) |
-F | 在文件名后面加上一个斜杠/ ,表示该文件是一个目录;加上 * 表示可执行文件;加上 = 代表socket文件加上 | 代表FIFO文件 |
-h | 以人类可读的格式显示文件大小 |
-i | 显示文件的 inode 号码,即唯一标识文件系统上文件或目录的索引节点号 |
-l | 使用长格式显示,包括文件类型、权限、链接数、所有者、组、大小、修改日期 |
-n | 类似于-l ,但以数字形式显示用户名和组 |
-r | 以相反的顺序显示文件和目录 |
-R | 递归地列出所有子目录及其内容 |
-S | 按文件大小排序 |
-t | 按照修改时间排序,最新修改的文件会显示在前面 |
–time | 查看文件修改时间:atime访问时间、ctime状态时间(权限、重命名、改大小)、 ls -l 默认查看的是mtime修改时间 |
# 将家目录下所有文件列出来(含属性和隐藏文件)
[root@kylin-csq-v10-sp3 ~]# ls -al ~
总用量 48
drwx------ 5 root root 256 9月 7 17:02 .
dr-xr-xr-x. 19 root root 265 9月 7 10:59 ..
-rwxr-xr-x 1 root root 0 9月 7 15:41 a
-rw-r--r-- 1 root root 0 9月 7 17:02 abc
-rw------- 1 root root 2671 9月 7 15:37 anaconda-ks.cfg
drwx------ 3 root root 17 9月 5 16:02 .ansible
-rw------- 1 root root 335 9月 6 21:22 .bash_history
-rw-r--r-- 1 root root 18 3月 13 2020 .bash_logout
-rw-r--r-- 1 root root 176 3月 13 2020 .bash_profile
-rw-r--r-- 1 root root 176 3月 13 2020 .bashrc
-rw-r--r-- 1 root root 100 3月 13 2020 .cshrc
drwxr-xr-x 2 root root 6 9月 6 11:33 csq
drwx------ 3 root root 108 9月 7 15:18 .gnupg
-rw-r--r-- 1 root root 3050 8月 31 15:30 initial-setup-ks.cfg
-rw------- 1 root root 20 9月 7 15:19 .lesshst
-rw-r--r-- 1 root root 129 3月 13 2020 .tcshrc
-rw------- 1 root root 9817 9月 7 15:49 .viminfo
# 查看指定目录的属性[root@kylin-csq-v10-sp3 ~]# ls -dl /etc/
drwxr-xr-x 117 root root 8192 9月 7 16:28 /etc/
[root@chenshiren ~]# ls -alF --color=never ~
总用量 48
dr-xr-x---. 7 root root 4096 2月 26 21:15 ./
dr-xr-xr-x. 18 root root 235 2月 24 15:56 ../
-rwx------. 1 root root 1437 2月 24 16:00 anaconda-ks.cfg*
-rw-------. 1 root root 2837 2月 26 17:15 .bash_history
-rw-r--r--. 1 root root 18 8月 11 2021 .bash_logout
-rw-r--r--. 1 root root 141 8月 11 2021 .bash_profile
-rw-r--r--. 1 root root 429 8月 11 2021 .bashrc
drwx------. 7 root root 103 2月 24 16:07 .cache/
drwx------. 10 root root 4096 2月 26 15:01 .config/
-rw-r--r--. 1 root root 100 8月 11 2021 .cshrc
drwxr-xr-x. 2 zhw root 21 2月 25 20:19 csq/
-rw-------. 1 root root 20 2月 26 21:15 .lesshst
drwx------. 3 root root 19 2月 24 16:07 .local/
drwx------. 2 root root 6 2月 24 15:57 .ssh/
-rw-r--r--. 1 root root 129 8月 11 2021 .tcshrc
-rw-------. 1 root root 6257 2月 26 14:59 .viminfo
# 将家目录下所有文件列出来(含属性和隐藏文件) 显示完整的文件修改时间
[root@chenshiren ~]# ls -al --full-time ~
总用量 48
dr-xr-x---. 7 root root 4096 2024-02-26 21:15:35.621167119 +0800 .
dr-xr-xr-x. 18 root root 235 2024-02-24 15:56:21.809820460 +0800 ..
-rwx------. 1 root root 1437 2024-02-24 16:00:58.813336337 +0800 anaconda-ks.cfg
-rw-------. 1 root root 2837 2024-02-26 17:15:31.653745941 +0800 .bash_history
-rw-r--r--. 1 root root 18 2021-08-11 00:15:38.000000000 +0800 .bash_logout
-rw-r--r--. 1 root root 141 2021-08-11 00:15:38.000000000 +0800 .bash_profile
-rw-r--r--. 1 root root 429 2021-08-11 00:15:38.000000000 +0800 .bashrc
drwx------. 7 root root 103 2024-02-24 16:07:11.180387538 +0800 .cache
drwx------. 10 root root 4096 2024-02-26 15:01:43.008238320 +0800 .config
-rw-r--r--. 1 root root 100 2021-08-11 00:15:38.000000000 +0800 .cshrc
drwxr-xr-x. 2 zhw root 21 2024-02-25 20:19:42.616149114 +0800 csq
-rw-------. 1 root root 20 2024-02-26 21:15:35.621167119 +0800 .lesshst
drwx------. 3 root root 19 2024-02-24 16:07:09.573116561 +0800 .local
drwx------. 2 root root 6 2024-02-24 15:57:10.683820671 +0800 .ssh
-rw-r--r--. 1 root root 129 2021-08-11 00:15:38.000000000 +0800 .tcshrc
-rw-------. 1 root root 6257 2024-02-26 14:59:18.498857325 +0800 .viminfo
stat:显示文件或文件系统详细状态信息
其功能远超 ls -l
(仅显示部分元数据),可输出文件的 inode 信息、权限、所有者、大小、时间戳(访问 / 修改 / 状态变更时间)等关键数据
stat [选项] [文件/目录/符号链接]
选项 | 功能说明 |
---|---|
-f |
显示文件系统的状态信息(而非文件本身),如 inode 总数、空闲块数、块大小等 |
-t |
简洁输出(一行显示所有信息),适合脚本中提取数据(避免多行解析) |
-c |
自定义输出格式(按指定格式符提取特定字段),支持多个格式符组合 |
关键格式符(配合 -c 选项使用)
格式符 | 含义 | 示例输出 |
---|---|---|
%n |
文件名 / 目录名 | test.txt |
%s |
文件大小(字节) | 1024 (表示 1KB) |
%a |
访问权限(八进制,如 644、755) | 644 |
%A |
访问权限(人类可读格式,如 -rw-r--r-- ) |
-rw-r--r-- |
%u |
文件所有者 UID(用户 ID) | 1000 (普通用户默认 UID) |
%g |
文件所属组 GID(组 ID) | 1000 |
%U |
文件所有者用户名(对应 UID) | user |
%G |
文件所属组名(对应 GID) | user |
%i |
文件 inode 号 | 123456 |
%h |
硬链接数 | 1 (普通文件默认硬链接数) |
%x |
最后访问时间(atime,人类可读) | 2024-05-20 14:30:00.123456789 +0800 |
%y |
最后修改时间(mtime,人类可读) | 2024-05-20 14:25:00.123456789 +0800 |
%z |
最后状态变更时间(ctime,人类可读) | 2024-05-20 14:25:00.123456789 +0800 |
%w |
文件创建时间(birthtime,需文件系统支持) | 2024-05-20 14:20:00.123456789 +0800 |
#1.查看文件基本信息
[root@kylin-v10-sp3-csq ~]# stat /etc/passwd
文件:“/etc/passwd”
大小:1948 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:33741538 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2025-09-13 11:00:01.179193457 +0800
最近更改:2025-09-11 10:57:38.676629571 +0800
最近改动:2025-09-11 10:57:38.677629626 +0800
创建时间:-
#2.查看文件系统信息
[root@kylin-v10-sp3-csq ~]# stat -f /etc/passwd
文件:"/etc/passwd"
ID:fd0000000000 文件名长度:255 类型:xfs
块大小:4096 基本块大小:4096
块:总计:12303494 空闲:10541026 可用:10541026
Inodes: 总计:24619008 空闲:24487714
#3.自定义输出(提取文件名、大小、权限)
[root@kylin-v10-sp3-csq ~]# stat -c "%n %s %a" /etc/passwd
/etc/passwd 1948 644
目录的相关操作
特殊的目录
. :代表当前目录
.. :代表上一级目录
- :代表前一个工作目录
~ :代表目前使用者身份所在的家目录
~account :代表account这个使用者的家目录
cd:切换目录
cd是Change Directory的缩写
通过使用cd
命令,用户可以快速切换到不同的目录
[root@chenshiren ~]# cd [绝对路径或相对路径]
[root@chenshiren ~]# cd ~zhw # 代表进入zhw的家目录
[root@chenshiren zhw]# cd ~ # 表示回到自己的家目录
[root@chenshiren ~]# cd # 没有加任何路径也是回到自己的家目录
[root@chenshiren ~]# cd .. # 表示去到上一层目录
[root@chenshiren /]# cd - # 表示回到上一次cd的目录
/root
[root@chenshiren ~]# cd /var/spool/mail/ # 去到/var/spool/mail/目录下这个是绝对路径的写法
[root@chenshiren mail]# cd ../at # 去到/var/spool/at 目录下这个是相对路径的写法
[root@chenshiren at]#
pwd:显示目前所在目录
pwd是Print Working Directory 的缩写
pwd
命令用于显示当前工作目录的完整路径
[root@chenshiren ~]# pwd
/root
# 选项
-L:打印 $PWD 变量的值,如果它包含了当前的工作目录
-P:打印当前的物理路径,不带有任何的符号链接
mkdir:创建目录
mkdir是Make Directory的缩写
mkdir
命令用于创建新目录(文件夹)
[root@chenshiren ~]# mkdir [-mp] 名称
选项:
-m:设置文件的权限,直接设置,不使用默认权限
-p:帮助你直接将所需要目录(包含上层目录)递归创建
# 示例:
# 在/tmp下面创建一个目录
[root@chenshiren ~]# cd /tmp/
[root@chenshiren tmp]# mkdir test
# 在所创建的test里面创建test1,在test1里面创建test2
[root@chenshiren tmp]# mkdir -p test/test1/test2
[root@chenshiren tmp]# cd test/test1/test2/
[root@chenshiren test2]# pwd
/tmp/test/test1/test2
# 在/tmp下面创建目录,设置权限为 rwxr-xr-x
[root@chenshiren tmp]# mkdir -m 755 abc
[root@chenshiren tmp]# ls -ld abc
drwxr-xr-x. 2 root root 6 2月 26 22:29 abc
rmdir:删除空目录
rmdir是remove directory缩写
rmdir
命令用于删除空目录的
[root@chenshiren ~]# rmdir [-vp] 名称
选项:
-v:出每个被处理目录的详情
-p:删除指定目录及其各个上级文件夹
# 示例:
# 删除之前用mkdir创建的test/test1/test2空目录
[root@chenshiren tmp]# rmdir -vp test/test1/test2/
rmdir: 正在删除目录,'test/test1/test2/'
rmdir: 正在删除目录,'test/test1'
rmdir: 正在删除目录,'test'
复制、删除、移动与创建
cp:复制文件或目录
cp是copy的缩写
cp
命令在系统中用于复制文件或目录
用法:
[root@chenshiren ~]# cp [-adfilprsu] 源文件... 目标文件
选项 | 作用 |
---|---|
-a | 相当于使用-dpr选项的组合,保留所有文件属性,递归地复制目录,并保持链接关系。(备份常用) |
-l | 创建硬链接而不复制文件 |
-r | 递归复制 |
-f | 覆盖目标文件而不提示用户确认 |
-p | 保留源文件的访问时间和修改时间以及权限模式 |
-s | 复制成为符号链接文件,就是"快捷方式" |
-u | 仅在目标文件不存在或比源文件旧的情况下才复制文件 |
-d | 复制时保留链接(符号链接) |
-i | 在复制前提示用户,如果目标文件已存在则询问是否覆盖 |
# 示例
# 将家目录的anaconda-ks.cfg复制到/tmp目录下
[root@chenshiren ~]# cp -i anaconda-ks.cfg /tmp # 重复两次
cp:是否覆盖'/tmp/anaconda-ks.cfg'? y
# 将家目录的anaconda-ks.cfg权限修改为777,将文件复制到/tmp下保留所有文件属性
[root@chenshiren ~]# cp -af anaconda-ks.cfg /tmp
cp:是否覆盖'/tmp/anaconda-ks.cfg'? y
[root@chenshiren ~]# ls -ld /tmp/anaconda-ks.cfg
-rwxrwxrwx. 1 root root 1437 2月 24 16:00 /tmp/anaconda-ks.cfg
# 登陆zhw账户,复制/tmp下的anaconda-ks.cfg文件
[root@chenshiren ~]# chmod 600 /tmp/anaconda-ks.cfg
[zhw@chenshiren ~]$ cp -f /tmp/anaconda-ks.cfg .
cp: 无法打开'/tmp/anaconda-ks.cfg' 读取数据: 权限不够
[root@chenshiren ~]# chmod 604 /tmp/anaconda-ks.cfg
[zhw@chenshiren ~]$ cp -f /tmp/anaconda-ks.cfg .
[zhw@chenshiren ~]$ ls -l anaconda-ks.cfg
-rw----r--. 1 zhw zhw 1437 2月 26 23:56 anaconda-ks.cfg
如果我们要复制其他人的数据,该文件你必须要有read
的权限才行
默认情况下,复制操作会将目标文件的拥有者设置为执行cp
操作的用户,这样确保复制过来的文件最终归属于当前用户
另外,如果您想要保留源文件的权限和属性,您可以使用-p
选项,这样在复制文件时源文件的权限、拥有者和用户组会被保留到目标文件中,而不会被更改
# 示例:
# 将/etc/ 目录下的所有文件复制到/tmp下面
[root@chenshiren ~]# cp -rf /etc/ /tmp/
# 将/etc/ 目录备份到/tmp下面
[root@chenshiren ~]# cp -a /etc/ /tmp/
# 复制root目录下的anaconda-ks.cfg 建立硬链接和软链接
[root@chenshiren ~]# cp -l anaconda-ks.cfg anaconda-ks-hardlink.cfg
[root@chenshiren ~]# cp -s anaconda-ks.cfg anaconda-ks-softlink.cfg
[root@chenshiren ~]# ls -l
总用量 8
-rw----r--. 2 root root 1437 2月 26 23:58 anaconda-ks.cfg
-rw----r--. 2 root root 1437 2月 26 23:58 anaconda-ks-hardlink.cfg
lrwxrwxrwx. 1 root root 15 2月 27 17:40 anaconda-ks-softlink.cfg -> anaconda-ks.cfg
# 将.bashrc文件复制到/tmp下,使用-u参数,看看将旧的.bashrc能不能复制过来
[root@chenshiren ~]# ls -l .bashrc --full-time
-rw-r--r--. 1 root root 429 2021-08-11 00:15:38.000000000 +0800 .bashrc
[root@chenshiren ~]# cp -f .bashrc /tmp/
[root@chenshiren ~]# ls -l /tmp/.bashrc --full-time
-rw-r--r--. 1 root root 429 2024-02-27 17:45:37.376066369 +0800 /tmp/.bashrc
[root@chenshiren ~]# cp -uf .bashrc /tmp/
[root@chenshiren ~]# ls -l /tmp/.bashrc --full-time
-rw-r--r--. 1 root root 429 2024-02-27 17:45:37.376066369 +0800 /tmp/.bashrc
# 将/etc 所有文件 和/opt 所有文件复制到/tmp目录下
[root@chenshiren ~]# cp -rf /etc/ /opt/ /tmp/
rm:删除文件或目录
rm是remove的缩写
rm
命令是用于删除文件或目录
特别注意,删除后的文件无法恢复,请谨慎使用
[root@chenshiren ~]# rm [-fir] 文件或目录
选项:
-f:强制删除文件或目录,不进行任何提示
-i:交互式删除,删除前会进行提示确认
-r:递归删除目录及其内容
# 示例:
# 将刚刚cp示例中复制在/tmp目录下的/etc/ /opt/ 目录删掉
[root@chenshiren ~]# rm -rf /tmp/etc/ /tmp/opt/
# 将/tmp 目录下的abc开头的目录删掉
[root@chenshiren ~]# mkdir /tmp/abc1 /tmp/abc2 /tmp/abc3
[root@chenshiren ~]# ls /tmp/
abc1
abc2
abc3
...
[root@chenshiren ~]# rm -rf /tmp/abc*
# 当我们使用-r参数删除目录 还是会出现提示,这是因为alias的问题,只要在命令行前面加上\就会忽略alias
[root@chenshiren ~]# cp -rf /etc/ /tmp/
[root@chenshiren ~]# rm -r /tmp/etc/
rm:是否进入目录'/tmp/etc/'? y
rm:是否进入目录'/tmp/etc/dnf'? ^C
[root@chenshiren ~]# \rm -r /tmp/etc/
# 删除带有特殊字符的文件
[root@chenshiren ~]# echo "aaa" > -aa-a
[root@chenshiren ~]# ls
-aa-a
[root@chenshiren ~]# rm -rf -aa-a
rm: 不适用的选项 -- a
尝试使用"rm ./-aa-a"删除文件 '-aa-a'。
请尝试执行 "rm --help" 来获取更多信息。
[root@chenshiren ~]# rm -rf ./-aa-a
mv:移动文件与目录,或重命名
mv是move的缩写
mv
命令用于移动文件或目录,同时也可以用来重命名文件或目录
[root@chenshiren ~]# mv [-fiu] 源文件... 目标文件
选项:
-f:即使目标文件存在时,不提示直接覆盖
-i:若目标文件已经存在时,会进行提示确认是否覆盖
-u:只有当源文件比目标文件新,或者目标文件不存在时,才会移动文件
# 示例:
# 复制一文件,建立一个目录,将文件移动到目录
[root@chenshiren ~]# cp -f .bashrc bashrc
[root@chenshiren ~]# mkdir dir
[root@chenshiren ~]# mv bashrc dir/
[root@chenshiren ~]# ls dir/
bashrc
# 将刚刚创建的目录改名为 dir2
[root@chenshiren ~]# mv dir/ dir2/
# 在复制两个文件并移动到 dir2/ 目录下
[root@chenshiren ~]# cp .bashrc bashrc2
[root@chenshiren ~]# cp .bashrc bashrc3
[root@chenshiren ~]# mv bashrc2 bashrc3 dir2/
[root@chenshiren ~]# ls dir2/
bashrc bashrc2 bashrc3
[root@chenshiren ~]# rm -rf dir2/
touch:修改时间或创建新文件
-
修改时间(modification time ,mtime)
当文件的【内容数据】变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件权限属性
-
状态时间(status time,ctime)
当文件的【状态】改变时,后就会更新这个时间,举例:就是文件属性权限更改了就会更新这个时间
-
读取时间(access time,atime)
当【该文件内容被读取】时,就会更新这个读取时间,举例:使用cat去读取/etc/man_db.conf,就会更新该文件的atime
纸上得来终觉浅,绝知此事要躬行
查看/etc/man_db.conf文件的修改时间,状态时间,读取时间
[root@chenshiren ~]# date; ls -l /etc/man_db.conf ;ls -l --time=atime /etc/man_db.conf ; ls -l --time=ctime /etc/man_db.conf
2024年 02月 27日 星期二 18:33:06 CST # 目前时间
-rw-r--r--. 1 root root 5235 9月 21 2022 /etc/man_db.conf # 在什么时间段建立的该内容
-rw-r--r--. 1 root root 5235 2月 27 18:26 /etc/man_db.conf # 在什么时间段读取过该内容
-rw-r--r--. 1 root root 5235 2月 24 15:58 /etc/man_db.conf # 在什么时间段更新过状态
# ls -l /etc/man_db.conf显示的是该文件的mtime,也就是文件上一次修改的时间
在某些情况下,系统时间出现异常的情况,可能导致文件的时间戳看起来“来自未来”
比如:
-
时区设置错误:如将系统时区设置为不正确的时区会导致时间偏差
-
硬件时钟问题:BIOS 中的实时时钟出现问题,会导致系统在重启后时间不准确或跑到未来时间
-
网络时间同步问题:如果系统依赖网络时间服务器同步时间,网络连接问题也可能导致时间不准确
[root@chenshiren ~]# touch [-acdmt] 文件...
选项
-a:仅更新文件的访问时间(atime)
-c:如果指定的文件不存在,则不创建新文件,也不报错
-d:后面可以自定义修改时而不用目前的时间,也可以使用--date="日期或时间"
-m:仅更新文件的修改时间(mtime)
-t:后面可以自定义修改时而不用目前的时间,格式为[YYYYMMDDhhmmm]
# 示例
# 创建一个文件观察创建时间
[root@chenshiren ~]# touch csq.txt
[root@chenshiren ~]# ls -l csq.txt
-rw-r--r--. 1 root root 0 2月 27 19:30 csq.txt
# 修改csq.txt文件,将日期调整为两天前
[root@chenshiren ~]# touch -d "2 day ago" csq.txt
[root@chenshiren ~]# date; ls -l csq.txt ;ls -l --time=atime csq.txt ;ls -l --time=ctime csq.txt
2024年 02月 27日 星期二 19:37:52 CST
-rw-r--r--. 1 root root 0 2月 25 19:36 csq.txt
-rw-r--r--. 1 root root 0 2月 25 19:36 csq.txt
-rw-r--r--. 1 root root 0 2月 27 19:36 csq.txt
# 修改csq.txt文件,将日期改为2018/2/1/18:00
[root@chenshiren ~]# touch -t 201802011800 csq.txt
[root@chenshiren ~]# ls -l --full-time csq.txt
-rw-r--r--. 1 root root 0 2018-02-01 18:00:00.000000000 +0800 csq.txt
[root@chenshiren ~]# date; ls -l csq.txt ;ls -l --time=atime csq.txt ;ls -l --time=ctime csq.txt 2024年 02月 27日 星期二 19:44:34 CST
-rw-r--r--. 1 root root 0 2月 1 2018 csq.txt
-rw-r--r--. 1 root root 0 2月 1 2018 csq.txt
-rw-r--r--. 1 root root 0 2月 27 19:43 csq.txt
# 修改csq.txt文件权限,查看ctime是否改变
[root@chenshiren ~]# chown zhw:zhw csq.txt
[root@chenshiren ~]# date; ls -l csq.txt ;ls -l --time=atime csq.txt ;ls -l --time=ctime csq.txt
2024年 02月 27日 星期二 19:48:22 CST
-rw-r--r--. 1 zhw zhw 0 2月 1 2018 csq.txt
-rw-r--r--. 1 zhw zhw 0 2月 1 2018 csq.txt
-rw-r--r--. 1 zhw zhw 0 2月 27 19:48 csq.txt
获取路径的文件名与目录名称
获取文件名:basename
[root@chenshiren ~]# basename /etc/NetworkManager/system-connections/ens160.nmconnection
ens160.nmconnection
获取路径名:dirname
[root@chenshiren ~]# dirname /etc/NetworkManager/system-connections/ens160.nmconnection
/etc/NetworkManager/system-connections
文件内容查看
直接查看:cat、tac、nl
cat:由第一行开始显示文件内容
cat是Concatenate的缩写
[root@chenshiren ~]# cat [-AbEnTv] [文件]...
-A:显示所有字符,包括特殊字符,相当于-vET
-b:对非空输出行编号,空输出行不编号
-E:在每行末尾显示美元符号($)
-n:对输出的每一行编号
-T:将制表符[Tab]将其替换为^I
-v:列出一些看不出来的特殊字符
# 示例
# 查看/etc/issue 的这个文件内容
[root@chenshiren ~]# cat /etc/issue
\S
Kernel \r on an \m
# 查看/etc/issue 有几行
[root@chenshiren ~]# cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
# 不显示空行看有几行
[root@chenshiren ~]# cat -b /etc/issue
1 \S
2 Kernel \r on an \m
# 显示/etc/man_db.conf 的完整内容
[root@chenshiren ~]# cat -A /etc/man_db.conf
...
MANPATH_MAP^I/bin^I^I^I/usr/share/man$ # tab由^I表示 换行由$表示
MANPATH_MAP^I/usr/bin^I^I/usr/share/man$
MANPATH_MAP^I/sbin^I^I^I/usr/share/man$
MANPATH_MAP^I/usr/sbin^I^I/usr/share/man$
MANPATH_MAP^I/usr/local/bin^I^I/usr/local/man$
MANPATH_MAP^I/usr/local/bin^I^I/usr/local/share/man$
MANPATH_MAP^I/usr/local/sbin^I^I/usr/local/man$
MANPATH_MAP^I/usr/local/sbin^I^I/usr/local/share/man$
MANPATH_MAP^I/usr/X11R6/bin^I^I/usr/X11R6/man$
MANPATH_MAP^I/usr/bin/X11^I^I/usr/X11R6/man$
MANPATH_MAP^I/usr/games^I^I/usr/share/man$
...
tac:反向显示
与cat
命令不同的是,tac
会从最后一行开始显示内容,逐行向前显示,直到第一行。
[root@chenshiren ~]# tac /etc/issue
Kernel \r on an \m
\S
nl:添加行号输出内容
nl
命令用于在文本文件中添加行号,并将带有行号的文本输出到标准输出
[root@chenshiren ~]# nl [-bnw] 文件
选项:
-b:指定行号的方式,有两种 -b a:表示不论是否空行都列出行号 -b t:有空行则不列出行号
-n:列出行号的表示方法,有三种 -n ln:行号在屏幕的最左方显示 -n rn:行号在自己栏位最右方显示,不加0 -n rz:行号在自己栏位最右方显示,加0
-w:行号栏位占用的字符
# 用nl列出/etc/issue的内容
[root@chenshiren ~]# nl /etc/issue
1 \S
2 Kernel \r on an \m
# 列出/etc/issue的内容空白行也加上行号
[root@chenshiren ~]# nl -b a /etc/issue
1 \S
2 Kernel \r on an \m
3
# 列出/etc/issue的内容空白行不列出行号
[root@chenshiren ~]# nl -b t /etc/issue
1 \S
2 Kernel \r on an \m
# 列出/etc/issue的内容 行号前面自动补零
[root@chenshiren ~]# nl -n rz /etc/issue
000001 \S
000002 Kernel \r on an \m
# 列出/etc/issue内容 前面行号占用2个字符
[root@chenshiren ~]# nl -b a -n rz -w 2 /etc/issue
01 \S
02 Kernel \r on an \m
03
翻页查看:more、less
more:一页一页翻动
[root@chenshiren ~]# more /etc/man_db.conf
more按键说明
按键 | 说明 |
---|---|
空格键 | 显示下一页内容 |
Enter | 显示下一行内容 |
/字符串 | 向后搜索指定字符串,按下n键可以继续向后查找下一个匹配的字符串 |
:f | 显示当前文件名和行号 |
q | 退出more命令 |
b或ctrl +b | 回滚一屏,显示前一屏内容 |
less:一页一页翻动
[root@chenshiren ~]# less /etc/man_db.conf
less按键说明
按键 | 说明 |
---|---|
空格键 | 向下翻页一页 |
[pagedown] | 向下翻页一页 |
[pageup] | 向上翻页一页 |
/字符串 | 向下搜索指定字符串 |
?字符串 | 向上搜索指定字符串 |
n | 查找下一个匹配的字符串 |
N | 查找上一个匹配的字符串 |
g | 移动到文本开头 |
G | 移动到文本末尾 |
q | 退出less命令 |
数据截取:head、tail
head:取出前面几行
[root@chenshiren ~]# head [-n number] [文件]
选项:
-n:指定要显示的行数(-10表示不包括文件后10行)
# 示例
# 显示man_db.conf前十行
[root@chenshiren ~]# head -n 10 /etc/man_db.conf
tail:取出后面几行
[root@chenshiren ~]# tail [-n number] [文件]
选项
-n:指定要显示的行数
-f:续显示文件新增的内容,适用于需要实时查看文件变化的情况(按下ctrl+c结束)
# 示例
# 显示man_db.conf后十行
[root@chenshiren ~]# tail -n 10 /etc/man_db.conf
# 持续检测 /var/log/messages内容
[root@chenshiren ~]# tail -f /var/log/messages
非纯文本文件:od
od
命令通常用于查看二进制文件或非文本文件的内容
[root@chenshiren ~]# od [-t TYPE] [文件]
选项:
-t:后面可以接各种【类型】的试过一次关于,例如:
a :利用默认的字符集来输出
c :以ASCII字符的形式输出
d[size]:显示有符号十进制整数
f[size]:显示浮点数
o[size]:显示有符号的八进制整数
x[size]:显示有符号的十六进制整数
命令与文件的查找
脚本文件的查找:which
which
命令用于在系统的路径中查找指定命令的位置。当您在终端中执行which <command>
时,系统会搜索环境变量PATH
中列出的目录,找到并显示第一个匹配的命令的完整路径。
[root@chenshiren ~]# which [-a] command
选项:
-a:显示所有匹配的命令的路径,而不仅仅是第一个匹配的命令路径
# 示例
# 找ifconfig命令的具体位置,如有多个一起列出来
[root@chenshiren ~]# which -a ifconfig
/usr/sbin/ifconfig
# 找history命令的具体位置
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[root@chenshiren ~]# which history
/usr/bin/which: no history in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
# 找不到,是因为history是bash的内置命令,which默认在系统的路径中查找指定命令的位置
文件的查找
whereis
whereis
命令是用于查找特定命令的可执行文件、源代码文件和帮助文档文件的位置。。它可以帮助用户找到有关特定命令的更多信息,包括其可执行文件、man文档和源代码文件。
[root@chenshiren ~]# whereis [-bmsu] 文件或目录名
选项:
-b:只查找可执行文件
-m:只查找帮助手册文件
-s:只查找源代码文件
# 示例
# 找出cat的可执行文件路径
[root@chenshiren ~]# whereis -b cat
cat: /usr/bin/cat
# 找出cat的帮助手册文件
[root@chenshiren ~]# whereis -m cat
cat: /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz
locate/updatedb
locate
命令用于快速定位文件系统中与指定模式匹配的文件名。locate
命令通过搜索数据库来实现快速搜索,而这个数据库是通过updatedb
命令定期更新的。
[root@chenshiren ~]# locate [-iclSr] keyword
选项:
-i:忽略大小写
-c:不输出文件名,仅计算找到的文件数量
-l:仅输入几行的意思,例如输出5行 就是-l 5
-S:输入locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
-r:使用正则表达式进行匹配
# 示例:
# 找到系统中所有与passwd相关的文件名,只列出5个
[root@chenshiren ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
# 查询所使用的数据库文件和文件名以及各数数据数量
[root@chenshiren ~]# locate -S
数据库 /var/lib/mlocate/mlocate.db:
10,397 文件夹
132,201 文件
6,747,736 文件名中的字节数
3,215,802 字节用于存储数据库
# 创建一个文件,然后再使用 locate搜索看看
[root@chenshiren ~]# touch abcdefg
[root@chenshiren ~]# locate abcdefg
[root@chenshiren ~]# #找不到
因为他是经过数据库来查找的,而数据库的建立默认是在每天执行一次,所以当你新建立起来的文件,却还在数据库更新之前查找该文件,那么locate会告诉你找不到,这时候只要执行updatedb更新文件索引数据库就可以了
[root@chenshiren ~]# updatedb
[root@chenshiren ~]# locate abcdefg
/root/abcdefg
find
find
命令用于查找文件和目录,find
命令的功能非常丰富,可以根据各种条件来搜索文件
[root@chenshiren ~]# find [搜索的起始路径] [选项] [匹配的文件名模式或其他条件]
选项一:与时间有关的选项
共有-atime,-ctime与-mtime,以mtime说明
选项 | 作用 |
---|---|
-mtime n | n为数字,意义为在n天之前的【一天之内】被修改过内容的文件 |
-mtime +n | 列出在n天前(不含n天本身)被修改过内容的文件 |
-mtime -n | 列出在n天内(含n天本身)被修改过内容的文件 |
-newer file | file为一个存在的文件,列出比file还要新的文件 |
示例:
- 将过去系统上面24小时内有修改过内容(mtime)的文件列出
[root@chenshiren ~]# find / -mtime 0
# 那个0是重点,0代表目前的时间,所以,从现在开始到24小时前
# 如果想找出4天内被修改的文件,可以使用【find / -mtime -4】
- 找出/var/log/下面以.log结尾的文件7天前的文件
[root@kylin-v10-sp3-csq ~]# find /var/log/ -type f -name "*.log" -mtime +7
/var/log/.kylin-post-actions-nochroot.log
/var/log/anaconda/anaconda.log
/var/log/anaconda/X.log
/var/log/anaconda/program.log
/var/log/anaconda/packaging.log
/var/log/anaconda/storage.log
/var/log/anaconda/lvm.log
/var/log/anaconda/dnf.librepo.log
/var/log/anaconda/hawkey.log
/var/log/anaconda/dbus.log
/var/log/anaconda/ks-script-06afsx8t.log
/var/log/anaconda/ks-script-irzum_3u.log
/var/log/anaconda/ks-script-u1xtb85e.log
/var/log/anaconda/ks-script-xb0qv_x8.log
/var/log/anaconda/journal.log
/var/log/ky_kms_activation.log
/var/log/kylin-security.log
选项二:与使用者或用户组名称有关的选项
选项参数 | 作用 |
---|---|
-uid n | 按照文件或目录的拥有者用户ID(UID)来搜索。n 为用户ID的数字表示。 |
-gid n | 按照文件或目录的拥有者组ID(GID)来搜索。n 为组ID的数字表示。 |
-user name | 按照文件或目录的拥有者用户名来搜索。 |
-group name | 按照文件或目录的拥有者组名来搜索。 |
-nouser | 搜索那些拥有者用户不存在于 /etc/passwd 文件中的文件或目录 |
-nogroup | 搜索那些拥有者组不存在于 /etc/group 文件中的文件或目录 |
- 查找系统中不属于任何人的文件
[root@chenshiren ~]# find / -nouser
选项三:与文件权限有关的选项
-name filename :根据文件名进行搜索,可以使用通配符进行模式匹配
-iname filename : 不区分大小写文件名进行搜索,可以使用通配符进行模式匹配
-size [+|-]SIZE:根据文件的大小进行搜索。可以使用+表示大于,-表示小于,然后跟上大小值
例如,+100M表示大于100兆字节的文件
-type TYPE :根据文件类型进行搜索,常见的类型包括:
f:普通文件
d:目录
l:符号链接
c:字符设备文件
b:块设备文件
s:套接字文件
p:命名管道(FIFO)
-perm mode :表示精确匹配文件权限位
文件的权限必须严格等于指定的权限才会被匹配
-perm -mode :表示寻找的文件必须至少有所有指定权限位
文件的权限必须至少包含指定的权限,才会被匹配
例如:查找【-rwxr-xr-x】时,【-rwx --- ---】属性也会被列出来
-perm /mode :表示匹配【任何一组权限位】
例如:查找【-rwxr-xr-x】时,【-rw- --- ---】属性也会被列出来,因为他有rw
- 假设我想要找出来 /usr/bin、usr/sbin 这两个目录下,只要具有 SUID 或 SGID 就找到该文件
[root@chenshiren ~]# find /usr/bin /usr/sbin / -perm /6000
- 查找文件不区分大小写(文件名)
[root@kylin-v10-sp3-csq ~]# touch /backup/HEHE{1..5}.txt
[root@kylin-v10-sp3-csq ~]# find / -iname hehe*.txt
/backup/HEHE1.txt
/backup/HEHE2.txt
/backup/HEHE3.txt
/backup/HEHE4.txt
/backup/HEHE5.txt
- 找出/etc/下大于100k文件
[root@kylin-v10-sp3-csq ~]# find /etc/ -size +100k
/etc/pki/ca-trust/extracted/edk2/cacerts.bin
/etc/pki/ca-trust/extracted/java/cacerts
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
/etc/yum.repos.d/zabbix-get-6.0.40-release1.el7.x86_64.rpm
/etc/services
/etc/selinux/targeted/contexts/files/file_contexts
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/policy/policy.32
/etc/lvm/lvm.conf
/etc/udev/hwdb.bin
/etc/java/java-11-openjdk/java-11-openjdk-11.0.27.6-1.p01.ky10.x86_64/lib/security/public_suffix_list.dat
选项四:额外可进行的操作
选项 | 作用 |
---|---|
-exec command {} \; | 用于在找到的文件执行特定的命令 |
将结果打印到屏幕上,这个操作是默认操作 | |
xargs | 用于在找到的文件执行特定的命令 |
- 将选项三的示例找到的文件 使用【ls -l】展现出来
[root@chenshiren ~]# find /usr/bin /usr/sbin / -perm /6000 -exec ls -l {} \;
# {}代表find命令找到的文件
# \;用于表示命令的结束
# 因为在bash环境下,;是有特殊意义的
# 所以我们需要使用反斜杠\来转义;,确保它被正确解释为-exec操作的结束符号
# 而不是shell中的命令结束符号。
- 在/etc/下找出.conf结尾的文件,找出这些文件中过滤包含root或csq的行
find /etc/ -type f -name "*.conf" | xargs grep -E 'root|csq'
- find找出来交给tar打包压缩/backup/etc-conf.tar.gz
#两种方法
find /etc/ -type f -name "*.conf" -exec tar -zcf /backup/etc1-conf.tar.gz {} +
find /etc/ -type f -name "*.conf" | xargs tar -zcf /backup/etc2-conf.tar.gz
- find找出文件通过cp复制走
#找出/var/log/下以.log结尾的文件复制到/backup/logs/目录
#两种方法
find /var/log/ -type f -name "*.log" |xargs cp -t /backup/logs/
find /var/log/ -type f -name "*.log" -exec cp -f {} /backup/logs/ \;
更多推荐
所有评论(0)