01 Linux 下的文件操作,入门看这篇就够了
声明:本文基于《鸟哥的 Linux 私房菜》 基础学习篇(第四版)书中第五、六章,本博客内容为书中内容总结、提炼。所有命令均取于该书。
一、绝对路径和相对路径
绝对路径:一定是由根目录/
写起,比如:/usr/share/doc
这个目录。
相对路径:不是由/
写起,例如由/usr/share/doc
要到/usr/share/man
下面时,就可以写成:cd ../man
,这就是相对路径的写法,相对路径意指相对于当前工作目录的路径。
建议:能使用绝对路径就使用绝对路径。
二、目录相关操作
首先要知道切换目录的命令是 cd
。其次,几个特殊的目录也要记住:
. 代表当前目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表当前使用者身份的家目录
~account 代表 account 这个使用者的家目录
例如:返回上一层目录命令:cd -
需要注意的是:在所有的目录下面都会存在两个目录,分别是 .
和 ..
,分别代表此层与上层目录的意思。
其次是掌握几个常见处理目录的命令:
cd 切换目录
pwd 显示当前目录
mkdir 建立一个心目录
rmdir 删除一个空目录
2.1 cd
(change directory,切换目录)
cd [绝对路径或相对路径]
;cd ~
或cd
:回到家目录;cd ..
:回到上层目录;cd -
:回到刚刚的目录,也就是回到进现在这个目录之前的目录。
2.2 pwd
(显示当前所在的目录)
-
pwd
:单纯的显示当前目录; -
pwd -P
:显示出真正的目录,而非使用链接(link)路径。解释:这个命令不会显示当前目录下的链接类型的文件,即以
l
开头的文件类型,而是会显示此链接指向的真正的文件路径。
2.3 mkdir
(创建目录)
mkdir [-mp] 目录名称
:
选项与参数:
-m
:设置文件的权限,直接设置,不使用默认权限(umask);
-p
:帮助你直接将所需要的目录(包含上一级目录)递归创建。
使用案例:
-
权限的:
mkdir -m 777 demo
,使用改命令创建出来的demo
文件夹的权限就是drwxrwxrwx
。[root@localhost a]# ls [root@localhost a]# mkdir -m 777 demo [root@localhost a]# ls demo [root@localhost a]# ls -al total 0 drwxr-xr-x. 3 root root 18 Dec 14 15:04 . drwxr-xr-x. 3 root root 48 Dec 14 14:55 .. drwxrwxrwx. 2 root root 6 Dec 14 15:04 demo [root@localhost a]#
分析:这个目录的权限是:
drwxrwxrwx
,其中第一个字母 d 的意思表名这是个目录,后面的九个字符可以看做是三组rwx,三组对应二进制的数字就是000 000 000
,每组可表示的十进制数据就是0,1,2,4,5,6,7
。不同的数字就可以表示不同位置上是有值得。777 即代表三个值都有。假如是712则代表是drwx--x-w-
。 -
假如直接使用
mkdir a/b/c
,创建a、b、c这个目录是创建不了的。需要使用mkdir -p a/b/c
才可以。
2.4 rmdir
(删除空目录)
rmdir [-p] 目录名称
:
选项和参数:
-p
:连同上层空的目录也一起删除。
三、文件与目录管理
3.1 ls
(文件与目录的查看)
ls [-aAdfFhilnrRSt] 文件名或目录名称
ls [--color={never,auto,always}] 文件名或目录名称
ls [--full-time]
选项与参数:
-a
:全部的文件,连同隐藏文件(开头为.
的文件)一起列出来(常用);
-A
:全部的文件,连同隐藏文件,但不包括.
,..
两个目录;
-d
:仅列出目录本身,文而不是列出目录内的文件数据(常用);
-f
:直接列出结果,而不进行排序(ls
默认会以文件名称排序);
-F
:根据文件、目录等信息,给予附加数据结构,例如:* 代表可执行文件;/ 代表目录;= 代表 socket 文件;| 代表 FIFO文件;
-h
:将文件容量以人类较易读的方式(GB、KB等)列出来;
-i
:列出 inode 号码
-l
:详细信息显示,包含文件的属性与权限等数据(常用);
-n
:列出 UID 与GID 而非使用者与用户组的名称;
-r
:将排序结果反向输出,例如:原本文件名由小到大,反向即由大到小;
-R
:连同子级目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S
:以文件容量大小排序,而不是用文件名排序;
-t
:以时间排序,而不是用文件名;
--color-never
:不要依据文件特性给予颜色显示;
--color-always
:显示颜色;
--color-auto
:让系统自动依据设置来判断是否给予颜色设置;
--full-name
:以完整的时间模式(包含年、月、日、时、分)输出;
--time={atime,ctime}
:输出 access 时间或改变权限属性时间(ctime),而非内容修改时间(modification time)。
ls
的参数那么多,常用的也就那么几个。需要注意的一个地方是:有一些发行版,直接将ls -l
简化成ll
。
3.2 cp
(copy 复制)
cp [-adfilprsu] 源文件(source) 目标文件(destination)
cp [options] 源文件1 源文件2 源文件3... 目标目录
选项与参数:
-a
:相当于 -dr --preserve=all
的意思(常用);
-d
:若源文件为连接we年的属性(link file),则复制连接文件属性而非文件本身;
-f
:为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次;
-i
:若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行(常用);
-l
:进行硬链接(hard link)的链接文件建立,而非复制文件本身;
-p
:连同文件的属性(权限、用户、时间)一起复制偶去,而非使用默认属性(备份常用);
-r
:递归复制,用于目录的复制操作(常用);
-s
:复制成为符号链接文件(symbolic link),亦即“快捷方式”文件;
-u
:destination 比 source 旧 才更新 destination,或 destination 不存在的情况下才复制;
--preserve=all
:除了 -p
的权限相关参数外,还加入 SELinux 的属性,links、xattr 等也复制;
最后要注意的是,如果源文件有两个以上,则最后一个目标文件一定要是“目录”才行。
即:
cp [options] 源文件1 源文件2 源文件3... 目标目录
3.3 rm
(删除文件或目录)
rm [-fir] 文件或目录
选项好参数:
-f
:force 的意思,忽略不存在的文件,不会出现警告信息;
i
:交互模式,在删除前会询问使用者是否操作;
r
:递归删除,最常用于目录的删除,这是很危险的选项。
3.4 mv
(移动文件与目录,或重命名)
mv [fiu] source destination
mv [options] source1 source2 source3... directory
选项和参数:
-f
:force 强制的意思,若目标文件已经存在,不会询问直接覆盖;
-i
:若目标文件存在,会询问;
-u
:若目标文件已存在,且 source 比较新,再回更新。
四、获取路径的文件名和目录名称
每个文件的完整文件名包含了前面的目录与最终的文件名,而每个文件名的长度考科一到达 255 个字符。我们通过反斜线(/)来辨别哪个是文件名哪个是目录名。
其实获取文件名或是目录名称,一般的用途实在程序里进行判断使用。
[root@localhost ~]# basename /etc/sysconfig/network # 获取文件名称
network
[root@localhost ~]# dirname /etc/sysconfig/network # 获取文件的目录
/etc/sysconfig
五、文件内容的查看
命令主要分四种:
直接查看一个文件的内容:
cat
、tac
、nl
;可一翻页查看文件的内容:
more
、less
;数据截取:
head
、tail
;非纯文本文件:
od
。
5.1 cat
(concatenate 直接查看)
cat [-AbEnTv]
选项与参数:
-A
:相当于 -vET
的整合选项,可列出一些特殊字符而不是空白而已;
-b
:列出行号,空白行不标行号;
-E
:将结尾的换行符 $ 显示出来;
-n
:打出行号,空白行也打印行号;
-T
:将 [Tab]按键以 ^I
显示出来;
-v
:列出一些看不出来的特殊字符。
5.2 tac
(反向列示)
这个可以顾名思义了,该名效果与cat
相反。-_-
5.3 nl
(添加行号打印)
nl [-bnw] 文件
5.4 more
(一页一页翻动)
当使用more 文件名
时,有以下几个按键可以使用:
- 空格键(space):向下翻页;
- Enter:向下翻一行;
- /字符串:在显示的内容当中,向下查找字符串这个关键词;
- :f:立刻显示出文件名以及目前显示的行数;
- q:立刻离开 more;
- b 或 Ctrl + b:代表往回翻页。
5.5 less
(一页一页翻动)
- 空格键:向下翻页;
- [pagedown]:向下翻页;
- [pageup]:向上翻页;
- /字符串:向下查找字符串;
- ?字符串:向上查找字符串;
- n:重复前一个查找;
- N:反向重复前一个查找;
- g:前进道这个数据的第一行;
- G:前进到这个数据的最后一行;
- q:离开 less
man page
就是调用less
来显示说明文件的内容。
5.6 head
(数据截取,取出前几行)
head [-n number] 文件
选项与参数:
-n
:后面接数据,代表显示几行的意思
5.7 tail
(数据截取,取出后面几行)
tail [-n number] 文件
选项与参数:
-n
:后面接数据,代表显示几行的意思;
-f
:标识将持续刷新后面所接文件的内容,知道按下 Ctrl + c 退出。适合于实时查看日志文件的时候。
5.8 od
(非纯文本文件)
例如 /usr/bin/passwd
这个执行文件的内容时,又该如何去读出信息呢?就是od
。
六、文件的创建或修改文件时间
6.1 touch
touch [-acdmt] 文件
选项与参数:
-a
:仅自定义 access time;
-c
:仅修改文件的时间,文件不存在时不建立新文件;
-d
:后面可以接想自定义的日期,不一定是当日期,也可以使用--date=日期或时间
;
-m
:仅修改 mtime;
-t
:后面可以接想自定义的时间而不用非要是当前的时间,格式为{YYYYMMDDhhmm}。
七、命令与文件的查找
7.1 which
(脚本文件的查找)
which [-a] 命令
选项与参数:
-a
:将所有 PATH 目录下中可以找到的命令均解除,而不止第一个被找到的命令。
7.2 whereis
(文件的查找)
whereis [-lbmsu] 文件名或目录名
选项与参数:
-l
:会去查找几个主要目录;
-b
:只找 binary(二进制)文件;
-m
:只找在说明文件 manual 路径下的文件;
-s
:只找 source 源文件;
-u
:查找不在三个项目当中的其他特殊文件。
7.3 locate / updatedb
locate [-iclSr] keyword
选项与参数:
i
:忽略大小写差异;
c
:不输出文件名,显示文件数量;
l
:仅输出几行的意思,例如输出 5 行:-l 5;
S
:输出 locate
所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等;
r
:后面可能接正则表达式的显示方式。
注意:使用
locate
查找数据特别快,这是因为locate
寻找的数据是由已创建的数据库/var/lib/mlocate
里面的数据所查到的。所以不直接去硬盘里读取数据,就当然很快了。那么使用
locate
有啥限制呢? 因为它是从数据库查找的,而数据库的建立默认是每天执行一次(每个 Linux 发行版可能不一样,CentOS 7.x 是每天更新一次数据库)。所以当你建立起来的文件,却在数据库更新之前查找该文件,那么locate
会告诉你找不到滴。当然也可以设置手动更新数据库。直接输入【updatedb】就可以。这个命令回去读取
/etc/updatedb.conf
这个配置文件的设置,然后再去硬盘里面进行查找文件名的操作,最后就更新到整个数据库文件。因为updatedb
会去查找硬盘,索引当你执行该命令时,可能会等待数分钟时间。
- updatedb:根据
/etc/updatedb,conf
的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate
内的数据库文件; - locate:根据
/var/lib/mlocate
内的数据库记录,找出用户所输入关键词的文件名。
7.4 find
find [PATH] [option] [action]
选项与参数:
1、与时间有关的选项:共有 -atime、-ctime 与 -mtime,以 -mtime 为例:
-mtime n:n 为数字,意义为在 n 天之前的【一天之内】被修改过内容的文件;
-mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过内容的文件;
-mtime -n:列出在 n 天之内(包含 n 天本身)被修改过内容的文件;
-newer file:file为一个存在的文件,列出 file 还要新的文件。
八、文件与目录先关权限
暂略。