本篇主要讲述:

文件目录操作指令(mkdir,cp...);

basename与dirname;

文件与目录的默认权限与隐藏权限;

文件的搜寻指令(which,whereis,find);

文件内的过滤grep;

1、目录和文件管理

1.1 查看及切换目录

查看当前目录:pwd(print working directory)

切换工作目录:cd(change directory)

.代表当前目录

..代表上级目录

1.2 使用通配符

针对不确定的文档名称,以特殊字符表示

(1)*:任意多个任意字符

[root@A /]# ls  /etc/*tab

[root@A /]# ls  /etc/*.conf

[root@A /]# ls  /boot/vm*

(2)?:单个字符

[root@A /]# ls  /dev/tty?

[root@A /]# ls  /dev/tty??

[root@A /]# ls  /dev/tty???

(3)[a-z]:多个字符或连续范围中的一个,若无则忽略

[root@A /]# ls /dev/tty[3-8]

(4){a,min,xy}:多组不同的字符串,全匹配

[root@A /]# ls /dev/tty{1,3,5,7,9,S0,30,haha}

[root@A /]# ls /dev/tty{10,20,30,S1}

[root@A /]# ls /dev/tty{S2,S3}

请列出  /dev/tty20至/dev/tty30

[root@A /]# ls /dev/tty{2[0-9],30}

1.3 目录及文件操作

(1) 创建目录

mkdir(make directory)

[root@server0 ~]# mkdir -p /vod/movie/cartoon     #-p表示连父目录一起创建

删除空文件夹:rmdir

(2) cp 复制

格式:cp [选项]...  原文件...       目标路径

常用命令选项

-a: 相当于 -dr 

-d: 若来源文件为链接文件的属性,复制链接文件属性而并非文件本身;

-f:为强制(force) 的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;

-i:若目标文件(destination) 已经存在时,在覆盖时会先询问动作的进行(常用)

-l:进行硬式链接(hard link) 的链接文件创建,而非复制文件本身;

-p:连同文件的属性(权限、用户、时间)一起复制过去而非使用默认属性(备份常用) ;

-r:递回持续复制,用于目录的复制行为;(常用)

-s:复制成为符号链接文件 (symbolic link) ,亦即“捷径”文件;

-u:update

[root@A /]# cp /etc/passwd /opt/

[root@A /]# cp /boot/vm*  /opt/

[root@A /]# cp -r /boot/ /opt/

[root@A /]# cp -r /etc/shadow /mnt/  /opt/

 

[root@A /]# \cp -r /boot/ /opt/          #覆盖文件时,如果目标位置已经存在该文件,系统会询问我们是否覆盖,需要输入y来确认,加入\存在时就不用询问直接操作

[root@server0 ~]# firewall-config    #防火墙的图形程序 

(3)  删除

rm — Remove

格式:rm [选项]... 文件或目录...

常用命令选项

-r、-f:递归删除(含目录)、强制删除

-i 删除前询问 

[root@A /]# touch /opt/1.txt

[root@A /]# mkdir /opt/abc

[root@A /]# ls /opt/

1.txt  abc

[root@A /]# rm  -rf /opt/*

[root@A /]# ls /opt/

(4) mv 移动/改名

mv — Move

– 格式: mv  [选项]...  原文件...    目标路径

[root@A /]# mkdir /opt/nsd01

[root@A /]# touch /opt/1.txt

[root@A /]# ls /opt/

1.txt  nsd01

[root@A /]# mv /opt/1.txt  /opt/nsd01

[root@A /]# ls /opt/

nsd01

[root@A /]# ls /opt/nsd01

重命名:路径不变的移动

[root@A /]# mv /opt/test  /opt/haha

#/test另起文件名/haha

(5) 创建空文件

touch命令

1.4 取得路径的文件与目录名称

basename与dirname

image.png

1.5 文件内容的查阅

cat 由第一行开始显示文件内容

tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
od 以二进制的方式读取文件内容!

1.6 文件与目录的默认权限与隐藏权限

在3、linux文件权限和目录权限中提到过

(1) 文件的默认权限  umask

image.png

第一个数字特殊权限使用的

后三个数字为默认值需要减掉的权限(r:4 w:2 x:1)

