一、Linux文件与目录概要
1.目录树
根目录“/”注意几个特殊的目录:“.”表示当前目录,也可以便用“./”来表示。“..”表示上一层目录,也可以用“../”来表示。“~”表示当前用户的主目录。
Windows系统中每个磁盘分区都有一个独立的根目录,有几个分区就有几个目录树,它们之间的关系是并列的,各分区采用盘符(如C、D、E)进行区分和标识,通过相应的盘符访问分区。每个分区的根目录用反斜杠()表示。
Linux操作系统使用单一的目录树结构, 整个系统只有一个根目录,各个分区被挂载到目录树的某个目录中,通过访问挂载点目录,即可实现对这些分区的访问。
2.命名规范
可以包含空格等特殊字符,但必须使用引号
不可以包含“/”字符
还应避免特殊符:*?><;&![ ] ‘ “ ` (){}。
3.目录配置标准——FHS
FHS规范在根目录(/)下面各个主要目录应该放什么样的文件。FHS定义了两层规范。第1层是根目录下面的各个目来应这放什么文件,第2层则针对/usr及/var两个目录子目录来定义,列如/var/log放置系统登录文件,/usr/share放置共享数据。
linux系统安装时就已创建了完整而固定的目录结构,并指定了目录的作用和存放的文件类型。常见的系统目录简介如下:
/bin:存放用于系统管理维护的常用实用命令文件。
/boot:存放用于系统启动的内核文件和引导装载程序文件。
/dev:存放设备文件。
/etc:存放系统配置文件,如网络配置、设备配置、X Window系统配置等。
/home: 各个用户的主目录,其中的子目录名称即为各用户名。
/lib:存放动态连接共享库(其作用类似于Windows里的.dll文件)。
/media:为光盘、软盘等设备提供的默认挂载点。
/mnt: 为某些设备提供的默认挂载点。
/root: root 用户主目录。不要将其与根目录混淆。
/proc系统自动产生的映时。查看该目录中的文件可获取有关系统硬件运行的信息。
/sbin: 存放系统管理员或者root用户使用的命令文件。
/usr: 存放应用程序和文件。
/var: 保存经常变化的内容,如系统日志、打印。
4.文件类型
使用ls -l命令以长格式列目录时,每行第1个字符代表文件类型。其中-表示普通文件,d表示目录文件,c表示字符设备文件,b表示块设备文件,l表示符号链接文件。
1.普通文件
也称为常规文件,内核对这些文件没有进行结构化,只是作为有序的字符序列把它提交给应用程序,由应用程序自己组织和解释这些数据。
2.目录文件
利用它可以构成文件系统的分层树形结构。目录文件也包括数据,但与普通文件不同的是内核对这些数据加以结构化,即它是由成对的“索引节点号/文件名”构成的列表。
将文件添加到一一个目录中时,该目录的大小会增大,以便容纳新文件名。当删除文件时,目录的尺寸并未减少,内核对该目录项做上特殊标记,以便下次添加一个文件时重新使用它。
3.设备文件
除了存放在文件索引节点中的信息外,它们不包含任何数据,系统利用它们来标识各个设备驱动器,内核使用它们与硬件设备通信。设备文件又可分为两种类型:字符设备文件和块设备文件。
Linux将设备文件置于/dev目录下,系统中的每个设备在该目录下有一个对应的设备文件,并有一些命名约定。例如串口COMI1的文件名为/dev/ttyS0, /dev/sda5对应第一个SCSI硬盘(或SATA硬盘)第5个逻辑分区,光驱表示为/dev/cdrom,软驱表示为/dev/fd0。Linux 还提供伪设备( 实际没有的)文件,如/dev/null、/dev/zero。
4.链接文件
存放的数据是文件系统中通向文件的路径。链接文件有两种,分别是符号链接(Symbolic Link )和硬链接(Hard Link)。
符号链接文件类似于Windows系统中的快捷方式,其内容是指向质文件的路径。原文件删除后,符号链接就失效了,删除符号链接文件并不影响原文件。
硬链接是对原文件建立的别名。建立硬链接文件后,即使删除原文件,硬链接也会保留原文件的所有信息。因为实质上原文件和硬链接是同一个文件,二者使用同一个索引节点,无法区分原文件和硬链接。
二、使用命令行进行目录操作
1.创建目录
如果在目录命名前没有加任何路径就在该录下创建;如果给出了一个存在的路径,将会在指定的路径下创建。语法格式如下:
mkdir 选项 目录名
使用以下命令在自己主目录之外的位置创建一个目录。
zxpCLinuxPC1:~$ sudo mkdir /usr/testl
[sudo] password for zxp:
在自己的主目录中创建目录,则不必用sudo命令。
另外-p表示要建立的目录的父目录尚未建立,将同时创建父目录。
2.删除目录
使用rmdir命令从目录中删除一个或多个空的子目录:
rmdir 选项 目录名
选项-p表示递归删除目录,当子目录被删除后父目录为空时,也同被删除。如果是非空目录,则保留下来。
3.改变工作目录
cd命令用来改变工作目录。当不带任何参数时,返回到用户的主目录。cd 目录名
pwd命令用于显示当前工作目录的绝对路径,没有任何选项或参数,语法格式如下:pwd
4.显示目录内容
Is命令列出指定目录的内容:ls 选项 目录或文件
默认情况下输出条目按字母顺序排列。如果没有给出参数,则将显示当前目录下所有子目录和文件的信息。其选项及其含义如下:
-a:显示所有的文件,包括以“.”开头的文件。
-c:按文件修改时间排序。
-i: 在输出的第1列显示文件的索引节点号。
-l:以长格式显示文件的详细信息。输出的信息分成多列,依次是文件类型与权限、链接数、 文件所有者、所属组、文件大小、建立或最近修改的时间、文件名。
-r:按逆序显示ls命令的输出结果。
-R:递归地显示指定目录的各个子目录中的文件。
至于目录的复制,删除和移动的用法请参见后面的命令行文件操作。
三、使用命令行进行文件操作
1.文件内容显示
cat命令连接文件并打印到标准输出设备上,常用来显示文件内容。语法格式如下:
cat 选项 文件名1 文件名2
该命令有两项功能。一是用来显示文件的内容。它依次读取由参数文件1所指明的文件将它们的内容输出到标准输出上。二是用来连接两个或多个文件,如cat fl f2>f3
,将文件f1和f2的内容合并起来,然后通过输出重定向符>将它们的内容存入文件f3中。
less命令也用来分页显示文件内容,但功能比more更强大,其语法格式如下:less 选项 文件名
。
less的功能比more更灵活。例如,用<Pgup>、<Pgdn>
键可以向前向后移动一页,用上下光标键可以前后移动一行。
2.文件内容查找
grep命令用来查看指定的文件中是否包含这些关键词。如果没有指定文件,它们就从标准输入中读取。在正常情况下,每个匹配的行被显示到标准输出上。如果要搜索的文件不止一个,则在每一行输出之前加上文件名。
可以使用选项对匹配方式进行控制,如选项-i表示忽略大小写,-x强制整行匹配,-w强
制关键字完全匹配,-e用于定义正则表达式。下面给出一个例子:
zxp@LinuxPC1:~$ grep -i 'home' /etc/passwd
syslog:x:100:103: : /home/syslog:/bin/ false
saned:x:108:116: : /home/ saned:/bin/false
zxp:x:1000:1000:zxp.,, :/home/ zxp:/bin/bash
zhang:x:1001:1001:zhang.,, :/home/ zhang: /bin/bash
laozi:x:1002:1002:laozi.. :/home/laozi: /bin/bash
test:x:1003:1003:test,,, :/home/test:/bin/bash
wang:x:1004:1004: :/home/wang:
lisi:x:1005:1005:.11 :/home/lisi:/bin/bash
还可以使用选项对查找结果输出进行控制,如选项-m定义多少次匹配后停止搜索,-n指定输出的同时打印行号,-H为每一匹配项打印文件名,-r在指定目录中进行递归查询。
3.文件内容比较
(1)comm命令对两个已经排好序的文件进行逐行比较,只显示它们共有的行。语法格式如下:
comm -123 文件1 文件2
选项-1表示不显示仅在文件1中存在的行,选项-2表示不显示仅在文件2中存在的行,选项-3表示不显示在comm命令输出中的第1列、第2列和第3列。
(2) diff命令逐行比较两个文件,列出它们的不同之处,并且提示为使两个文件一致需要修改哪些行。如果两个文件完全一样, 则该命令不显示任何输出。语法格式如下:
diff 选项 文件1 文件2
4.文件内容排序
sort命令用于对文本文件的各行进行排序。语法格式如下:
sort 选项 文件名列表
sort命令将逐行对指定文件中的所有行进行排序,并将结果显示在标准输出上。如果不指定文件名或者使用“-”表示文件,则排序内容来自标准输入。
5.文件内容统计
wc命令用于统计出指定文件的字节数、字数、行数,并输出结果。语法格式如下:
wc 选项 文件名列表
如果没有给出文件名,则从标准输入读取数据。如果多个文件一起进行统计,则最后给
出所有指定文件的总统计数。
wc命令输出列的顺序和数目不受选项顺序和数目的影响,输出格式如下:
行数 字数 字节数 文件名
选项-c表示统计字节数,-l表示统计行数,-w 表示统计字数。
6.文件查找
find命令用于在目录结构中搜索满足查询条件的文件并执行指定操作。语法格式如:
find 路径... 匹配表达式
find命令从左向右分析各个参数,然后依次搜索目录。find将在“_”“(”“)”或者“!”前面的字符串视为待搜索的文件,在这些符号后面的字符串为参数选项。如果没有设置路径,那么find搜索当前目录;如果没有设置参数选项,那么find默认提供-print选项,即将匹配的文件输出到标准输出。
复杂的匹配表达式由下列成分组成:操作符、选项、测试表达式以及动作:
- 选项
-depth
可以使find命令先匹配所有的文件,再在子目录中查找,-regextype
用于选择要使用的正则表达式类型,-follow
表示遇到符号链按文件就跟踪至全链接所指向的文件。 - 测试表达式针对具体的一个文件进行匹配测试,返回true(真)或者 false (假)。例如,选项
-name
表示按照文件名查找文件,-user
表示按照文件所有者来查找文件,-type
指定查找某一类型的文件(b指块设备文件,d为目录,c为字符设备文件,l 为符号链接文件,f为普通文件)。 - 动作则是对某文件进行某种动作, 返回true或者false。最常见的动作就是打印到屏幕(
-print
)。 - 上述3部分又可以通过操作符(组合在一起形成更大更复杂的表达式。操作符按优先级排序,包括:括号“()”、 “非”运算符(!或-not)、 “与”运算符(-a或-and)、“或”运算符(-o或-or)、并列符号逗号(,)。未指定操作符时默认使用-and。
例如,查找当前目录下(波浪号~代表了用户的主日录$HOME
)文件名后缀为txt的文件可执行以下命令:
zxp@LinuxPC1:~$ find ~ -name "*.txt" -print
/home/ zxp/ vmware-tools-distrib/doc/open source licenses. txt
/home/ zxp/ . config/libreoffice/4/user/uno_ packages/cache/1og.txt
find使用动作-exec
可以对查找到的文件调用外部命令进行处理,注意语法格式比较特殊,外部命令之后需要“{} ;” 结尾,必须由一个“;” 结束,通常Shell都会对“;”进行处理,所以用“;”防止这种情况。注意后一个花括号“}” 和“/”之间有一个空格。
find 路径 匹配表达式 -exec 外部命令 {} \;
在下面的例子中使用grep命令。find 命令首先匹配所有文件名为“passwd*” 的文件,例如passwd, passwd.old, passwd.bak,然后执行grep命令看看在这些文件中是否存在一个名为“wang” 的用户。
zxp@LinuxPC1:~$ sudo find /etc -name "passwd*" -exec grep "wang" {} \;
wang:x:1004:1004::/home/wang:
7.文件(目录)复制、删除和移动
(1) cp命令将源文件或目录复制到目标文件或目录中。语法格式如下:
cp 选项 源文件或目录 目标文件或目录
如果参数中指定了两个以上的文件或目录,且最后一个是目录,则cp命令视最后一个为目的目录,将前面指定的的文件和目录复制到该目录下,如果最后不是已存在的目录,cp命令将给出错误信息。
(2)rm命令可以删除一个目录中的一个或多个文件和目录,也可以将某个目录及其下属的所有文件和子目录删除。该命令对于链接文件,只是删除整个链接文件,而原有文件保持不变。语法格式如下:
rm 选项 文件列表
(3) mv命令用来移动文件或目录,还可在移动的同时修改文件或目录名。语法格式如下:
mv 选项 源文件或目录 目标文件或目录
选项-i表示交互模式,当移动的目录已存在同名的目标文件时,用覆盖方式写文件,在写入之前给出提示。
选项-f在目标文件已存在时,不给出任何提示。
8.链接文件创建
建立符号链核文件的语法格式如下:
ln -s 目标(原文件或目录) 链接文件
建立硬链接文件的语法格式如下:
ln 目标(原文件) 链接文件
9.文件压缩与解压缩
(1)gzip命令用于对文件进行压缩和解压缩。 它用Lempel-Ziv 编码减少命名文件的大小,压缩的文件扩展名是.gz。
gzip 选项 压缩文件名/解压缩文件名
(2) unzip 命令用对win格式的压编文件进行解压缩。
unzip 选项 压缩文件名
(3) tar命令用于对文件和目录进行打包。
tar 选项 文件或目录名
四.查看文件属性
通常使用ls -l
命令显示文件详细信息,这里给出一个文件详细信息的示例并进行分析。
-rw-r--r-- 1 zxp zxp 8980 1月 511:37 examples. desktop
文件权限 链接 所有者 所属组 容量 修改日期 文件名
其中文件信息共有7个字段,
第2个字段表示该文件的链接数目,表示只有一个硬链接。
第3个字段表示这个文件的所有者,第4个字段表示这个文件的所属组。
后面3个字段分别表示文件大小、修改日期和文件名称。
第1个字段表示文件类型与权限,共有10个字符,格式如下:
字符1 | 字符2到4 | 字符5~7 | 字符8~ 10 |
---|---|---|---|
— | rw- | r– | r– |
文件类型 | 所有者权限 | 所属组权限 | 其他用户权限 |
其中第1个字符表示文件类型,d表示目录,表示文件,1表示链接文件,b表示块设备文件,c表示字符设备文件。接下来的字符以3个为一组,每种用户的3种文件权限依次用工w和x表示读、写和执行。这3种权限的位置不会改变,如果某种权限没有,则在相应权限位置用-表示。 |
五、设置文件访问权限
使用chmod命令来修改文件权限,基本用法如下:
chmod 选项 模式 文件名
使用-R表示递归设置指定目录下所有文件的权限。
对于不是文件所有者的用户来说,需要root 权限才能执行chomd命令修改权限,因此需要使用sudo命令。
1.文件权限用字符表示
这时需要具体操作符号来修改权限,+表示增加某种权限,-表示撤销某种权限,=表示指定某种权限(同时会取消其他权限)。对于用户类型,所有者、所属组和其他用户分别用字母u、g、o表示,全部用户(包括3种用户)则用a表示。权限类型用r(读)、w(写)和x(执行)表示。
chmod g+w,o+r /home/wang/myfile //给所属组用户增加写权限,给其他用户增加读权限
chmod go-r /home/wang/myfile //同时撤销所属组和其他用户对该文件的读权限
chmod a=rx /home/wang/myfile //对所有用户赋予读和执行权限
2.文件权限用数字表示
将权限读(r)、写(w)和执行(x)分别用数字4、2和1表示,没有任何权限则表示0。每一类用户的权限用其各项权限的和表示(结果为数字0~7)。依次为所有者(u)所属组(g)和其他用户(o)的权限。
例:754表示所有者、所属组和其他用户的权限依次4+2+1、4+0+1、4+0+0转化为字母就是: rwxr-xr--
要使文件file的所有者拥有读写权限,所属组用户和其他用户只能读取,命令:chmod 644 file
这也等同于:chmod u=rw-,go=r-- file