第7章 Linux文件与目录管理

Posted 且听风吟-wuchao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第7章 Linux文件与目录管理相关的知识,希望对你有一定的参考价值。

目录与路径

特殊目录

.:此层目录

..:上层目录

~:目前用户身份所在的主文件夹

~account:account用户所在的主文件夹

 处理目录的命令

cd:切换目录

change directory的缩写

pwd:显示目前所在目录

-P:显示当前路径,而非连接路径

mkdir:新建新目录

-m:配置文件的权限,而非使用默认权限(umask)

-p:递归创建

mkdir创建目录时,要求存在父目录,否则报错,因此可以使用-p参数,此时父目录不存在时会创建父目录

rmdir:删除空的目录

-p:连同上层空目录一起删除

执行文件路径的变量:$PATH

通过指令echo $PATH可以查看变量PATH中设置的目录:

[[email protected] 桌面]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin

文件与目录管理

查看文件与目录:ls

-a:全部文件,包括隐藏文件(.开头的文件)

-d:仅列出目录本身,而不列出目录内的文件数据

-l:列出长数据串,包括属性和权限

复制、删除和移动:cp,rm,mv

cp:复制文件或目录

cp [options] source1 source2 .. directory

-a:相当于-pdr

-d:若源文件为连接文件的属性,则复制连接文件的属性而非文件本身

-i:若目标文件存在,则覆盖时先询问操作

-l:进行硬连接的连接文件创建,而非复制文件本身

-p:连同文件的属性一同复制,而不用默认属性(备份)

-r:递归连续复制(用于目录的复制)

-s:复制成为符号连接文件,即快捷方式

不同身份执行cp,区别很大

举例:

转到tmp目录,执行:

[[email protected] ~]# cd /tmp
[[email protected] tmp]# cp /var/log/wtmp .
将/var/log/wtmp复制到当前文件夹,查看源文件和目标文件的属性:

[[email protected] tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 63744 6月  28 11:17 /var/log/wtmp
-rw-r--r--. 1 root root 63744 6月  28 12:28 wtmp
以上可以看出,源文件和目标文件的权限和修改时间都变了

 

若要复制的文件和源文件一模一样,可以使用-a参数:

[[email protected] tmp]# cp -ai /var/log/wtmp .
cp: overwrite ‘./wtmp’? y
[[email protected] tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 63744 6月  28 11:17 /var/log/wtmp
-rw-rw-r--. 1 root utmp 63744 6月  28 11:17 wtmp
以上可以看出,两个文件一模一样。

rm:移除文件或目录

-f:强制,忽略不存在的文件

-i:互动模式,删前询问

-r:递归删除

mv:移动目录或更名

-f:强制,若目标存在,直接覆盖而不询问

-i:目标存在,则询问

-u:目标存在且较新才覆盖

rename:重命名

rename   被替换的字符串   被替换成的字符串   匹配要替换的文件模式

举例:

创建四个文件:foo1,foo2,foo11,foo12

[[email protected] tmp]# touch foo1 foo2 foo11 foo12
[[email protected] tmp]# ls -a foo*
foo1  foo11  foo12  foo2


使用rename更改文件名:

[[email protected] tmp]# rename foo foo0 foo?
[[email protected] tmp]# ls -a foo*
foo01  foo02  foo11  foo12
“foo?”表示匹配以foo开头的后面仅有一个字符的文件名,并将这些文件的文件名中的foo替换成foo0

 

相似地,有以下:

[[email protected] tmp]# ls -a foo*
foo1  foo11  foo12  foo2
[[email protected] tmp]# rename foo foo0 foo??
[[email protected] tmp]# ls -a foo*
foo011  foo012  foo1  foo2

以及:

[[email protected] tmp]# ls -a foo*
foo1  foo11  foo12  foo2
[[email protected] tmp]# rename foo foo0 foo*
[[email protected] tmp]# ls -a foo*
foo01  foo011  foo012  foo02

文件内容查阅

cat:由第一行显示文件内容

[[email protected] ~]# cat -n /etc/issue
     1    \S
     2    Kernel \r on an \m
     3    

tac:从最后一行显示文件内容

[[email protected] ~]# tac /etc/issue

Kernel \r on an \m
\S

nl:显示的时候,顺便输出行号

[[email protected] ~]# nl /etc/issue
     1    \S
     2    Kernel \r on an \m

仅仅显示非空行,若要显示空行,添加 -b a参数

more:一页一页的显示

只能向后翻动

less:与more相似,可以翻页

可以向前翻页,也可以向后翻页

空格:向下翻页

PageDown:下翻一页

PageUp:上翻一页

/字符串:向下查询字符串

?字符串:向上查询字符串

n:重复前一个查询

N:反向重复前一个查询

q:退出

head:只看头几行

-n number:当number为正数时,表示取前面number行显示,当number为负数时,表示取前几行,直到number行(不包括)

tail:只看结尾几行

-n number: 表示取最后number行显示,当number表示为+number时,表示从number行开始显示

-f:检测文件,当有数据写入就会显示出来,直到ctr+c退出该指令

od:以二进制的方式读取文件内容

 

当文件是非文本时,使用该指令

-t type:type如下:

a:默认类的字符输出

c:ascii字符输出

d[size]:利用十进制输出数据,每个整数占用size bytes

f[size]:利用浮点数输出数据,每个整数占用size bytes

o[size]:利用八进制输出数据,每个整数占用size bytes

x[size]:利用十六进制输出数据,每个整数占用size bytes

修改文件时间或创建新文件:touch

首先先了解文件的三个参数:

modification time(mtime):当文件内容改变,更新这个时间

status time(ctime):当文件状态(比如权限和属性)改变,更新该时间

access time(atime):文件的内容被取用时,更新这个时间

举例如下:

//创建新文件
[[email protected] ~]# touch /tmp/test.txt
//查看最后读取时间 [[email protected]
~]# ls -l --time=atime /tmp/test.txt -rw-r--r--. 1 root root 0 6月 28 19:22 /tmp/test.txt
//查看最后状态更改时间 [[email protected]
~]# ls -l --time=ctime /tmp/test.txt -rw-r--r--. 1 root root 0 6月 28 19:22 /tmp/test.txt [[email protected] ~]#
//读取文件 [[email protected]
~]# cat /tmp/test.txt
//查看最后读取时间 [[email protected]
~]# ls -l --time=atime /tmp/test.txt -rw-r--r--. 1 root root 0 6月 28 19:23 /tmp/test.txt [[email protected] ~]#
//更改文件权限 [[email protected]
~]# chmod u=rwx,go=r /tmp/test.txt
//查看最后状态更改时间 [[email protected]
~]# ls -l --time=ctime /tmp/test.txt -rwxr--r--. 1 root root 0 6月 28 19:23 /tmp/test.txt

