《鸟哥的linux私房菜》学习笔记(第七章 Linux文件与目录管理)

第七章 Linux文件与目录管理

1 目录的相关操作

(1)

.代表此层目录
..代表上一层目录
-代表前一个工作目录
~代表“目前用户身份”所在的主文件夹
~accout代表accout这个用户的主文件夹(accout是个账号名称)
①所有目录下都会存在的两个目录,分别是...
②根目录下也有...两个目录,不过根目录的上一层目录(..)与根目录自己(.)是同一个目录

(2)cd 切换目录

(3)pwd 显示当前所在的目录

pwd -P 显示实际的工作目录,而非连接文件本身的目录名
例:cd /var/mail , /var/mail 是一个连接文件
pwd -P
显示结果为:/var/spool/mail
ls -ld /var/mail
显示结果为:lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail

(4)mkdir 创建新目录

① mkdir -m 配置文件案的权限,直接设置,不需要看默认权限(umask)
例:新建权限为rwx–x--x的目录:mkdir -m 711 test2
② mkdir -p 直接将所需的目录(包含上层目录)递归创建
例:mkdir test1/test2/test3 会报错,没有办法直接创建,但是使用mkdir -p test1/test2/test3 可以自行创建多层目录。

(5)rmdir 删除空的目录

rmdir -p 连同上层“空的”目录一起删除
rmdir test1
rmdir -p test1/test2/test3 连同test1,test2一起删除

(6)$PATH 关于执行文件路径的变量

当我们在执行一个命令的时候,例如ls,系统会根据PATH的设置去每个PATH定义的目录下查询文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查询到的同名命令先被执行。
①echo $PATH 列出执行命令时,系统的查询路径
②当执行一个命令报错提示无此命令时,可以通过绝对路径执行此命令,例如/sbin/ifconfig eth0
③将某一目录加入PATH中

PATH="$PATH":/root

2 文件的相关操作

(1)ls 查看文件与目录

-a:全部的文件,连同隐藏文件(开通为.的文件)一起列出来
-d:仅列出目录本身,而不是列出目录内的文件数据(❓❓❓什么意思)
-h:将文件容量以易读方式列出来(例如GB、KB等)
-l:列出长数据串,包含文件的属性和权限等数据
-r:将排序结果反像输出
-t:依时间排序

(2)cp 复制文件或者目录

-a:相当于-pdr的意思(❓❓❓什么意思)
-i:若目标文件已经存在,在覆盖时会先询问操作的进行
-f:强制,若目标文件已经存在且无法开启(❓❓❓无法开启是啥意思),则删除后再尝试一次
-r:递归持续复制,用于目录的复制行为
-l:硬链接
-s:软链接,相当于建立了一个快捷方式
-d:复制链接文件的属性,相当于根据一个快捷方式又创建了一个快捷方式
①在默认条件中,cp的源文件与目的文件的权限时不同的,目的文件的所有者通常会是命令操作者本身。
②-r可以复制目录,但是文件与目录的权限可能会被改变,所以在备份的时候,为了不改变权限,可以使用-a命令
③将多个数据一次复制到同一个目录去,最后一个参数一定是目录,例如:cp ~/test1.php ~/test2.php /temp
例题:
《鸟哥的linux私房菜》学习笔记(第七章 Linux文件与目录管理)_第1张图片
只有管理员root才可以更改文件的所有者,即使是文件的所有者也不可以改变文件的所有者。所以vbird不能将拷贝后的文件修改所有者和用户组为root。

(3)rm 移除文件或目录

-i:互动模式,删除前询问
-r:递归删除
-f:强制删除

(4)mv 移动文件与目录,或更名

mv [-fui] source destination
mv [options] source1 source2 source3 ……directory
-u:若目标文件已经存在,且source比较新,才会更新(update)
mv的另一个用途就是“更改文件名”
在linux中rename也可以用来更改文件名。

(5)basename dirname 获取路径的文件名与目录名称

basename /etc/sycconfig/network
结果为network
dirname /etc/sycconfig/network
结果为/etc/sycconfig

