物联网
您现在所在的位置:首页>企业动态>物联网

Linux文件与目录管理

编辑:学到牛牛IT培训    发布日期: 2022-03-10 14:01:30  

在Linux系统下,一切皆文件,文件主要分为五类:普通文件、目录文件、设备文件、链接文件、管道文件。

普通文件:是最基本的文件,保存着运行指令和各种数据。普通文件是以ASC++II码形式存储,人类能够读懂可以编辑修改的文件。

目录文件:是文件信息的集合,实际上就是我们通常认识的“目录”。

设备文件:是对计算机硬件的抽象化,例如,硬盘、鼠标、键盘被作为一个设备文件管理。

链接文件:是指向另一个文件的链接,它本身没有数据,内部的数据来自其他文件。链接文件区分为硬链接与软件,两者均用于同步数据。

管道文件:是用于程序之间进行通信的特殊文件。

那么要怎么区分这些文件呢?这时可以用ll命令来看打印文件的详细信息,每一行的第一个字段里的第一个字符代表的就是这个文件的类型。

-:表示普通文件。

d:表示目录。

l:链接文件。

b:块设备文件。

c:字符设备文件。

s:套接口文件。

p:管道。

1. 绝对路径与相对路径

在Linux中文件的路径,就是文件存在的地址。如同快递寄送东西需要寄货地址,这个地址在Linux文件中就是它的路径。例如:/root/mfkddd/file,file是一个文件,它的路径就是/root/mfkddd。在Linux的世界中,路径可分为绝对路径和相对路径两种。

绝对路径:路径的写法一定是由根目录“/”开始。例如:cat /root/mfkddd/file,该语句的意思是查看file文件里的内容,cat后面跟的是绝对路径。

相对路径:路径的写法不是由根目录开始的。例如:假如进入到mfkddd目录,可以用cat file这个命令直接查看file文件里面的内容,这里的cat后面跟的file文件相对mfkddd而言便是相对路径。

2. 操作目录的相关命令

1)Linux系统中的常见特殊目录(见表1)

表1特殊目录

符号

说明

.

代表当前目录

..

代表上一层目录

-

代表前一个工作目录

代表当前用户的家目录

每个目录下都有两个目录:“.”和“..”,分别代表当前目录和上层目录。在根目录下使用ls -a命令查询,可以看到根目录下存在“.”和“..”两个目录,这两个目录的属性和权限完全一致,这说明根目录的“.”和“..”是同一个目录,如表2.2所示。

2)常用操作目录的命令

(1)cd:切换目录。

[root@localhost ~]# cd /tmp   <==切换到/tmp目录中

[root@localhost tmp]#                   <==由此可知,此目录为tmp

如上述操作,cd命令是切换命令,cd后面跟的tmp是相对路径,cd tmp命令的意思是从当前目录切换到tmp目录。这里使用的是tmp的相对路径,使用相对路径的前提是目标目录必须事先存在。

如果只输入cd或者cd ~代表会回到使用者的家目录。输入cd -代表回到上一个工作目录。输入cd /root/mfkddd代表进入到mfkddd目录,这里cd后面跟的是绝对路径,所以在任何目录下输入cd /root/mfkddd这条命令都可以进入到mfkddd目录。

(2)pwd:显示当前目录的路径。

例如,先在root目录下创建一个mfkddd目录,并在里面创建一个file文件。

[root@localhost /]# cd /root                <==首先进入到root目录

[root@localhost root]# mkdir mfkddd   <==创建目录

[root@localhost root]# cd /root/mfkddd  <==再进入到mfkddd目录

做好所有准备后,可以使用pwd命令来查询文件路径了。在mfkddd目录下输入pwd命令,打印出来的/root/mfkddd路径是mfkddd目录的绝对路径。

[root@localhost mfkddd]# pwd

/root/mfkddd

(3)mkdir:建立一个新的目录。

mkdir命令后面可以选择-m或-p参数。-m表示可以给创建的目录设置权限,-p表示可以创建多级目录。

如果没有加-p参数创建多级目录,终端将会弹出“没有这样的文件或目录”的提示框。因为当前目录下没有test1这个目录,所以找不到它,后面的test2和test3自然也无法被创建。

[root@localhost mfkddd]# mkdir test1/test2/test3            <==创建目录

mkdir: 无法创建目录"test1/test2/test3": 没有那个文件或目录 <==创建失败

[root@localhost mfkddd]#

为了解决上述问题,在mkdir后面加上一个参数-p,系统就会默认先创建test1,然后创建test2,最后创建test3,操作如下。

[root@localhost mfkddd]# mkdir -p test1/test2/test3        <==创建多级目录

