跳到主要内容

03、Linux 实战:文档管理相关命令

基础概念

文档字符

Linux中通过不同的单个字符区别不同的文件,常见文件字符如下:

文档字符 类型
- 普通文件
d 目录文件
l 链接文件
b 块设备文件
c 字符设备文件
s 网络数据交换文件
p 管道文件

文件种类

为方便管理,主观的将文档分为以下5种类型:
 

文档颜色

在显示文档信息时,Linux系统会自动为不同文档种类赋予不同的颜色显示:

颜色 类型
蓝色 目录
黄色 设备文件
灰色 其他文件
红色 压缩或包文件
绿色 可执行文件
(一般为二进制程序)
白色
(黑色)
普通文件
浅蓝色文件 链接文件
红色闪烁 有问题的链接文件

文档时间

文档的时间信息由以下3个时间参数组成:

时间参数 含义
mtime
(Modification Time)
当文档内容被修改时,则更新该时间
atime
(Access Time)
当文档被任意方式读取时,则更新该时间
ctime
(Status Time)
当文档状态被更改时,则更新该时间

管理文档相关命令

basename

basename命令:返回指定文档路径的名称部分
指令格式:basename 文档路径
(1)常用于shell编程中;

例1:仅打印/etc/passwd的名称部分
[root@ddkk.com ~]# basename /etc/passwd
passwd

dirname

dirname命令:返回指定文档路径的目录部分
指令格式:dirname 文档路径
(1)常用于shell编程中;

例1:仅打印/etc/passwd的目录部分
[root@ddkk.com ~]# dirname /etc/passwd
/etc

pwd

pwd命令(Print Working Directory):返回当前终端所在的工作目录
指令格式:pwd

例1:返回当前工作目录,切换到/etc目录后再次返回当前工作目录
[root@ddkk.com ~]# pwd
/root
[root@ddkk.com ~]# cd /etc
[root@ddkk.com etc]# pwd
/etc
[root@ddkk.com etc]# cd
[root@ddkk.com ~]# pwd
/root

cd

cd命令(Change Directory):切换当前终端所在的工作目录
指令格式:cd 路径
(1)若省略路径,则默认切换到当前用户的家目录(等效于cd ~);

例1:切换至/tmp目录,再返回至用户的家目录
[root@ddkk.com ~]# cd /tmp
[root@ddkk.com tmp]# pwd
/tmp
[root@ddkk.com tmp]# cd ~
[root@ddkk.com ~]# pwd
/root

ls

ls命令:返回文档的基础信息
指令格式:ls 选项 文档路径
(1)添加选项以查看更多的文档信息;

选项 含义
-l 以详细列表形式显示
-a 返回全部文档
(默认不显示隐藏文档)
-d 仅返回目录的信息
(默认返回目录中包含的文档信息)
-R 连同子目录内容返回
-h 以较高的可读性形式返回
-F 根文档信息给予附加数据结构
-i 返回文档的inode号
--full-time 返回文档创建/修改的具体日期

例1:以详细信息列出/目录下所有文档的信息
 

例2:仅列出./root目录的信息
[root@ddkk.com ~]# ls -ldh /root
dr-xr-x---. 16 root root 4.0K Nov 16 11:56 /root

stat

stat命令:返沪i指定文档的详细信息
指令格式:stat 文档路径

例1:查看/etc/grub.d目录的详细信息
 

mkdir

mkdir命令(Make Directory):指定路径下创建目录
指令格式:mkdir 路径
(1)若只指定目录名,则默认在当前工作目录创建子目录;
(2)若同时创建多个目录,目录之间使用空格分隔;
(3)若创建多层级目录应添加-p选项,格式:mkdir -p 路径

例1:在当前目录下创建test子目录
[root@ddkk.com ~]# mkdir test
[root@ddkk.com ~]# ls -ld ./test
drwxr-xr-x. 2 root root 6 11月 16 11:48 ./test

