现在的位置: 首页 > 操作系统 > 正文

linux文件与目录管理

2019年02月08日 操作系统 ⁄ 共 8053字 ⁄ 字号 评论关闭

基本概念:

绝对路径:路径的写法一定由根目录”/”写起,例如/usr/local/mysql这就是绝对路径

相对路径:路径的写法不是由根目录”/”写起,例如,首先用户进入到/然后再进入到home,命令为
cd /home
然后 cd test此时用户所在的路径为
/home/test 。
第一个cd命令后跟
/home
第二个cd命令后跟test,并没有斜杠,这个test是相对于/home目录来讲的,所以叫做相对路径

./指的是当前目录

../指的是当前目录的上一级目录

 

基本指令:

cd       进入到某一个目录 cd /home

mkdir创建一个目录,其实就是make
directory
的缩写其语法为 mkdir [-mp]
[
目录名称],其中-m , –p为其选项,-m:这个参数用来指定要创建目录的权限。
-p 它的作用就是递归创建目录,即使上级目录不存在还有一种情况就是如果你想要创建的目录存在的话,会提示报错,然后你加上-p参数后,就不会报错了

rmdir删除一个目录,但不能删除文件其实rmove
directory
缩写
其只有一个选项-p类似与mkdir命令,这个参数的作用是将上级目录一起删除

rm删除目录或者文件,

-f强制的意思,如果不加这个选项,当删除一个不存在的文件时会报错

-r当删除目录时,加该选项,如果不加这个选项会报错。rm是可以删除不为空的目录的

-i这个选项的作用是,当用户删除一个文件时会提示用户是否真的删除如果删除,输入y否则输入
n。

alias   用来设置指令的别名语法:alias[别名]=[指令名称],例如
alias rm='rm -i'
,即当我们使用rm命令时,实际上是使用的是rm
–i
,而用绝对路径的/bin/rm则不会被alias。

echo是打印的意思,echo $PATH。PATH前面的$表示后面接的是变量PATH=”$PATH”:/root,直接将
/root
的路径加入 PATH当中,直接使用相对或绝对路径来执行。

 

ls就是查看某个目录或者某个文件,是list的简写。ls后可以跟一个目录,也可以跟一个文件以下是ls的选项,在这里笔者并没有完全列出,只是列出了平时使用最多的选项其他选项,你可以自行通过man
ls
查询

-a全部的档案都列出,包括隐藏的。linux文件系统中同样也有隐藏文件这些隐藏文件的文件名是以.开头的例如.test,
/root/.123, /root/.ssh
等等,隐藏文件可以是目录也可以是普通文件

-l详细列出文件的属性信息,包括大小创建日期所属主所属组等等。ll这个命令等同于ls
–l 。

--color=never/always/auto never即不要显示颜色,always即总显示颜色,auto是由系统自行判断Redhat/CentOS系统中,默认是带颜色的,因为我们平时用的ls已经alias成了ls
–color=tty
所以目录的颜色是蓝色的,而可执行文件的颜色是绿色这样有助于帮我们区分文件的格式

-d后边跟目录,如果不加这个选项则列出目录下的文件,加上后只列车目录本身

 

cp copy的简写,即拷贝格式为
cp [
选项] [来源文件 ] [目的文件],例如我想把test1拷贝成test2,这样即可
cp test1 test2
,以下介绍几个常用的选项

-d这里涉及到一个连接的概念连接分为软连接和硬连接在以后的章节中会详细解释,现在你只要明白这里的软连接跟windows中的快捷方式类似即可如果不加这个-d则拷贝软连接时会把软连接的目标文件拷贝过去,而加上后,其实只是拷贝了一个连接文件(即快捷方式)

-r如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的。

-i如果遇到一个存在的文件,会问是否覆盖Redhat/CentOS系统中,我们使用的cp其实是cp
–i

-u该选项仅当目标文件存在时才会生效,如果源文件比目标文件新才会拷贝,否则不做任何动作

 

touch看字面意思就是摸一下,没错,如果有这个文件,则会改变文件的访问时间,如果没有这个文件就会创建这个文件前面说过echo,其实就是打印,在这里所echo的内容”abc”
“def”
并没有显示在屏幕上,而是分别写进了文件 111222,其写入作用的就是这个大于号”>”linux中这叫做重定向,即把前面产生的输出写入到后面的文件中

 

mv移动的意思,是move的简写格式为
mv [
选项 ] [源文件] [目标文件],下面介绍几个常用的选项