[root@localhost mfkddd]#

现在已经执行了mkdir -p test1/test2/test3命令,如果没有看到效果,就说明创建成功,可以通过切换命令进入到test3目录,如果能成功进入,表示多级目录创建成功,操作如下。

[root@localhost mfkddd]# cd test1/test2/test3    <==切换目录

[root@localhost test3]#                          <==已切换到此目录

(4)rmdir:删除一个空的目录。

rmdir命令删除目录时需要一层一层地进行,而且被删除的目录必须是空目录。如果要将目录下的所有东西都删除,需要在rmdir命令后面加上-p参数。

当直接用rmdir命令删除一个多级目录时,将出现提示错误信息:目录不为空。

[root@localhost mfkddd]# rmdir test1/       <==删除test1目录

rmdir: 删除 "test1/" 失败: 目录非空   <==删除失败

[root@localhost mfkddd]#

为了解决上述问题,在rmdir命令后面加上参数-p 。rmdir只是针对目录,且在目录内没有其他文件的情况下使用。如果既要删除目录又要删除文件,可以用rm命令来实现。

[root@localhostmfkddd]# rmdir -p test1/test2/   <==删除多层目录,加-p参数

[root@localhostmfkddd]#

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

当执行一个命令时,如ls,系统会按照PATH的设定到每个PATH定义的目录下查找文件名为ls的可执行文件。如果在PATH定义的目录中含有多个名为ls的可执行文件,那么先查询到的同名命令就会先被执行。

使用echo $PATH命令可以查看有哪些目录被定义。echo命令的作用是显示或打印文件内容,而PATH前面加的$表示后面接的是变量,所以会显示目前的PATH。

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

PATH一定要大写,这个变量的内容由一堆目录组成,每个目录使用(:)分隔,每个目录有顺序之分。无论是root还是其他用户都有/bin或/usr/bin这个目录在PATH变量内,所以就能在任何地方执行ls命令来找到/bin/ls执行文件。

(1)在PATH中加入目录的方法如下(例如在任何目录均可执行/root目录下的命令,那么就将/root加入到PATH当中即可)。

[root@localhost ~]# PATH=”${PATH:/root}”

(2)PATH的特点。

a. 不同身份用户预设的PATH不同,因此预设能够随意执行的命令也不同;

b. PATH是可以修改的;

c. 使用绝对路径或相对路径直接指定某个命令的文件名进行执行,会比查找PATH正确率更高;

d. 命令应该要放到正确的目录下,执行起来会更加方便;

e. 本地目录(.)最好不要放到PATH中。

3. 文件与目录管理

Linux的目录结构为树状结构,最顶级的目录为根目录,其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。

Linux中可以使用ls、cd、mkdir、cp、mv和rm等常见命令对文件或者目录进行处理,示例如下。

(1)列出/查看tmp目录下的所有文件/文件夹。

[root@localhost tmp]# ls /tmp   <==查看tmp目录下的所有文件

xuedao xuedao.tar

[root@localhost tmp]#

(2)直接用ls命令,表示查看当前目录下的所有文件/文件夹。

[root@localhost tmp]# ls              <==查看当前目录下的所有文件

xuedao xuedao.tar

[root@localhost tmp]#

(3)查看当前目录下所有文件的详细属性/信息。

[root@localhost tmp]# ls  -l            <==查看当前目录下所有文件的详细信息

总用量 16

-rw-r--r--. 1 root root    52 12月 25 00:09 xuedao

-rw-r--r--. 1 root root 10240 12月 24 22:24 xuedao.tar

[root@localhost tmp]#

(3)切换到home目录。

[root@localhost ~]# cd /home/

[root@localhost home]# pwd

/home

(4)在/root目录下创建test目录。

[root@localhost ~]# mkdir test

[root@localhost ~]# ls

test

4. 查看文件内容

1)文件查看命令:cat、tac、nl

操作查看命令前先在/tmp目录下用vi xuedao命令创建一个xuedao文件,并在里面写入第1~3行的内容,操作如下:

[root@localhost tmp]# vi xuedao  <==使用vi编辑器打开文件

1 Hello xuedao 001

2 Hello xuedao 002

3 www.baidu.com

下面将介绍tac命令的使用与tac和cat两个命令之间的区别。

(1)tac命令也是用来查看文件内容的,只不过tac命令是从最后一行开始显示文件的信息,与cat命令恰好相反。tac xuedao命令,如下:

[root@localhost tmp]# tac xuedao  <==从最后一行开始显示xuedao文件

3 www.baidu.com

2 Hello xuedao 002

1 Hello xuedao 001

[root@localhost tmp]#