例2:在/tmp目录下同时创建test2和test3子目录
[root@ddkk.com ~]# mkdir /tmp/test2 /tmp/test3
[root@ddkk.com ~]# ls -ld /tmp/test2 /tmp/test3
drwxr-xr-x. 2 root root 6 11月 16 11:51 /tmp/test2
drwxr-xr-x. 2 root root 6 11月 16 11:51 /tmp/test3

例3:创建多层级目录/root/lay1/lay2
 

touch

touch命令:创建文件和更新文件的时间参数
指令格式1(创建文件):touch 文件路径
(1)若指定文件已存在,则更新该文件的时间参数为当前时间;

例1:在/tmp目录下创建hello文件
[root@ddkk.com ~]# touch /tmp/hello
[root@ddkk.com ~]# ls -l /tmp/hello
-rw-r--r--. 1 root root 0 Nov 16 12:44 /tmp/hello

指令各式2(更新时间参数):touch 选项 文件路径
(1)若不指定选项,则默认修改文档的全部时间参数;

选项 含义
-m 修改文档的mtime时间参数
-a 修改文档的atime时间参数
-c 修改文档的ctime时间参数
-t 指定修改文档的时间
(默认是当前时间)
(指定格式:年月日时分.秒)

例2:创建txt1文件并修改其使劲按为2020-10-11 08:15:30,最后更新为当前时间
 

rename

rename命令:重命名文档
指令格式:rename 原文档名 新文档名 文档路径
(1)可搭配通配符进行批量修改文件;

例1:将当前工作目录的test文件重命名为file
[root@ddkk.com ~]# touch test
[root@ddkk.com ~]# ls -l test file
ls: cannot access 'file': No such file or directory
-rw-r--r--. 1 root root 0 Nov 16 13:08 test
[root@ddkk.com ~]# rename test file ./test
[root@ddkk.com ~]# ls -l test file
ls: cannot access 'test': No such file or directory
-rw-r--r--. 1 root root 0 Nov 16 13:08 file

cp

cp命令(Copy):复制文档到指定路径
指令格式:cp 选项 源文档路径 目标文档路径
(1)复制过程中可对文档进行重命名;

选项 含义
-f 强制复制
-r 递归复制
-p 复制时保留源文件属性
-d 复制链接文件时,将复制后的文件指向源链接文件
-a 复制时,保留链接和属性(或递归复制)
(等同于-dpr)

例1:复制链接文件txt2(链接至txt1)为txt3和txt4文件
[root@ddkk.com ~]# touch txt1
[root@ddkk.com ~]# ln -s txt1 txt2
[root@ddkk.com ~]# ls -l txt1 txt2
-rw-r--r--. 1 root root 0 11月 16 13:15 txt1
lrwxrwxrwx. 1 root root 4 11月 16 13:15 txt2 -> txt1
[root@ddkk.com ~]# cp txt2 txt3
[root@ddkk.com ~]# cp -d txt2 txt4
[root@ddkk.com ~]# ls -l txt3 txt4
-rw-r--r--. 1 root root 0 11月 16 13:15 txt3
lrwxrwxrwx. 1 root root 4 11月 16 13:15 txt4 -> txt1

mv

mv命令(Move):移动文档和重命名文档
指令格式:mv 被移动文档路径 指定路径
(1)只需将移动的文档和移动前的文档名不一致,即可实现文档的重命名(需使用绝对路径);

例1:将/root/test文件移至/tmp目录下,再重命名为file
[root@ddkk.com ~]# mv ./test /tmp/test
[root@ddkk.com ~]# ls -l /tmp/test
-rw-r--r--. 1 root root 0 11月 16 13:24 /tmp/test
[root@ddkk.com ~]# mv /tmp/test /tmp/file
[root@ddkk.com ~]# ls -l /tmp/file
-rw-r--r--. 1 root root 0 11月 16 13:24 /tmp/file

rm

rm命令(Remove):移动指定文档
指令格式:rm 选项 被移除的文档路径
(1)若不添加选项,删除时会提示(删除目录时较麻烦);

