3.Linux文件和目录的管理


目录

1.目录的相关操作

1.1.cd(变换目录)

1.2.创建一个目录(mkdir)和删除一个目录(rmdir)

1.3.删除(rm)

         2.执行路径变量(echo):$PATH

3.复制,删除移动命令(cp,rm,mv)

4.查看文件内容(cat,tac,more,less,head,tail,od)

5.新建文档(touch)

6.档案预设权限:umask

7.档案的隐藏属性(chattr)

扫描二维码关注公众号,回复: 3342757 查看本文章

8.档案的特殊权限(SUID, SGID, SBIT)

8.1.Set UID

8.2.Set GID

8.3.Sticky Bit

9.指令和档案的路径搜寻


1.目录的相关操作

命令 含义
cd 变换目录(change directory)
pwd 显示当前目录
mkdir 建立一个新的目录
rmdir 删除一个空的目录
rm   -rf 删除,-r代表递归,比如删除文件夹下所有文件,-f ,强制删除

其他一些必备知识:

符号 含义
. 代表当前目录
.. 代表上一层目录
~ 代表目前用户身份的家目录
~yuan 代表yuan这个用户的家目录(yuan是一个账户名称)

1.1.cd(变换目录)

例子:

现在我拥有一个普通的用户:yuangege,我们再做一些实验开看看:

cd-的用法:

1.2.创建一个目录(mkdir)和删除一个目录(rmdir)

使用命令:mkdir + 目录名,比如创建一个名为test01的目录:mkdir  test01

进入test01的文件夹,再创建一个目录在创建三个文件夹,可以同时创建多个目录,分别命名为:test011,test012,test013:

现在试着直接回到root的家目录,然后使用命令rmdir删除test01的目录,提示目录非空不可以删除,也就是说rmdir只可以删除一个空的目录(因为在test01文件夹里面有三个文件夹),想要删除的话,只能进去到这个文件夹,把里面的test011,test012,test013全部删除,然后才可以删除test01:

如何创建多级目录,比如创建:test02/play这个文件夹,怎么做?

使用命令:mkdir  -p test02/play 

创建多级子目录,比如创建:test03目录,然后再test03的子目录有三个文件夹分别为,a,b,c怎么做?

使用命令:mkdir  -p  test03 / {a,b,c}

 

1.3.删除(rm)

递归强制删除,意思是把,需要把一个文件夹,和这个文件夹的子文件家强制删除,此命令很强悍,小心使用。

比如一次性删除test03文件夹,以及他的子文件夹;

使用命令:rm  -rf  test03/


 2.执行路径变量(echo):$PATH

在window也有一个一样的概念,就是外部命令搜索路径:

1.什么是环境变量:通常是指在操作系统当中,用来指定操作系统运行时所需要的参数。

2.Path环境变量:是操作系统外部命令搜索路径。

3.window+R,输入cmd 输入 ipconfig ,按下命令,显示计算机网卡配置

  • 为什么会有这个结果?

  • 其实是操作系统执行ipconfig.exe的可执行文件。

4.操作系统在哪里找这个ipconfig.exe 这个文件在电脑路径:C:\Windows\System32 中有ipconfig.exe的文件。如果改变ipconfig 的名字为iconfig ,再次在cmd里面输入ipconfig命令,提示不是内部或外部命令,也不是可运行的程序。

例如:系统环境变量

  • %SystemRoot%\system32  
  •  %SystemRoot%\System32\Wbem
  • %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
  • C:\Program Files\Java\jdk1.8.0_05\bin\
  •    首先执行的时候系统会从第一个路径开始搜索有没有ipconfig.exe 这个名字的文件可执行命令,如果有则执行。

我们所执行的命令本身就是一个可执行程序,比如当我调用 ls 这个命令时,它首先会在执行这个命令的路径搜索这个命令,如果没有这个命令,系统就会在所设定的路径上寻找 ls 这个命令(也就是window的外部命令搜索路径),如果在路径没有这个命令就会显示错误。

接下来看看 系统的命令搜索路径有哪一些吧:

使用命令:echo  $PATH

可以看到在root用户下,有这些路径。每个文件路径以冒号“:”分开,其实ls命令就是在/bin目录下,比如把下面的路径的/bin,路径的时候就会提示找不到命令:

接下来做个小实验:

编写一个简单的脚本来显示日期:

首先创建一个文件,命名为:showtime.sh,写一个简单的日期显示的命令

给showtime.sh这个脚本赋予可执行的权限