因为 umask 为 022 ,所以 user 并没有被拿掉任何权限,不过 group 与 others 的权限被拿掉了 2 (也就是 w 这个权限)

该默认值得设置参考/etc/bashrc文件,建议不要修改此文件

(2) 文件的隐藏属性

---使用chattr设置文件隐藏属性

chattr 选项 参数 目录或文件

选项:

+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设置一定,且仅有后面接的参数

参数:

A :当设置了 A 这个属性时,若你有存取此文件(或目录) 时,他的存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)

S :一般文件是非同步写入磁盘的(原理请参考[前一章sync](../Text/index.html#sync)的说明) ,如果加上 S 这个属性时,当你进行任何文件的修改,该更动会“同步”写入磁盘中。
a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录) 不会被 dump 备份
i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”对于系统安全性有相当大的助益!只有 root 能设置此属性
s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!
u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!
注意1:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为 root 才能设置
注意2:xfs 文件系统仅支持 AadiS 而已

---使用lsattr 显示文件的隐藏属性

-a :将隐藏文件的属性也显示出来;

-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!

(3) 观察文件的类型

文件是ASCII或者是data文件或者是binary(二进制文件)?

使用file命令

1.7 文件的搜寻指令

(1) which 查找指令的可执行文件路径

which [-a] 命令

 -a  查找所有PATH路径下的

image.png

(2) whereis 特定目录下寻找文件名

image.png

(3) find

---常见用法

根据预设的条件递归查找对应的文件

find   [目录]    [条件1]

常用条件表示:

-type 类型(f 文件、d 目录、l 快捷方式)

-name "文档名称"

-size +|-文件大小(k、M、G)

-user 用户名

[root@server0 ~]# find /etc/ -name "*.conf"

[root@server0 ~]# find /etc/ -name "passwd"

[root@server0 ~]# find /boot  -type d

[root@server0 ~]# find /boot  -type l

[root@server0 ~]# find /boot  -type f

[root@server0 ~]# find  /root/  -name  "nsd*"

[root@server0 ~]# find  /root/  -name  "nsd*"   -type f

[root@server0 ~]# find  /root/  -name  "nsd*"   -type d

[root@server0 ~]# find /boot/ -size +20M  #查找20M以上的文件

[root@server0 ~]# ls -lh /boot/initramfs-*

[root@server0 ~]# find /boot/ -size -20M

 

[root@server0 ~]# useradd lisi

[root@server0 ~]# useradd zhangsan

[root@server0 ~]# ls -l /home/

[root@server0 ~]# find  /home -user zhangsan

[root@server0 ~]# find  /home -user lisi

[root@server0 ~]# find  /  -user lisi

 

与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明

-mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身) 被更动过内容的文件文件名;
-mtime -n :列出在 n 天之内(含 n 天本身) 被更动过内容的文件文件名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

---find结果处理

# rm -rf /opt/*

# find /boot/ -size +10M

# find /boot/ -size +10M  -exec cp {}  /opt \; #找到的结果复制到/opt下

# ls /opt/

# mkdir /root/findfiles

# find / -user lisi -type f  -exec cp {} /root/findfiles   \;

# ls -A /root/findfiles/

1.8 grep

根据字符串模式提取文本行

grep  [选项]   '匹配字符串'    文本文件...

常用命令选项

-v,取反匹配

-i,忽略大小写

[root@server0 ~]# grep 'root'  /etc/passwd

[root@server0 ~]# grep -v 'root'  /etc/passwd

[root@server0 ~]# grep 'ROOT'  /etc/passwd

[root@server0 ~]# grep -i 'ROOT'  /etc/passwd

[root@server0 ~]# grep 'seismic' /usr/share/dict/words

# grep 'seismic' /usr/share/dict/words > /root/wordlist #找出来相匹配的并导出

# cat   /root/wordlist

^word  以字符串word开头

word$  以字符串word结尾

[root@server0 ~]# grep '^root' /etc/passwd

[root@server0 ~]# grep 'root$' /etc/passwd

[root@server0 ~]# grep 'bash$' /etc/passwd

匹配空行

[root@server0 ~]# grep -v  '^$'  /etc/default/useradd