3 文件内容查阅相关操作

(1)cat

cat [-AbEnTv]
-b:列出行号,仅针对非空白行做行号显示,空白行不标行号
-n:打印出行号,连同空白行也有行号显示
-v:列出一些看不出来的特殊字符

(2)tac 反向打印

由最后一行到第一行反向在屏幕上显示出来

(3)nl 添加行号打印

-b a:表示无论是否为空行,也同样列出行号(类似cat -n)
-b t:如果有空行,空的哪一行不要列出行号(默认值)
-n ln:行号在屏幕的最左方展示
-n rn:行号在屏幕的最右方展示,且不加0
-n rz:行号在屏幕的最右方展示,且加0
-w:行号字段占用的位数

(4)more less 一页一页翻动

more只能向下翻页(按动空格键)
less可以上下翻页
在less模式中:
/字符串:向下查询“字符串”
?字符串:向上查询“字符串”
n:重复前一个查询(与/或者?有关)
N:方向重复前一个查询(与/或者?有关)
q:离开less模式

(5)head 取出前面几行

head -n 10 test.php 取出前十行
head -n -100 test.php 取出前面的所有行数,但不包含后面100行,如文件有141行,则只展示前41行,后100行不展示

(6)tail 取出后面几行

tail -n 1 test.php 取出test前1行
tail -n +100 test.php 取出第100行以后的内容

例:取出文件的第11行到第20行
head -n 20 test.php| tail -n 10
先取出第1行到第20行,再取出倒数10行,也就是第11行到第20行

(6)mtime ctime atime

mtime:文件内容更新时间,ls -l 默认查看的是文件的ctime
ctime:文件状态更新时间,如修改了权限或者属性等,ls -l --time=ctime filename 查看文件的ctime
atime:文件内容被取用的时间,如使用cat命令读取文件内容,ls -l --time=atime filename 查看文件的atime

(7)touch 修改文件时间或者创建新文件

-a:仅修改访问时间atime
-m:仅修改mtime
-c:仅修改文件的时间,若文件不存在则不创建新文件
-d:后面可以接与修改的日期而不用目前的时间,也可以用–date=“日期或时间”
-t:后面可以接与修改的日期而不用目前的时间,格式为[YYMMDDhhmm]
例:touch -d “2 days ago” filename 文件的mtime和atime被修改为两天前,ctime为当前时间。
例:touch -t 0709150202 filename 文件的mtime和atime被修改为2007/09/15 2:02,ctime则是记录当前的时间
①如果touch后面接文件,则文件的三个时间都会被更新为目前的时间,若文件不存在,则会主动创建一个新的文件
②复制一个文件时,复制了所有属性,但也没有办法复制ctime这个属性,ctime可以记录这个文件最近的状态被改变的时间。

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

(1)文件默认权限 umask

  • 获取umask的值:
    umask
    结果显示:0022,先不用管第一位,因此分数为022
    umask -S
    结果显示:u=rwx,g=rx,o=rx
  • 若用户创建“文件”则默认没有可执行权限,即只有r、w两个选项,也就是最大为666,默认权限是-rw-rw-rw-
  • 若用户创建“目录”,则由于x与是否可以进入此目录有关,因此默认所有权限均开放,即为777分,默认权限时drwxrwxrwx
  • umask的分数指的是“该默认值需要减掉的权限”
    新建文件时的默认权限是(rw-rw-rw-)-(----w–w-)=rw-r–r--,即-rw-r–r--
    新建目录时的默认权限是(rwxrwxrwx)-(----w–w-)=rwxr-xr-x,即drwxr-xr-x
  • 设置umask的值
    umask 002
  • 不要用权限分直接进行相减,会出现错误,例如umask=003的情况,直接相减时文件权限为666-003=663,-rw-rw–wx。但是实际是(rw-rw-rw-)-(-------wx)=rw-rw-r–

(2)chattr 设置文件隐藏属性

chattr [-+=] [ASacdistu] 文件或者目录名称
-a:当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才可以设置这个属性
-i:当设置i之后,这个文件不能被删除、改名、设置连接也无法写入或添加数据,对于系统安全性有相当大的帮助,只有root才可以设置这个属性