那现在试着运行一下这个脚本看可不可行?提示命令找不到

可以看一下当前路径,是在:/root

按照这个思路,如果我们想执行这个,showtime.sh这个脚本,怎么做呢?

方式一:直接到它命名的路径下执行,因为这个showtime.sh这个脚本是在root目录下的:

使用命令:./showtime.sh 

方式二:把:/root这个路径添加到 $PATH路径下:

添加路径使用使用命令:PATH ="路径"


3.复制,删除移动命令(cp,rm,mv)

复制:cp命令用来将一个或多个源文件或者源目录复制到指定的文件或目录中。

语法:

1.cp [OPTION]… [-T] SOURCE DEST

2.cp [OPTION]… SOURCE… DIRECTORY

3.cp [OPTION]… -t DIRECTORY SOURCE… 

常用选项

选项(OPTION) 含义
-r,-R -recursive,递归复制目录及内部的所有内容
-a -archive,归档,类似 -dR -perserve=all
-v -verbose,显示拷贝的详情信息(进度)
-u -update,只有源文件(source)比目的(dest)或者目的文件不存在才会进行复制。
-f -force强制拷贝
-p 连同属性一起拷贝
-s 复制成为符号链接文件 (symbolic link),亦(快捷方式)档案;
-i

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

-d 若来源文件为链接文件的属性(link file),则复制链接文件属性而非档案本身。

使用方法:cp  [选项]...     源文件(如:PATH1/aa)   目的(比如:PATH2/bb) 

命令解释:如果PATH1和PATH2都是路径,aa,和bb都是一个文件夹,把PATH1下的aa文件夹下的档案,拷贝到PATH2下的bb文件夹下(如果bb不是一个文件夹或者是一个文件,或者根本不存在这个文件名,在PATH2会自动创建一个文件夹bb).

实例一:

3.2复制整个文件夹到指定目录:

把整个 /etc/文件夹复制到  /mnt目录下,发现用cp命令是不可以直接复制目录的,得使用递归参数(-r)复制目录以及目录下的所有文件。

使用命令:cp  -rf  /etc/   /mnt  

 注意:当新复制一个文件就是相当于是新建一个文件,从创建时间可以看的出来,做个实验:

先将,/mnt的东西清空。

然后把,/etc/services文件夹复制到 ,/mnt

如果你想拷贝的时候连同属性信息一同拷贝,怎么做呢?(注意,先删除,/mnt/services再下一步)

(也可以使用,-a选项)


 mv (移动档案与目录,或更名):将源文件重命名为目标文件, 或将源文件移动至指定目录 。

语法:mv [OPTION ]     SOURCE  DEST

常用选项:

选项(OPTION) 含义
-f --force : 覆盖前不询问
-i --interactive : 覆盖前询问
-u --update : 只在源文件文件比目标文件新,或目标文件不存在时才进行移动
-v --verbose : 详细显示进行的步骤
   
   

例子1:mv  [选项]    /PATH1/aa     /PATH2/bb  把PATH1的aa文件夹剪切到PATH2的bb下,如果没有bb文件夹,则创建一个bb文件夹。

例子2:mv  aa  bb ,这个意思就是在当前的路径进行剪切。


删除:rm命令用于删除Linux系统中的文件或目录。

语法

rm    [OPTION]  ....  FILE

常用选项

选项(OPTION) 含义
-f --force 强制删除,忽略不存在的文件(不提示)
-i --interactive 交互模式删除文件,删除文件前给出提示
-r,-R 递归的删除目录下面文件以及子目录下文件
-v --verbose 显示运行时详细信息
   

例子:


4.查看文件内容(cat,tac,more,less,head,tail,od)

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

使用方式与特征:

1cat 和 tac使用方法:cat   [选项]  + 文件名  ,tac   [选项]  + 文件名

1.1.cat从第一行开始显示,如果这个文档在Linux一屏幕的篇幅显示不下的话,那么只能看到最后一页的内容,在查看大文件的时候不方便(tac相反,从最后一行开始显示)。

1.2.加上 -n 的选项,会在每一行显示行号。

2.nl,的使用方法:nl + 文件名,直接显示文件和行号(和cat -n  +文件名类似)。

3.more的用法:more + 文件名 ,特点:可以向阅览电子书一样,一页一页显示。缺点:只能往后翻,不能往前。

比如查看/etc/services文件,这个篇幅很长,使用more试一下