选项 含义
-f 强制移除
-r 递归移除

例1:删除/tmp目录下的test文件和file目录
 

查找文档相关命令

whereis

whereis命令:在特定目录下查找含有指定名称的文档路径
指令格式:whereis 选项 文档名
(1)特定目录主要为:/etc/sbin和/usr/share/man

选项 含义
-b 只查找二进制格式的文件
-m 只查找mannual路径下的文件
-l 列出whereis用户查找的目录

例1:查找ls命令的执行文件和帮助文档
[root@ddkk.com ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@ddkk.com ~]# whereis -b ls
ls: /usr/bin/ls
[root@ddkk.com ~]# whereis -m ls
ls: /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

locate

locate命令:在数据库中查找含有指定名称的文档路径
指令格式:locate 选项 文档名
(1)locate命令使用的数据:/var/lib/molcate
(2)数据库一般默认每天更新一次(不同发行版可能不同)

选项 含义
-i 忽略大小写
-r 使用正则表达式匹配
-S 返回locate所使用的数据库文件相关的信息

例1:查找含有yum.repos.d的文档路径
[root@ddkk.com ~]# locate yum.repos.d
/etc/yum.repos.d
/etc/yum.repos.d/CentOS-Linux-AppStream.repo
/etc/yum.repos.d/CentOS-Linux-BaseOS.repo
/etc/yum.repos.d/CentOS-Linux-ContinuousRelease.repo
/etc/yum.repos.d/CentOS-Linux-Debuginfo.repo
/etc/yum.repos.d/CentOS-Linux-Devel.repo
/etc/yum.repos.d/CentOS-Linux-Extras.repo
/etc/yum.repos.d/CentOS-Linux-FastTrack.repo
/etc/yum.repos.d/CentOS-Linux-HighAvailability.repo
/etc/yum.repos.d/CentOS-Linux-Media.repo
/etc/yum.repos.d/CentOS-Linux-Plus.repo
/etc/yum.repos.d/CentOS-Linux-PowerTools.repo
/etc/yum.repos.d/CentOS-Linux-Sources.repo

updatedb

updatedb命令:更新locate命令查找的数据库
指令格式:updatedb
(1)updatedb命令会根据/etc/updatedb.conf的配置遍历整个文件系统,用遍历数据更新/var/lib/mlocate;
(2)updatedb命令不会由有任何返回值;

例1:更新/var/lib/mlocate
[root@ddkk.com ~]# updatedb

find

find命令:通过遍历文件系统查找指定文件
指令格式1(根据类型查找):find 路径 类型选项 选项值
(1)路径参数用于给find命令指定查找范围;
(2)各个指令格式的选项可混用,此处只是便于表达进行区分;

选项 含义
-name 根据文档名查找
(可进行模糊查询)
-type 根据文档类型查找)
(2)常用文档类型有以下6种:
字符 代表的文件类型
:--: :--:
f 普通文件
d 目录文件
l 链接文件
s Socket文件
p FIFO文件
b或c 设备文件

例1:查找/etc目录下所有sh后缀的文件
[root@ddkk.com ~]# find /etc -name *.sh
/etc/X11/xinit/xinitrc.d/50-systemd-user.sh
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
/etc/profile.d/vte.sh
/etc/profile.d/lang.sh
/etc/profile.d/colorgrep.sh
/etc/profile.d/which2.sh
/etc/profile.d/colorxzgrep.sh
/etc/profile.d/colorls.sh
/etc/profile.d/less.sh
/etc/profile.d/gawk.sh
/etc/profile.d/colorzgrep.sh
/etc/profile.d/ssh-x-forwarding.sh
/etc/profile.d/flatpak.sh
/etc/profile.d/gnome-ssh-askpass.sh
/etc/profile.d/vim.sh
/etc/profile.d/PackageKit.sh
/etc/profile.d/bash_completion.sh
/etc/bash_completion.d/authselect-completion.sh
/etc/dhcp/dhclient.d/chrony.sh
/etc/kernel/postinst.d/51-dracut-rescue-postinst.sh
/etc/smartmontools/smartd_warning.sh