-icp-i一样,当目标文件存在时会问用户是否要覆盖

-u和上边cp命令的-u选项一个作用,当目标文件存在时才会生效,如果源文件比目标文件新才会移动,否则不做任何动作

目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中不存在的话移动完后,目标文件是一个文件

 

cat比较常用的一个命令,即查看一个文件的内容并显示在屏幕上

-n查看文件时,把行号也显示到屏幕上

”>>”,这个符号跟前面介绍的”>”的作用都是重定向,即把前面输出的东西输入到后边的文件中,只是”>>”是追加的意思,而用”>”,如果文件中有内容则会删除文件中内容,而”>>”则不会

-A显示所有东西出来,包括特殊字符

tac其实是cat的反写,同样的功能也是反向打印文件的内容到屏幕上

 

more也是用来查看一个文件的内容当文件内容太多,一屏幕不能占下,而你用cat肯定是看不前面的内容的,那么使用more就可以解决这个问题了当看完一屏后按空格键继续看下一屏但看完所有内容后就会退出如果你想提前退出,只需按q键即可

less作用跟more一样,但比more好在可以上翻,下翻空格键同样可以翻页,而按”j”键可以向下移动(按一下就向下移动一行),按”k”键向上移动在使用moreless查看某个文件时,你可以按一下”/”键,然后输入一个word回车,这样就可以查找这个word如果是多个该word可以按”n”键显示下一个另外你也可以不按”/”而是按”?”后边同样跟word来搜索这个word,唯一不同的是,”/”是在当前行向下搜索,而”?”是在当前行向上搜索

 

head head后直接跟文件名,则显示文件的前十行如果加
–n
选项则显示文件前n

 

tailhead一样,后面直接跟文件名,则显示文件最后十行如果加-n选项则显示文件最后n

-f动态显示文件的最后十行,如果文件是不断增加的,则用-f选项如:tail
-f /var/log/messages

 

文件的所属主以及所属组

 Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user所属组(group)以及其他用户(others)对该文件的权限你可以通过ls
-l
来查看这些属性。

ls –l
查看当前目录下的文件时,共显示了9列内容(用空格划分列):

1列,包含的东西有该文件类型和所属主所属组以及其他用户对该文件的权限第一列共10其中第一位用来描述该文件的类型上例中,我们看到的类型有”d”,
“-“
,其实除了这两种外还有”l”, “b”, “c”,”s”

d
表示该文件为目录;

-
表示该文件为普通文件;

l
表示该文件为连接文件(linux file),上边提到的软连接即为该类型;

[image]

b
表示该文件为块设备文件,比如磁盘分区

[image]

c
表示该文件为串行端口设备,例如键盘鼠标

s
表示该文件为套接字文件(socket),用于进程间通信

后边的9位,每三个为一组均为rwx
三个参数的组合其中r
代表可读,w代表可写,x代表可执行前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限

2列,表示为连接占用的节点(inode),若为目录时,通常与该目录地下还有多少目录有关系,关于连接(link)在以后章节详细介绍

3列,表示该文件的所属主

4列,表示该文件的所属组

5列,表示该文件的大小

67列和第8列为该文件的创建日期或者最近的修改日期,分别为月份日期以及时间

9列,文件名如果前面有一个.
则表示该文件为隐藏文件

 

 

更改文件的权限

1更改所属组
chgrp

语法:chgrp [组名] [文件名]

[image]

这里用到了groupadd
命令,其含义即增加一个用户组该命令在以后章节中做详细介绍,你只要知道它是用来增加用户组的即可

 

2更改文件的所属主
chown

语法:chown [ -R ]
账户名
文件名

chown [ -R ] 账户名:组名
文件名

这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改

useradd
是增加一个账户。

 

3改变用户对文件的读写执行权限
chmod

linux中为了方便更改这些权限,linux使用数字去代替rwx
,具体规则为r: 4 w:2 x:1 -:0
举个例子,-rwxrwx---用数字表示就是
770
,具体是这样来的:

rwx = 4+2+1=7; rwx= 4+2+1=7; --- = 0+0+0=0

chmod 语法: chmod [-R] xyz
文件名
(这里的xyz,表示数字)

-R 选项作用同chown,级联更改

chmod 还支持使用rwx的方式来设置权限!从之前的介绍中我们可以发现,基本上就九个属性分别是(1)user
(2)group (3)others
三群啦!那么我们就可以藉由 u, g, o
来代表三群的属性!此外, a
则代表 all
亦即全部的三群!那么读写的属性就可以写成了 r, w, x!也就是可以使用底下的方式来看:

[image]

现在我想把一个文件设置成这样的权限 rwxr-xr-x (755),使用这种方式改变权限的命令为

[image]

另外还可以针对u, g, o, a增加或者减少某个权限(读,写,执行),例如

[image]

 

umask

上边也提到了默认情况下,目录权限值为766,普通文件权限值为644。那么这个值是由谁规定呢?追究其原因就涉及到了umask。

umask语法: umask xxx
(这里的xxx代表三个数字)

查看umask值只要输入umask然后回车
umask
预设是0022,其代表什么含义?先看一下下面的规则:

1)若用户建立为普通文件,则预设没有可执行权限,只有rw两个权限最大为666-rw-rw-rw-

2)若用户建立为目录,则预设所有权限均开放,即777drwxrwxrwx

umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限所以目录的权限为(rwxrwxrwx)
– (----w--w-) = (rwxr-xr-x)
,普通文件的权限为(rw-rw-rw-) – (----w--w-) = (rw-r--r--)。umask的值是可以自定义的,比如设定umask
002,你再创建目录或者文件时,默认权限分别为(rwxrwxrwx)
– (-------w-) = (rwxrwxr-x)
(rw-rw-rw-) – (-------w-) = (rw-rw-r--)。

 

chattr
修改文件的特殊属性

语法: chattr [+-=][ASaci [文件或者目录名]

+-=
:分别为增加减少设定

A:增加该属性后,文件或目录的atime将不可被修改;

S:增加该属性后,会将数据同步写入磁盘中;

a:增加该属性后,只能追加不能删除,非root用户不能设定该属性;

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

i:增加后,使文件不能被删除重命名设定连接写入新增数据;

 

lsattr
列出文件/目录的特殊属性

语法: lsattr [-aR] [文件/目录名]

-a:类似与ls
-a
选项,即连同隐藏文件一同列出;

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

 

linux下搜索一个文件

windows下有一个搜索工具,可以让我们很快的找到一个文件,这是很有用的然而在linux下搜索功能更加强大

which
用来查找可执行文件的绝对路径

在前面章节中已经多次用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which一下很容易就知道了

当查找的文件在PATH变量中并没有时,就会报错

 

whereis
通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件

语法: whereis [-bmsu] [文件名称]

-b:只找binary
文件

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

-s:只找source来源文件

-u:没有说明档的文件

 

locate
类似于whereis,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里后边直接跟文件名如果你的linux没有这个命令,请安装软件包
mlocate
,这个软件包在你的系统安装盘里,后缀名是RPM,随后介绍的find命令会告诉你如何查找这个包如果你装的CentOS你可以使用这个命令来安装
yum install –y mlocate 。
前提是你的CentOS能连互联网至于yum这个命令如何使用,到后续章节你自然会明白如果你刚装上这个命令,初次使用会报错

 

find
这个搜索工具是笔者用的最多的一个,所以请你务必要熟悉它

语法: find [路径]
[
参数]
下面介绍几个笔者经常用的参数

-atime +n
:访问或执行时间大于n天的文件

-ctime +n
:写入更改inode属性(例如更改所有者权限或者连接)时间大于n天的文件

-mtime +n
:写入时间大于n天的文件

Access timeatime
是在读取文件或者执行文件时更改的文件的 Modified
time
mtime
是在写入文件时随文件内容的更改而更改的文件的
Create time
ctime
是在写入文件更改所有者权限或链接设置时随
Inode
的内容更改而更改的

ls -l
命令可用来列出文件的 atime、ctime
mtime。

ls -lc filename         列出文件的 ctime

ls -lu filename         列出文件的 atime

ls -l filename         
列出文件的 mtime    

這三個 time stamp
都放在 inode
mtime, atime
修改inode
就一定會改,
既然 inode
改了,
ctime
也就跟著要改了

继续讲find常用的参数

-name filename
直接查找该文件名的文件,这个使用最多了

[image]

-type type
:通过文件类型查找文件类型在前面部分已经简单介绍过,相信你已经大体上了解了。type
包含了 f, b, c, d, l, s
等等后续的内容还会介绍文件类型的

[image]

【linux文件类型

在前面的内容中简单介绍了普通文件(-),目录(d)等,在linux文件系统中,主要有以下几种类型的文件

1)正规文件(regular file):就是一般类型的文件,当用ls
–l
查看某个目录时,第一个属性为”-“的文件就是正规文件,或者叫普通文件正规文件又可分成纯文字文件(ascii)和二进制文件(binary纯文本文件是可以通过cat,
more, less
等工具直接查看内容的,而二进制文件并不能例如我们用的命令/bin/ls
这就是一个二进制文件

2)目录(directory):这个很容易理解,就是目录,跟windows下的文件夹一个意思,只不过在linux中我们不叫文件夹,而是叫做目录。ls
–l
查看第一个属性为”d”。