操作:按下Enter一行一行往下翻,按空格,一页页往下翻,q:退出查阅。

4.less,的用法:less + 文件名,继承了more的特点之外,还可以往前翻,使用更多的快捷键。

比如查看/etc/services文件,这个篇幅很长,使用less试一下

操作:可以使用pageup和pagedown往前或者往后翻,按下home键,跳转到第一页,END键,跳转到文档的末尾页。

查找关键字:左下角一个冒号,打上一个斜杆:"/"输入关键字,回车,关键字就会高亮,此时按小写的n会从上往下查找,大写的N,从下往上查找。

5.head和tail命令用法:heda   -数字  文件名,或者 tail  -数字  文件名

注意:使用 tail  -f  +文件,进入查看尾行,不会退出这个界面,所以使用tail 加上 -f 的参数作为监控日志输出的作用,实时监控最新的信息输出(CTRL + C 退出)。

6.od命令的使用:od + [选项]  + 文件名

查看ls这个文件的二进制文件:

使用命令:od  -t  c /bin/ls

注意:也可以使用Strings命令。


 5.新建文档(touch)

语法:touch   [选项]...  文件....

常用选项:

选项(OPTION) 含义
-a 仅修订access time
-c 仅修改档案时间
-d 直接加上想要修订的日期,而不是使用当前系统时间,也可以使用 --date ==日期或时间
-m 仅修改mtine
-t

后面可以直接想要修订的时间,格式为

[YYMMDDhhmm](年,月,日,时,分)

提示:关于档案时间:mtime,ctime,atime的含义

在Linux系统下,每个档案都会记录很多关于时间的参数,其实有三个主要变动时间,他们的意义分别如下:

  • modification time(mtime):当该档案的数据内容发生变化时,就会跟新发生内容变化的时间(档案内容是指档案里面的内容,而非档案的属性或者权限)。
  • status time(ctime):当档案的状态发生变化了,这个跟新变化的的时间(主要是指权限属性被修改)。
  • access time(atime):当档案的内容被取用时,就会更新这个读取时间(就像用less去读取hosts文件,那么这个文件的atime属性就是记录访问时间)。

例子1:

命令:touch aa ,如果说aa不存在的话,新建一个名为aa的档案:

例子2:touch services,如果说services这个文件存在的话,就会去更新这个文件的内容修改时间(mtime)

例子3:修改aa的mtime和ctime


 6.档案预设权限:umask

在我们新建一个目录或者是文档是时候,发现系统是会为这个目录或者文档自动指定一个权限,那这个权限是随机的还是可以设置的,看一看下面:

查看一个系统默认的umask的数值:0022

这是因为系统存在一个变量umask,可以理解为权限过滤符,比如刚开始系统改档案或者文件夹的属性是满权限的,但是因为这个umask的作用,自动过滤了默写权限。

按着这样的思路,修改umsk的值为:0033,那么新建文档的权限认为:644,目录的权限应该为:744

使用命令: umask  -S ,意思是,给出具体的权限,表示需要保修的权限:

如果你想让user保留rx,group保留rx,owner保留rx权限:


7.档案的隐藏属性(chattr)

这些隐藏属性对于系统的运行有很大的帮助~ 尤其是在系统安全 (Security) 上面,需要先强调的是,chattr 指令叧能在 Ext2/Ext3 癿文件系统上面生效, 其他的文件系统可能就无法支持这个指令。

chattr:配置文档的隐藏属性

语法:

chatter   [+-=][ASacdistu] 档案或者目录名称.

注意:命令lsattr是查看隐藏属性的命令。

1.lsattr -a  将隐藏文件的属性也显示出来。

2.lsattr -d 如果接下来的是目录,仅列出目录本身的属性

3.lsattr -R 递归,连同子目录属性一并显示出来

常用选项:

选型 含义
+ 增加某一个特殊参数,其他原本存在参数则不变
- 移除某一个特殊的参数,其他原本存在的参数不变
= 参数全部设定,改变所有参数
属性设置 含义
A 设定A属性,若发生存取档案或者目录时,他的访问时间atime将不会被改变,提升计算机运行速度
S 设定属性S,当你进行任何档案的修改,该更动会同步写入磁盘中
a 设定属性a,这个档案或者目录只能增加数据,而不能删减或者修改数据,而且只有root用户才能去设定这个权限
c 设置属性c,会自动的将此档案压缩,读取自动解压
d 当dump程序被执行时,此档案或者目录不会被进行dump备份
i 设定属性i:让一个档案不能被删除、变更文件名、无法设定节点写入或者新增资料,只有root用户才能进行设定。
s 设定属性s:如果这个档案被删除,将会被完全移出硬盘。
u 设定u属性,如果被删除了,还可以找回来(回收站)