(2)nl命令是查看命令,它与cat或tac命令的区别在于nl命令默认带行号显示内容。

语法格式如下:

nl [参数] [文件]

参数如下。

-b指定行号的方式,主要有以下两种。

-b a:表示不论是否为空行,也同样列出行号(类似于cat -n)。

-b t:如果有空行,则空的那一行不列出行号(默认值)。

nl命令的示例如下:

[root@localhost tmp]# nl –b a xuedao

1 Hello xuedao 001

2 Hello xuedao 002

3 www.baidu.com

4           <==空行(没有数据的一行)

5                                          <==空行(没有数据的一行)

[root@localhost tmp]# nl –b t xuedao

1 Hello xuedao 001

2 Hello xuedao 002

3 www.baidu.com

2)翻页查看文件内容命令:more、less

(1)more命令用于逐页显示文件信息。在more命令运行过程中,可以使用如表2所示的按键进行后续操作。

表2 more命令运行过程中按键的功能

功能

Enter

向下翻一行

/

在显示内容中,向下查询“字符”这个关键字

:f

立刻显示出文件名以及目录显示的行数

Q

立即离开more,不再显示该文件内容

B

向回翻页,该操作只对文件有效

N

重复搜索同一个字符

(2)less命令与more命令功能类似,区别在于less运行过程中,可以使用如表3所示按键进行后续操作。

表3 less命令运行过程中按钮的功能

功能

空格键

向下翻一页

PgDn

向下翻一页

PgUp

向上翻一页

/

向下搜索“字符”的功能

?

向上搜索“字符”的功能

n

重复前一个搜索

N

反向重复前一个搜索

g

显示到这个文件的第一行去

G

显示到这个文件的最后一行去

q

离开less这个程序

3)获取资料命令:head、tail

(1)head是查询文件内容命令,它可以指定参数从前往后显示指定的行数。

语法格式如下:

head [参数] [文件名]

参数如下。

-n: n代表int类型数字,假设数字设置为3,显示的内容从前往后显示前3行,如果不指定参数则默认显示前10行。

head命令的示例如下:

[root@localhost tmp]# head xuedao

1 Hello xuedao 001

2 Hello xuedao 002

3 www.baidu.com

4

5

[root@localhost tmp]#

(2)tail命令也是查询命令,tail命令从后往前显示指定的行数,并且空格也会被显示出来。

语法格式如下:

tail [参数] file

参数如下。

-n:n代表int类型数字,假设数字设置为3,显示的内容从前往后显示前3行,如果不指定参数默认下显示后10行。

-f:代表实时显示。

tail命令的示例如下:

[root@localhost tmp]# tail -3 xuedao

3 www.baidu.com

4

5

[root@localhost tmp]#

4)查询非纯文字文件命令:od

语法格式如下:

od [参数] [文件名]

参数如下。

-t:后面可以接类型(type)的输出。

a:利用默认的字符进行输出。

c:使用ASCII字符进行输出。

od命令的示例如下:

[root@localhost tmp]# od -t c xuedao

0000000   H e l l o x u e d a o

0000040   2 w w w . b a i d u . c o m

0000064

[root@localhost tmp]#

以上左侧的第一列是以八进制表示的字节数。

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

1)设置默认文件权限的命令:umask

umask命令是用于设置用户在创建文件时的默认权限,当在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。

[root@localhost ~]# umask

0022

[root@localhost ~]#

[root@localhost ~]# umask -S

u=rwx,g=rx,o=rx

[root@localhost ~]#

若使用者创建文件,默认没有可执行(x)权限,只有r(读)和w(写)两个权限,也就是最大权限为666,默认权限为-rw-rw-rw-。

默认情况下r、w、x的值分别是4、2、1,umask的值指“该默认值需要减去的权限”,即如果需要减去写的权限,则为2;而如果要减去读的权限,则为4。上述umask的值为002,表示user、group并没有被拿掉任何权限,不过others的权限被减去2,也只是说others被减去写的权限。

2)文件隐藏属性命令:chattr、lsattr

(1)chattr命令是设置文件隐藏属性的命令。

语法格式如下:

chattr [+ - ][参数] [文件]

参数如下。

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

-:移除某一个特殊参数,其他原本存在参数不动。

a:当设置a后,这个文件将只能增加信息,不能修改、删除信息,只有root才能设定这个参数。

i:当设置i后,该文件“不能被删除、改名、设置链接,也无法定稿或新增信息”,可增加系统安全性,只有root能设置该属性。

常见的属性是a和i,且很多属性只有root才能设置。

[root@localhost tmp]# touch attrtest  <==创建attrtest文件

[root@localhost tmp]# chattr +i attrtest <==给attrtest文件赋上i的权限