3)连接档(link):ls
–l
查看第一个属性为 “l”,类似windows下的快捷方式这种文件在linux中很常见,而且笔者在日常的系统运维工作中用的很多,所以你要特意留意一下这种类型的文件在后续章节笔者会介绍

4)设备档(device):与系统周边相关的一些档案,通常都集中在
/dev
这个目录之下!

通常又分为两种:区块 (block)
设备档
:就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘啦!

例如你的一号硬盘的代码是 /dev/hda1
等等的档案啦!第一个属性为 “ b “

字符 (character)
设备档
:亦即是一些串行端口的接口设备,例如键盘鼠标等等!第一个属性为
“ c “。

 

对于后缀名这个概念,相信你不陌生吧linux系统中,文件的后缀名并没有具体意义,也就是说,你加或者不加,都无所谓但是为了容易区分,

linux爱好者们都习惯给文件加一个后缀名,这样当用户看到这个文件名时就会很快想到它到底是一个什么文件例如1.sh,
2.tar.gz, my.cnf, test.zip
等等,如果你首次接触这些文件,你也许会感到很晕,没有关系,随着学习的深入,你就会逐渐的了解这些文件了笔者所列举的几个文件名中1.sh代表它是一个shell
script
2.tar.gz
代表它是一个压缩包,my.cnf
代表它是一个配置文件,test.zip
代表它是一个压缩文件。

 

我们在进行硬盘分割的时候,最小都是以磁柱为单位进行分割的,block
还好理解,他是我们磁盘可以记录的最小单位,是由数个 sector
所组成的,所以他的大小通常为 n*512 bytes
Block
是记录档案内容数据的地区,而
inode
则是记录该档案的属性及该档案放置在哪一个
Block
之内的信息!!所以,每个档案都会占用到至少一个
inode 。
而当我们 Linux
系统要找到这个档案时,他会先去搜寻 inode table
找到这个档案的属性及数据放置的地区,然后再到数据去找到数据存放的 Block
进而将数据取出利用这个 inode
数目在一开始就会被设定好,他的设定方式通常是利用 (
硬盘大小 /
一个容量 ),这个容量至少应该比 Block
要大一些较佳。一个 partition
格式化为一个 filesystem
之后,基本上,他一定会有 inode table
data area
两个区块。

 

【ln
建立连接档

前面提到过两次连接档的概念,现在终于该好好介绍下这部分内容了连接档分为两种,硬连接(hard
link
)和软连接(symbolic link

Hard Links
上面内容中说过,当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来hard
link
是直接再建立一个inode连接到文件放置的块区域也就是说,进行hard
link
的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode,不过这样一来就会有个问题,因为增加的inode会连接到块区域,而目录本身仅仅消耗inode而已,那么hard
link
就不能连接目录了请你记住,hard
link
有两个限制:1
不能跨文件系统,因为不通的文件系统有不同的inode table
2
不能连接目录

Symbolic Linkshard
link
不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个连接文件时,它会把读取的行为转发到该文件所link的文件上这样讲,也许比较绕口,那么就来举一个例子现在有文件a,我们做了一个软连接文件b(只是一个连接文件,非常小),b指向了文件a。当读取b时,那么b就会把读取的动作转发到a上,这样就读取到了文件a。所以,当你删除文件a时,文件b并不会被删除,但是再读取b时,会提示无法打开文件而,当你删除b时,a是不会有任何影响的

ln
语法: ln [-s] [来源文件] [目的文件]

ln
常用的选项就一个-s
,如果不加就是建立硬连接,加上就建立软连接

在建立硬连接前后,123目录所占空间大小并没有改变

当把源文件删除后,空间仍旧没有变化说明了删除一个文件其实只是删除了inode信息

不能创建目录的硬连接

建立软连接后,456目录增加了4k

删除源文件后会提示没有这个文件的错误

目录是可以软连接的

删除软连接对源文件没有任何影响

 

 

 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.