例子1:实验属性  a

先清空,/mnt目录:

在/mnt 新建一个文件夹 aa ,然后给他的设置隐藏属性,然后现在aa新建一个目录test01,并且给aa文件夹设置属性a

想aa这个文件夹添加两个文件,bb,cc:

试着删除bb和cc文件,发现是删除不了的,这是因为我们设置了一个隐藏的属性a:

例子2:实验属性:i

移除隐藏属性:i


8.档案的特殊权限(SUID, SGID, SBIT)

在一般的的文档只有r,w,x这三种权限

但是在特殊的文档,比如 /tmp 目录; 和/usr/bin/passwd目录不太一样,看一下,t属性和s属性是什么意思?

8.1.Set UID

当 s 这个标志出现在档案拥有者 x (原本是 r w x ,但是x的地方出现了S)权限上时,此时就被称为 Set UID权限,简称SUID特殊权限:

1.SUID只对二进制文件有效

2.执行者需要有x权才行

3.本权限只在程序执行时有效

4.执行至会暂时拥有档案拥有者(owner)的权限.

例子:比如现在一个文档的权限是【-  rwSx  ---  r--】,此档案的拥有者的x位置出现了S,表示此档案有特殊权限,当其他人使用这个命令的命令的时候,我会暂时拥有档案拥有者的权限,也就是 r w x权限。

知识点插曲:

1.使用命令:hostname 可以查看主机名字

例子:

2.echo  打印字符

例子1:

例子2:


在Linux系统中,所有账号和密码都记录在 /etc/shadow 这个档案里面,那么一般用户的属性肯定也是放在这个文件里面的,那普通用户能不能修改他的用户密码呢?看一看这个档案的属性:

虽然是只读,root的权限是无穷的,所以使用root权限可以写入,

当我们修改用户密码时,是通过passwd命令,看看这个文件里的东西以及权限:/usr/bin/passwd

现在我有一个一般账户:yuangege,他能不能在一般账户下去修改他的密码呢?又上面的描述我们知道:

1.yuangege对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 yuangege能执行 passwd

2.passwd的拥有者是root账户

3.因为passwd拥有 S的特殊权限,所以yuangege在执行passwd的过程中会暂时获得档案拥有者(rooot)权限

4.而 /etc/shadow档案只有root权限能修改,那么yuangege账户(暂时拥有root权限)就能修改shadow档案。

5.那么,这样一来普通用户虽然没有直接写shadow文档的权限,通过暂时获取root权限之后,就能更改用户密码了。

例子1:yuangege普通账户修改用户密码:

例子2

在/mnt下新建一个档案 test

使用gedit写入一些数据:

 

写入数据

现在切换到yuangege的普通用户上,强制去改变test的档案内容,失败!:

此时我们查看一下Vim编辑器的权限:

 

给vim增加s权限:

现在捋一下思路,使用root权限,能够在test进行文档编辑和修改,又因为gedit命令的所有者拥有一个S位,其他人在使用这命令的时候会暂时拥有档案所有者(root)权限,这样一来普通用户就可以修改test档案了。

使用vim编辑器,在普通用户下去改变test的内容吧:

修改成功:


8.2.Set GID

当 s 这个标志出现在档案所属组权限(Group)的 x (原本是 r w x ,但是x的地方出现了S)权限上时,此时就被称为 Set UID权限,简称SGID特殊权限:

1.SGID 对二进制程序有用;
2.程序执行者对于该程序杢说,需具备 x 的权限;
3. 执行者在执行的过程中将会获得该程序群组的权限!

例子:比如现在一个文档的权限是【-  rwx  --S  r--】,此档案的所属组x位置出现了S,表示此档案有特殊权限,当其他人使用这个命令的命令的时候,我会暂时拥有档案所属组的权限。

8.3.Sticky Bit

这个 Sticky Bit, SBIT 目前叧针对目录有效,对于档案已经没有效果了。 SBIT 对于目录的作用是:
1.当用户对于此目录具有 w, x 权限,也就说有写入权限时;
2.当用户在该目录下建立档案或目录时,仅有自己与 root 才有权力删除该档案。

例子:在  /mnt 新建一个文件夹test

给其他人一个写的权限 w