touch [-acdmt] 文件

-a:仅修改访问时间atime

-c:仅修改文件的时间,文件不存在不创建新的

-t:后面可以接想要修改的日期,格式为 YYYYMMDDhhmm

-m:仅修改mtime

 举例:

[[email protected] ~]# touch  -t 201302031103 /tmp/test.txt
[[email protected] ~]# ls -l /tmp/test.txt
-rwxr--r--. 1 root root 0 2月   3 2013 /tmp/test.txt

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

文件默认权限:umask

首先创建文件或目录时,有如下默认权限:

创建文件:-rw-rw-rw-          文件默认记录数据的,故默认是没有执行权限的

创建目录:drwxrwxrwx

接着用刚刚创建的文件或目录的默认权限减去umask的权限,查看umask:

[[email protected] ~]# umask
0022

第一个数字表示是特殊权限,后三个数字表示用户、用户组和其他人的权限:022表示--- -w- -w-

减去该权限得:

创建文件:-rw-rw-rw-   减   ---- -w- -w-   =    -rw- -r- -r--

创建目录:drwxrwxrwx  减  ---- -w- -w-   =   drwx r-x r-x

更改umask值

[[email protected] ~]# umask 0022

文件隐藏属性

chattr:设置文件的隐藏属性

chattr [+-=] [ASacdistu] 文件或目录名

参数:

+:增加某一个特殊参数,其他原本参数不动

-:删除某一个特殊参数,其他原本参数不动

=:仅有后面的参数

 

A:访问文件或目录时,不改变atime属性

S:文件的修改同步写入磁盘(默认异步写入)

a:这个文件只能增加数据,不能删除和修改数据,root才能设置该属性

c:自动压缩文件,读取时自动解压缩

i:让文件不能被删除、改名、写入和添加数据

s:文件删除后,完全从硬盘空间删除

u:文件删除后还可以找回

举例:

[[email protected] tmp]# touch attrtest
//添加i属性 [[email protected] tmp]#
chattr +i attrtest
//尝试删除该文件 [[email protected] tmp]#
rm attrtest rm: remove regular empty file ‘attrtest’? y
//即使root也无法删除该文件
rm: cannot remove ‘attrtest’: Operation not permitted
//移除i属性 [[email protected] tmp]#
chattr -i attrtest [[email protected] tmp]# rm attrtest rm: remove regular empty file ‘attrtest’? y

lsattr:显示文件隐藏属性

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

-d:如果时目录,仅列出目录本身的属性而非目录内的文件名

-R:连同子目录的数据也列出来

文件的特殊权限:SUID,SGID,SBIT

SUID

当s出现在文件所有者的x权限上,称为Set UID,简称SUID的特殊权限。具有以下功能:

  • SUID仅对二进制程序有效
  • 执行者对于该程序具有x的权限
  • 本权限仅在执行该程序的过程有效
  • 执行者将具有该程序所有者的权限