(3)lsattr 显示文件隐藏属性

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

(4)file 查看文件类型

5 命令与文件的查询

(1)which 寻找“执行文件”

根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。
-a:将所有由PATH目录中可以找到的命令均列出,而不只第一个被列出的命令名称

(2)whereis 查找特定文件

可以根据参数查找二进制文件、说明文件在manual的文件等

(3)locate 模糊查找文件

locate [-ir] keyword
-i:忽略大小写
-r:后面可接正则表达式的显示方式
①Linux系统会将系统内的所有文件都记录在一个数据库文件里面,whereis和locate是从这个数据库文件中查找,而不是去硬盘中查找,所以比find命令更快,但是由于数据库更新有时间限制,所以刚刚创建的文件不会被查到。
②数据库的创建默认是每天执行一次,手动更新数据库命令为updatedb。
③updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件
④locate:依据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名

(4)find

find [PATH] [option] [action]

  • 参数 与时间有关的参数atime、ctime、mtime,以mtime为例
    -mtime n:n天之前的“一天之内”被更改过的文件
    -mtime +n:n天之前(不包含n天本身)被更改过的文件
    -mtime -n:n天之内(含n天本身)被更改过的文件
    -newer file:file是一个存在的文件,列出比file还要新的文件名
    ①find / -mtime 0 0表示当前时间,这个命令找出24小时内改动过的文件
  • 参数 与用户或用户名有关的参数
    -user name:找出用户名为name的用户的文件
    -group name:找出组名为name的组的文件
  • 参数 与文件权限及名称有关的参数
    -name filename:查找文件名为filename的文件
    -size [+ -]SIZE:查找比SIZE还要大(+)或者小(-)的文件,这个SIZE的规格有c:byte,k:1024bytes
    -type TYPE:查找文件的类型为TYPE的,类型主要有:一般正规文件(f)、设备文件(b,c)、目录(d)、连接文件(l)、socket(s)、FIFO(p)等属性。

6 权限与命令间的关系

  • 让用户能进入某目录成为“可工作目录”的基本权限是什么?
    ① 可使用的命令:例如cd等切换工作目录的命令
    ② 目录所需权限:用户对这个目录至少需要具有x的权限
    ③ 额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要r的权限。
  • 用户在某个目录内读取一个文件的基本权限是什么
    ① 可使用的命令:例如cat、more、less等
    ② 目录所需权限:用户对这个目录至少需要具有x权限,才可以进入此目录
    ③ 文件所需权限:用户对文件至少需要具有r的权限才行
  • 让用户可以修改一个文件的基本权限
    ① 可使用的命令:例如vi编辑器
    ② 目录所需权限:用户在该文件所在的目录至少需要具有x权限
    ③ 文件所需权限:用户对该文件至少有r、w权限
  • 让一个用户可以创建一个文件的基本权限是什么
    ① 目录所需权限:用户对这个目录至少需要具有w、x权限,w权限可以在目录下新建、删除文件
  • 让用户进入某目录并执行该目录下的某个命令的基本权限
    ① 目录所需权限:用户对这个目录至少需要具有x权限
    ② 文件所需权限:用户对该文件至少需要具有x权限
    例题:
    找出/etc下面,文件大小介于50KB到60KB之间的文件,并且将权限完整地列出(ls-l)。
    答:find /etc -size +50k -a -size -60k -exec ls -l {} ;
    例题:找出/etc下面,文件容量大于50KB且文件所有者不是root的文件名,且将权限完整地列出(ls-l)。
    答:find /etc -size +50k -a ! -user root -exec ls -ld {} ;
    例题:找出/etc下面,容量大于1500KB以及容量等于0的文件。
    答:find /etc -size +1500k -o -size 0

书中课后习题解析:https://blog.csdn.net/qq_39181280/article/details/83350370?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158600875819724848331039%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158600875819724848331039&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-blog_SOOPENSEARCH-2

你可能感兴趣的:(linux,学习笔记,linux)