在普通用户yuangege,在/opt/test上新建一个文件file1,然后让给file1满 权限,其他人也可以修改file1的权限(注意哦,有权限修改也不一定能修改成功)

回到root用户新建一个账户:命名为,Alice

然后使用Alice账户打开/opt/test/file1的文件,看一下是否会有写的权限:

发现是删除不了的

总结:这是因为,我们在创建test文件夹的时候给其他人的x位加了特殊权限t,所以在这个目录下的文件,不管其他人有没有权限,只有两种身份能去删除test文件夹里面的文件:

1.档案的所有者(file的所有者是yuangege)

2.root用户


9.指令和档案的路径搜寻

9.1.指令的位置搜寻:

使用命令:which + 寻找寻找的命令 

例子:

寻找 ls 命令的位置,使用命令:which ls

寻找passwd的位置,命令:which  passwd

9.2.whereis (寻找特定档案)

语法:

 whereis  [选项]  档案或目录名

选项 含义
-b 只找二进制的文档
-m 只找说明文件manual 下的文档
-s 只找source来源文档
-u 搜寻不在上面三个项目中的特殊文档

例子:

寻找 ls 命令的来源:

命令:wherwis  ls

找到和ls命令有关的全部文档: 

使用选项可以查找特定的文档,比如只找二进制文件,加上 -b 的参数

使用命令:whereis  -b   ls

使用选项 -m 只显示在man page帮助文档的文件位置:

使用命令:whereis -m  ls

9.3.locate

语法:locate [选项]  keyword

常用选项:

选项 含义
-i 忽略大小写的的差异
-r 后面可跟文档的类型,和正规的表示方法。

使用方法:locate + 档案或者命令,显示出含有档案或者命令字符的所有选项

例如:

寻找passwd这个命令或者含有这个词的文档的位置全部会列出来:

注意:locate数据寻找的来源是由已建立的数据库 /var/lib/mlocate/,里面的数据搜寻到的不用去硬盘查找,所以查找速度很快,但是值得注意的是(CenOS5的这个数据库是1填自动跟新一次,所以当你现在添加后马上去查实查不到滴),解决方法是:使用updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库档案,跟新一次,马上就可以找到你的文档啦。

比如使用命令:locate  yuangege  查找一下,test01 这个关键字

使用命令:updatedb ,需要一点时间,因为是去硬盘里面进行数据库的更新

9.4.find

语法:

find   [路径]    [option]   [action]

解释:不指定路径就默认是当前路径,选项,可以根据哪一个类型来查找,

与档案权限及名称有关的参数:

参数 含义
-name  filename  搜寻文件名为filename的文档
-size  [+或-] SIZE  搜寻比SIZE还要大(+)或者小(-)的档案,SIZE的规格有:c:代表byte,k:代表1024byte,例子,搜寻文件大于100k的档案: -size  +100
-type 搜寻档案的类型为TYPE的,类型主要有:f:一般正规文档,b,c:装置文档,d:目录,l:连结档,s:socket.
-perm  mode 搜寻档案的权限刚刚好等于mode的档案,这个mode和chmod的数组代号一样,举例:-rwsr -xr-x 的属性为:4775
-perm -mode 搜寻档案的权限必须全部囊括mode的权限的档案,比如:搜寻:-rwx r--r-- (0744)的档案,当一个档案权限是:-rwsr-xr-x(4755),也会被搜寻出来,因为4755已经包含了0744了。
-perm +mode 搜寻档案的权限包含任一mode权限的档案,例子:搜寻 -rwxr-xr-x(755)当一个文件的属性是:-rw-------也会被列出来,因为它又属性:-rw.....

例子:在根目录下查找  test01 这个文档,在根目录下查找所有者为yuangege的档案

与使用者或组名有关的参数

参数 含义
-uid  n n是数字,用于ID,称为UID,记录在。/etc/passwd里面与账号对应的数字
-gid  n n为数字,这个数字是组名的ID,称为GID,记录在./etc/group
-user name name为使用者账户名称,例如:yuangege
-group name name为组名,例如yuangege

与时间有关的选项

参数 含义
-mtime n n为数字,寻找在n天之前(一天之内)被更改动过内容的档案
-mtime +n 列出在n天之前被改动过内容的档案档名
-mtime -n 列出在n天之内被改动过的档案名
-newer file file为一个存在的档案,寻找比file还要新的档案的名称

 


猜你喜欢

转载自blog.csdn.net/qq_36243942/article/details/82774941