[root@localhost tmp]# rm attrtest   <==删除attrtest

rm:是否删除普通空文件 "attrtest"?Y  <==是否删除,设置为Y(是)

rm: 无法删除"attrtest": 不允许的操作  <==删除失败

[root@localhost tmp]# chattr -i attrtest <==给attrtest文件去掉上i的权限

[root@localhost tmp]# rm attrtest   <==删除attrtest

rm:是否删除普通空文件 "attrtest"?Y        <==是否删除,设置为Y(是)

[root@localhost tmp]#                       <==没有任何错误,表示删除成功

在上述例子中用touch attrtest命令创建了一个attrtest文件,并用chattr +i attrtest命令给attrtest文件赋上i的权限,然后用rm attrtest命令删除attrtest文件。此时rm发出提示rm: cannot remove ‘attrtest’ : Operation not permitted不允许执行删除操作,只有通过chattr –i attrtest命令减去attrtest文件的i权限后才能删除attrtest文件。

(2)lsattr命令是显示文件隐藏属性的命令。

语法格式如下:

lsattr [参数] [文件]

参数如下。

-a:显示隐藏属性。

-d:如果接的是目录,则仅显示目录本身的属性而不是目录内的文件名。

-R:连同子目录的文件一起显示。

[root@localhost ~]# cd /tmp    <==切换目录到/tmp

[root@localhost tmp]# touch xuedao   <==创建文件名为xuedao

[root@localhost tmp]# chattr +ai Sxuedao <==为xuedao文件设置属性

[root@localhost tmp]# lsattr xuedao   <==显示xuedao文件隐藏的属性

--S-ia-------e- xuedao      <==查看xuedao文件属性结果

[root@localhost tmp]#

3)查看文件类型:file

查看文件基本信息,属于哪类文件,如文件属于ASCII、data或者binary等。显示文件的类型是ASCII的纯文字文件。

[root@localhost ~]# file ~/.bashrc

/root/.bashrc: ASCII text

显示passwd的文件信息,例如文件的suid权限、兼容Intel x86-64的硬件平台、使用Linux核心2.6.18的动态方法库连接等。

[root@localhost ~]# file /usr/bin/passwd

/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

6. 查找命令和文件

1)查找指定命令所在路径的命令:which

which命令能够根据PATH这个环境变量所规范的路径,查询执行文件的文件名。

语法格式如下:

which [参数] [命令]

参数如下。

-a:将所有由PATH目录中可以找到的命令均列出,而不止第一个找到的命令名称。

示例如下。

(1)查询ifconfig命令的完整文件名。

[root@localhost ~]# which ifconfig

/sbin/ifconfig

(2)用which命令搜索ls命令的文件路径。

[root@localhost ~]# which ls

alias ls='ls --color=auto'

/usr/bin/ls

(3)查询history命令的完整文件名。

[root@localhost ~]# which history

/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

最后一个应用中查找history这个常用命令,是因为history是bash内建命令,而which默认查找PATH内规范的目录。

2)查找文件的文件名命名:whereis、find

(1)whereis命令。

用于在一些特定的目录中查询指定命令路径。

语法格式如下:

whereis[参数] [文件]

参数如下。

-b:只查找binary格式的文件。

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

示例如下。

①查找ifconfig的文件名。

[root@localhost ~]# whereis ifconfig

ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

②只查询在man里面的passwd文件。

[root@localhost ~]# whereis -m passwd

passwd: /usr/share/man/man1/passwd.1.gz

whereis命令主要是针对/bin/sbin目录下的执行文件,以及/usr/share/man目录下的man文件,或者对几个特定的目录进行查找,因此速度较快。可以使用whrereis –l查看whereis查找的目录。

[root@localhost ~]# whereis -l

whereis [ -sbmu ] [ -SBM dir ... -f ] name...

[root@localhost ~]#

(2)find命令。

Linux下find命令的作用是在目录结构中搜索文件,并执行指定的操作。Linux下的find命令提供了相当多的查找条件,功能非常强大,所以find的选项也非常多。本节将介绍find的选项功能和find的简单使用方法。

语法格式如下:

find [查询路径][选项] [参数] [查询内容]

选项如下。

-name:按照文件名称查找文件。

示例如下。

根据关键字查找。例如,通过find命令搜索指定目录下的mysql文件文字。

[root@localhost ~]# find / -name mysql

/usr/share/mysql

/usr/lib64/mysql

[root@localhost ~]#

免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都高新西区西芯大道4号

  • 学到牛牛在线咨询

    扫一扫,免费咨询

  • 学到牛牛公众号

    微信公众号

学一流技术,找高薪工作

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问