举例:

所有账户密码都存在/etc/shadow内,该文件仅有root可读且仅有root可以强制写入,但普通用户却可以通过passwd指令更改自己的用户密码,这是为什么?

  1. wuchao用户对于/usr/bin/passwd这个程序具有x权限,即可以执行passwd,并且具有特殊权限SUID
  2. passwd的拥有着是root
  3. wuchao执行passwd时会暂时获得root的权限
  4. /etc/shadow可以被passwd所更改

因此,一般用户可以修改自己在shadow内的密码,尽管用户对该文件没有访问权限。

SGID

当s出现在用户组的x上,称为Set GID,SGID

对于文件而言:

  1. SGID对二进制程序有用
  2. 程序执行者对于该程序来说,需具备x属性
  3. 执行者在执行的过程中将会获得该程序用户组的支持

对目录而言:

  1. 用户若对此目录具有r和x的权限,该用户能够进入此目录
  2. 用户在此目录下的有效用户组将会变为该目录的用户组
  3. 若用户在此目录下具有w的权限,则用户所创建的新文件的用户组与此目录的用户组相同

SBIT

Sticky Bit,第三组的x权限变为t。只针对目录有效。

    1. 当用户对于此目录具有w,x权限,即具有写入的权限时
    2. 当用户在该目录创建文件或目录时,仅有自己与root才有权力删除该文件

 举例:

用户甲对于A目录具有用户组或其他人身份,并且对于该目录具有w权限,这表示用户甲对该目录内任何其他人创建的文件都可以删除、重命名和移动。如果将目录A设置SBIT权限,则用户甲只能对自己创建的文件和哦目录进行删除、重命名和移动操作。

设置特殊权限

4表示SUID

2表示SGID

1表所SBIT

chmod 4755 filename 表示文件权限为:-rwsr-xr-x

查看文件类型

file filename

命令与文件的查询

脚本文件名的查询

which(寻找执行文件)

which [-a] command

-a:列出所有有PATH目录中可以找到的命令

[[email protected] tmp]$ which ifconfig
/usr/sbin/ifconfig
[[email protected] tmp]$ which cd
/usr/bin/cd

注意:which是根据PATH变量来寻找执行文件的

 文件名的查找

whereis(寻找特定文件)

whereis [-bmsu] 文件名或目录名

-b:二进制文件

-m:只找在说明文件manual路径下的文件

-s:只找source源文件

-u:查找上述三项以外的其他文件

locate

locate 文件名

注意:whereis和locate查找的是系统数据库,故速度很快,但系统数据库每天更新一次,因此和实际硬盘可能不同步。需要输入updatedb指令更新数据库。

find

find   [PATH]   [option]   [action]

参数:

1.与时间有关的参数

-mtime,-ctime,-atime

以-mtime为例:

-mtime n:表示在n天之前的一天内被更改过的文件

-mtime +n:列出在n天之前(不含)被更改过的文件

-mtime -n:列出在n天之内(含)被更改过的文件

-newer file:列出比file还新的文件

2.与用户和用户组有关的参数

-uid n:n为数字,为用户的ID,存放在/etc/passwd内

-gid n:n为数字,为用户组的ID,存放在/etc/group内

-user  name:用户账户名

-group name:用户组名

-nouser:寻找文件所有者不存在/etc/passwd的文件

-nogroup:寻找文件的所有用户组不存在/etc/group的文件

 举例:

[[email protected] 桌面]# find /home -user wuchao
/home
/home/wuchao
/home/wuchao/.mozilla
/home/wuchao/.mozilla/extensions
/home/wuchao/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
...省略

3.与文件权限和名称有关的

-name filename:查找文件名为filename的文件

-size [+-] SIZE:查找比SIZE还要大(+)或还要小(-)的文件。SIZE规格:c表所byte,k表示1024bytes。比50k大表示为-size + 50

-type TYPE:查找文件类型为TYPE的,类型有:一般正规文件(f),设备文件(b,c),目录(d),连接文件(l),socket(s),FIFO(f)

-perm mode:查找文件权限刚好等于mode 的文件,比如4755

-perm -mode:查找文件权限必须包括mode 的文件

-perm +mode:查找文件权限包含任一mode 的文件

4.其他可进行的操作

-exec  command:用command指令来处理查找到的结果

-print:将结果打印(默认)


 

以上是关于第7章 Linux文件与目录管理的主要内容,如果未能解决你的问题,请参考以下文章

全国计算机等级考试三级Linux应用与开发技术考试-习题汇总

鸟哥的linux私房菜 哪些内容要看

Linux学习教程,Linux入门教程(超详细)| 网址推荐

全国计算机等级三级Linux应用与开发技术考试-第7章-进程管理-练习题

Linux学习笔记第3章 用户和组管理

全国计算机等级三级Linux应用与开发技术考试-第6章-文件管理-练习题