例2:查找/etc/sane.d目录下所有的目录
[root@ddkk.com ~]# find /etc/sane.d -type d
/etc/sane.d
/etc/sane.d/dll.d

指令格式2(根据时间查找):find 路径 时间选项 选项值
(1)返回指定时间段被修改的文档;
(2)时间选项有以下3种:

选项 含义
-mtime 根据文档的mtime时间参数
-atime 根据文档的atime时间参数
-ctime 根据文档的ctime时间参数

(3)若选项值为N,则不同符号代表形式如下:

形式 说明
N 第N天到第N+1天之间被修改的
-N N天之内(包含第N天)被修改的
+N N天之前(不包含第N天)被修改的

例3:当N为4时,其所代表的含义
 

指令格式3(根据用户查找):find 路径 用户选项 选项值
(1)返回与指定用户信息相关的文档;
(2)用户选项有以下6种:

选项 说明
-uid 根据UID查找
-gid 根据GID查找
-user 根据用户名查找
-group 根据用户组名查找
-nouser 查找文当属主不在/etc/passwd文件中的文档
-nogroup 查找文档属组不在/etc/group文件中的文档

例4:查找/var目录中属于mwl用户的文档
[root@ddkk.com ~]# find /var -user mwl
/var/spool/mail/mwl

指令格式4(根据其他查找):find 路径 其他选项 选项值

选项 说明
-perm 根据权限查找
-size 根据文件大小查找
-prune 查找时忽略该指定目录
-newer文档1 ! 文档2 查找表i文件1新,但比文档2旧的文档

例5:先查找/home目录下大于50k的文档,再查找位于50k至100k之间大小的文档
[root@ddkk.com ~]# find /home -size +50k | xargs -n 1 ls -lh
-rw-r--r--. 1 mwl mwl 84K Oct 11 17:48 /home/mwl/.local/share/evolution/addressbook/system/contacts.db
-rw-r-----. 1 mwl mwl 74K Oct 11 17:48 /home/mwl/.local/share/tracker/data/tracker-store.ontology.journal
-rw-r-----. 1 mwl mwl 74K Oct 11 17:48 /home/mwl/.local/share/tracker/data/tracker-store.journal
-rw-r--r--. 1 mwl mwl 1.3M Oct 11 17:55 /home/mwl/.cache/mesa_shader_cache/index
-rw-r--r--. 1 mwl mwl 3.5M Oct 11 17:48 /home/mwl/.cache/tracker/meta.db
-rw-r--r--. 1 mwl mwl 3.5M Oct 11 17:48 /home/mwl/.cache/tracker/meta.db-wal
-rw-r--r--. 1 mwl mwl 353K Oct 11 17:48 /home/mwl/.cache/tracker/ontologies.gvdb
-rw-------. 1 mwl mwl 549K Oct 11 17:48 /home/mwl/.cache/gstreamer-1.0/registry.x86_64.bin
-rw-r--r--. 1 mwl mwl 2.4M Oct 11 17:48 /home/mwl/.cache/gnome-software/appstream/components.xmlb
[root@ddkk.com ~]# find /home -size +50k -size -100k | xargs -n 1 ls -lh
-rw-r--r--. 1 mwl mwl 84K Oct 11 17:48 /home/mwl/.local/share/evolution/addressbook/system/contacts.db
-rw-r-----. 1 mwl mwl 74K Oct 11 17:48 /home/mwl/.local/share/tracker/data/tracker-store.ontology.journal
-rw-r-----. 1 mwl mwl 74K Oct 11 17:48 /home/mwl/.local/share/tracker/data/tracker-store.journal

find、locate和whereis命令相比较:

命令 查找方式
find 遍历文件系统
locate 在数据库中查找
whereis 指定目录中查找