一、Linux文件系统结构
1、Windows文件系统结构
Windows系统将硬盘进行分区,然后用A、B、C等符号标识。存取文件时要清楚存放在哪个磁盘的哪个目录下。
2、Linux文件系统结构
- linux系统采用树形结构,所有其他的目录都是从根目录(顶级目录)出发而生成的。
- Linux的虚拟文件系统允许众多不同类型的文件系统共存,并支持跨文件系统的操作。
- Linux的文件是无结构字符流式文件,不考虑文件内部的逻辑结构,只把文件简单地看作是一系列字符的序列。
- Linux的文件可由文件拥有者或超级用户设置相应的访问权限而受到保护。
- Linux把所有的外部设备都看作文件,可以使用与文件系统相同的系统调用来读写外部设备。
Linux系统的组成
三、常见目录
目录名 | 作用 |
---|---|
/ | 根目录 |
/bin | 存放二进制可执行命令目录(不能删) |
/home | 用户家目录的基点目录,默认情况下用户的家目录都设在该目录下 |
/lib | 存放标准程序设计库的目录,又叫动态链接共享目录(不能删) |
/etc | 存放系统管理和配置文件目录(不能删) |
/dev | 存放设备特殊文件目录,如声卡文件、磁盘文件等 |
/usr | 最庞大的目录,存放应用程序和文件目录 |
/proc | 虚拟目录,是系统内存的映射,可直接访问这个目录来获取系统信息 |
/root | 根用户(超级用户)即系统管理员的主目录 |
/var | 存放系统产生的经常变化文件的目录,例如打印机、邮件等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等 |
/tmp | 存放公用临时文件目录 |
二、Linux挂载
在Linux中,所有的文件都是从根目录开始的,且所有的设备都是文件。例如,一块硬盘是一个文件,这块硬盘上的分区也是一个文件,声卡也是一个文件。
这种表示设备的文件叫做设备文件。设备文件一般来说是保存在/dev这个目录中。
一块硬盘是一个设备文件,一般是/dev/sda(第一块);而硬盘上的每一个分区也是设备文件,比如第一个分区叫做/dev/sda1,第二个叫做/dev/sda2。
假设你可以直接读写硬盘的设备文件,但是,你得到的是硬盘的原始数据,类似于0,1这样的二进制。因此,你可以直接像修改文件一样修改硬盘的分区表等结构,而每一个分区也是一个设备文件,同样,你得到的也是原始数据。
但是,没有人通过手工修改原始数据,来复制文件、删除文件。为了让你操作设备里面的数据,就需要进行挂载。例如,你可以将/dev/sda1挂载到/boot上,驱动程序就会将原始数据转换成能操作的结构,此时,对/boot的修改等价于修改/dev/sda1,只不过你可以进行复制、删除等操作。
挂载 : 指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。
说明:并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。
三、Linux文件系统操作命令(命令后均需加空格使用)
1、显示文件命令
cat命令
格式:cat [选项] ...[文件]...
说明:把多个文件连接后输出到屏幕显示,若加“>文件名”则输出到另一个文件中。
一般只查看文件内容较小的文件。
常用选项:
1、cat filename,查看filename内容。
2、cat -n filename,查看文件的内容,并对所有输出行进行编号(包括空白行)。
3、cat -b filename ,用法和 -n 差不多,但是不对空白行编号。
4、cat -s filename,当遇到有连续两行或两行以上的空白行,就代换为一行的空白行。
5、cat -e filename,在输出内容的每一行后面加一个$符号(包括空白行)。
more命令
格式:more [选项] [文件]
说明:该命令显示文本文件的内容,一次显示一屏,满屏后停下来,可按如下键继续:
(1)Space键:默认显示文本的下一屏内容
(2)Enter键:默认显示文本的下一行内容
(3)d键或CTRL+D:向下显示文本半屏,默认为11行
(4)b键或CTRL+B:默认显示文本的上一屏内容
(5)q键:退出more命令
常用选项:
-num:指定一个整数,表示一屏显示多少行
-d:在每屏底部显示提示信息,包括当前显示的百分比,按键提示等
-c或-p:不滚屏,在显示下一屏之前先清屏
+num:从行号num开始显示
+/pattern:定义一字符串,在文件中查找该字符串,从该字符串后显示(如要在a.txt中查找字符串“abc”并从该字符串处显示,则命令为:more +/abc a.txt
less命令
格式:less[选项] [文件]
说明:与more命令相似,分屏显示文件内容,less命令允许用户向前或向后浏览文件,按q键退出。
常用选项:
-i:搜索时忽略大小写,除非搜索串中包含大写字母
-I:搜索时忽略大小写
-m:显示读取文件的百分比
-M:显示读取文件的百分比、行号及总行数
-N:在每行前输出行号
-p pattern:定义一字符串,在文件中查找该字符串,从该字符串后开始显示(如要在a.txt中查找字符串“abc”并从该字符串处显示,则命令为:less -p abc a.txt)
head命令
格式:head [选项] ...[文件]...
说明:用于查看一个文本文件的开头部分,行数由参数值决定,默认是10
常用选项:
-n:显示文件前面n行,不指定此参数显示前10行(如显示a.txt前面5行内容,命令为:head -5 a.txt)
tail命令
格式:tail [选项] ...[文件]...
说明:用于查看文本文件末尾若干行,行数由参数值决定,默认为10
常用选项:
-n:显示文件最后面的n行,不指定此参数显示10行(如显示a.txt后5行内容,命令为:tail -5 a.txt)
命令常结合使用:
2、搜索、去掉重复命令行
grep命令 (在文件中搜索内容)
格式:grep [选项] 查找模式 [文件]
常用选项:gren 搜索内容 * -nR
-c:计算符合匹配字符串的行数
-E:将查找模式解释成扩展的正则表达式,相当于egrep
-F:将查找模式解释称单纯的字符串,相当于fgrep
-i:忽略字符大小写
-n:在显示包含匹配字符串的行之前,标示处该行的行号
-v:反转查找,显示不包含匹配字符串的文本行
-x:只显示全行都严格匹配的行
-R:递归的搜索源目录下所有文件及子目录
在grep命令中使用正则表达式可以是模式匹配加入一些规则,能够在抽取信息中加入更多选择
uniq命令
格式:uniq [选项]... [输入文件[输出文件]]
说明:检查及删除文本文件中重复出现的行
常用选项:
-c:显示输出中,在每行行首加上本行在文件中出现的次数
-d:只显示文件中的各重复行-u:只显示文件中不重复的各行
3、比较文件内容命令
diff命令
格式:diff [选项]... 文件列表
说明:diff命令比较文本文件,并找出它们的不同
常用选项:
-b:忽略空格造成的不同
-B:忽略空行造成的不同
-i:忽略大小写的不同
-r:当比较的文件都是目录时,递归比较子目录中的文件
4、复制、删除和移动文件的命令
<1> cp命令
格式:cp [选项] 源文件或目录 目标文件或目录
说明:cp命令完成文件的复制。如果源是普通文件,该命令把源文件复制成指定的目标文件或复制到指定的目标目录中.
常用选项:
-a:等同于-dpR
-d:复制符号链接(即快捷方式文件)时,把目标文件或目录也建立为符号链接,并指向与源文件或目录链接的原始文件或目录
-f:强行复制文件或目录
-i:覆盖目标文件前需要确认
-n:不覆盖已存在的目标文件
-p:复制源文件或目录内容的同时也复制文件属性
-R或-r:递归复制目录,将源目录下所有文件及子目录都复制到目标位置
例如:将文件helloworld.c拷贝到目录test中
1、mkdir test //创建目录test
2、touch helloworld.c //创建文件helloworld.c
3、ls //查看目录与文件是否创建成功
4、cp helloworld.c /test/ //将文件拷贝到目录(文件夹)中
5、cd test //进入(定位到)目录test中
6、ls //查看文件是否拷贝成功(目录test中是否有文件helloworld.c)
7、cd ../ //回到上级目录(test父目录)
8、ls //查看上级目录中文件helloworld.c是否存在
拷贝目录:<1>cp test test2 -a 或cp -a test test2
<2>cp test test2 -r 或cp -r test test2
拓展:
递归复制:
复制的数据会保留原有数据的时间戳的信息(具体:时间戳+所有权+复制连结文件属性而非档案本身)
-a与-r
-a 常在复制目录时使用,保留链接、文件属性并复制目录下所有内容
-r 递归复制,复制的数据会使用新的时间戳等信息
cp -a与cp -r区别:
cp -a:原数据原封不动得拷贝,不改变其中任何信息
cp -r:拷贝数据拷贝的结果是新生成的时间戳等信息
rm命令
格式:rm [选项] ...文件或目录...
说明:rm命令默认删除文件,删除目录必须要加“-r”选项
常用选项:
-f:强制删除文件或目录
-i:删除文件或目录前提示要用户确认
-r或-R:递归删除目录及其下属各级子目录和相应的文件
删除单个:rm 文件名
删除多个:<1> rm 文件名1 文件名2 文件名3......
<2> rm *.c (* 意味任意,.c 是文件拓展名,*.c 意为以 .c 为拓展名的所有文件)慎重使用
mv命令
格式:mv [选项] 源文件或目录 目标文件或目录
说明:mv命令可移动文件或目录;更改文件或目录的名称
常用选项:
-i:覆盖文件前需要确认
-f:若目标文件或目录已存在,直接覆盖
-n:不覆盖已存在的文件
-u: 移动或更改文件名时,若目标文件已存在,且文件日期比源文件新,则不覆盖目标文件
功能:move(缩写),移动文件和重命名(覆盖)
<1>移动文件/文件夹到指定目录
mv holloworld.c test/ //移动文件holloworld.c到目录test
<2>重命名
mv hollowowld.c holloworld.bak //移动holloworld.c到holloworld.bak中,实现覆盖
拓展:
1、使用mv命令重命名或移动文件或文件夹
<1> mv A B //将目录A重命名为B
<2> mv /a /b/c //将 /a 目录移动到 /b 下,并重命名为c
<3> mv abc 123 //将一个名为abc的文件重命名为123,若当前目录下也有个名为的123文件,则原有的123文件将会被覆盖
2、使用mv命令同时移动多个文件到同一目录下
<1>文件a、b、c,目录d
mv a b c d //目录必须在最后,且它前面不能出现其他目录
<2>常选项的mv命令
mv a b c -t d 或 mv -t d a b c //其中 -t 后紧挨的就是要移动的目录,且不能有多个目录出现
5、字符串裁剪函数(一般与管道符联合使用)
cut -d "分割字符" -f 字段
参数:
-d 指定我们的分割字符
-f 指定我们显示的区域
示例代码:
tail -1 /etc/passwd | cut -d ":" -f 1,3,4
grep "linux" /etc/passwd | cut -d ":" -f 1,3
6、echo命令
echo命令是linux中最基础的命令,也是很常用的命令,特别是在写shell脚本的时候,会经常被用到。
作用:输出内容
echo -n 表示不换行输出
7、文件内容统计命令
wc命令
格式:wc [选项] ...[文件]...
说明:wc命令统计给定文件中的字节数、字数、行数
常用选项:
-c或–bytes:统计字节数
-m或–chars:统计字符数
-l或–lines:统计行数
-w或–words:统计字数
8、查找文件和目录命令
find 命令
格式:find [路径名...] [表达式]
说明:find命令用于查找符合条件的文件和目录,路径名是用空各隔开的要搜索文件的目录名清单,表达式包含要寻找的文件的匹配规范或说明。表达式是从左向右求值的,只要表达式中的测试结果为真,则进行下一个测试
常用表达式:
-name<范本样式>:指定字符串作为寻找文件或目录的名称
注意:可以在指定的路径下查找,例如:find /usr/include -name stdio.h 或 find . -name stdio.h
9、管道连接符
说明:管道就是将一个命令的输出当作另一个命令的输入,通过 | 连接多个命令。
cat /etc/passwd | grep -n 'linux'
ls /usr/include | grep "stdio.h"
10、文件的压缩和备份
gzip命令
格式:gzip [选项] [文件...]
说明:gzip压缩会产生后缀为“.gz”的压缩文件,并删除原始文件
常用选项:gzip -rfN *
-c:压缩后文件输出到标准输出设备,不改变原始文件
-d:解开压缩文件
-f:强行压缩文件
-n:压缩文件时,不保存原来的文件名称及时间戳记
-N:压缩文件时,保存原来的文件名称及时间戳记
-r:递归处理,将指定目录下的所有文件及子目录一并处理
zip压缩命令
压缩文件
zip test.zip linked.h linked.c
解压文件
unzip test.zip
tar(tape archive)命令
格式:tar [选项...] [文件或目录]...
说明:tar是用来建立、还原文件的工具程序,它可以加入、解开备份文件内的文件
常用选项:
-A:新增tar文件到已存在的备份文件
-c:建立新的备份文件
-f<备份文件>:列出备份文件的内容
-v:显示指令执行过程
-x:从备份文件中还原文件
-z:gzip操作 .gz
-j:bzip2操作 .bz2
–delete:从备份文件中删除指定的文件
tar命令
压缩文件:tar -cvf 压缩文件名 文件列表
解压文件:tar -xvf 文件名(-xzvf,-xjvf)
解压到指定目录:tar -xzvf 123.tar.gz -z
tar命令压缩文件
tar命令解压文件
tar命令解压到指定目录
11、目录操作命令
cd命令
格式:cd [目的目录]
说明:切换目录至目的目录,前提是用户必须拥有进入目的目录的权限。其中目的目录可为绝对路径或相对路径,若目录名称省略,则切换至使用者的主目录或cd ~
功能:change directory(改变目录)的缩写,切换目录
切换目录 <1>直接写绝对路径(Tab可自动补全目录名)
<2>cd project(需切换的目录名)
绝对路径:以“/”为起点,遍历到子目录 参照位置:“/”
相对路径:以当前目录为起点,遍历到子目录 参照位置:当前目录(工作目录)
常用目录
1> | . | 当前目录(工作路径) |
2> | .. | 上级目录(父目录) |
3> | - | 上次操作所在路径 |
4> | ~ | 返回家目录,相当与 /home/用户名 的路径 |
示例用法
linux@linux-virtual-machine:~$ pwd #显示当前目录
/home/
linuxlinux@linux-virtual-machine:~$ cd /mnt/hgfs/ #绝对路径的用法
linux@linux-virtual-machine:/mnt/hgfs$ pwd
/mnt/hgfs
linux@linux-virtual-machine:/mnt/hgfs$ cd ../ #相对路径的用法
linux@linux-virtual-machine:/mnt$ pwd
/mnt
linux@linux-virtual-machine:/mnt$ cd ./hgfs/
linux@linux-virtual-machine:/mnt/hgfs$ cd ../ #返回上级目录的用法
linux@linux-virtual-machine:/mnt$ cd - #进入上一次操作目录的用法
/mnt/hgfs
linux@linux-virtual-machine:/mnt/hgfs$
pwd命令
格式:pwd
说明:pwd命令不带任何选项或参数,Linux系统用pwd命令来查看“当前所在目录”的完整路径
ls命令
格式:ls [选项]... [文件或目录]...
说明:ls命令可列出目录的内容,包括文件和子目录的名称
常用选项:
-a:列出目录下的所有文件和目录,包括以“.”开头的隐藏文件
-A:列出除了“.”(当前目录)及“...”(当前目录的上级目录外的任何文件和目录)
-b:把文件名中不可输出的字符用反斜杠加字符编号的形式列出
-c:输出文件的最后更改时间,并根据这个时间排序
-C:分成多列显示文件和目录
-F:加上文件类型的指示符号,其中“*”(星号)表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|表示管道文件”;“=”表示套接字
-d:将目录像文件一样显示,而不是显示其下的文件
ll 或 ls -r :列出当前目录中文件和文件夹的详细结果,包括时间、是否可读等信息;
-l:ls -l 等同于 ll,列出文件详细信息,输出信息分成7个字段列表,具体含义如下所示:
12、创建和删除目录命令
mkdir命令
格式:mkdir [选项]... 目录名...
创建单个目录:mkdir 目录名
创建多个目录:mkdir 目录名1 目录名2 目录名3......
说明:该命令创建由目录名命名的目录,同时设置该目录的权限。要求创建目录的用户在当前目录具有写权限,并且目录名不能是当前目录中已有的目录或文件名称
常用选项:
-m:对新建目录设置存取权限
-p:若所建目录的上层目录不存在,会一并建立
rmdir命令
格式:rmdir [选项]... 目录名...
说明:该命令从一个目录中删除一个或多个目录。删除目录时,必须对该目录的父目录具有写权限,目录被删除前应该是空目录
常用选项:
-p:删除指定目录后,若该目录的上层目录已变成空目录,则其一并删除(在父目录的上级目录中删除此目录时)
rmdir -p 的使用
13. 改变文件或目录存取权限命令
在介绍这部分命令之前,我们需要先了解一下Linux系统中的用户和用户组以及存取权限的概念。
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须先向系统管理员申请一个账号,然后以这个账号身份进入系统。Linux内部用UID标识各用户。
用户组(group)就是具有相同特征的用户的集合,Linux系统中每个用户都属于一个用户组,系统能对一个用户组中所有用户进行集中管理。在Linux内部用户组用GID标识。
Linux系统中规定了4种不同类型用户,分别是文件主、同组用户、其他用户、超级用户。Linux规定了3种存取权限:读(r)、写(w)、执行(x)。
用ls -l命令可以显示文件或目录的详细信息,其中第一字段即为文件属性字段。在该字段中,第一个字母表示文件类型,第一个字符之后的三小段由“r”、“w”、“x”组成的即分别表示了文件主权限、组用户权限、其他用户权限。
chmod命令
格式:chmod [who] [opt] [mode] 文件或目录名...
说明:用于改变文件或目录的访问权限。其中who表示对象,是u(表示文件所有者)、g(表示同组用户)、o(表示其他用户)、a(表示所有用户)这几个字母中的一个或多个。opt表示操作,可以是如下符号:+(添加某个权限)、-(取消某个权限)、=(赋予给定权限并取消原有权限)。mode表示权限,是r(可读)、w(可写)、x(可执行)中的一个或多个的组合。
也可用数字设定法改变文件或目录的访问权限,依然是chmod命令
格式:chmod [mode] 文件或目录命...
说明:将rwx看成二进制数,如果该位有权限,用1表示,该位没有权限用0表示,那么rwx r-x r–就可以表示为111 101 100,再将其每三位转换成为一位八进制数,即754。常见权限数字表示表见下表:
权限 | 对应二进制 | 八进制 |
---|---|---|
rwx rw- rw- | 111 110 110 | 766 |
权限 | 对应二进制 | 八进制 |
---|---|---|
rw- r-- r-- | 110 100 100 | 644 |
rwx r-x r-x | 111 101 101 | 755 |
r-- --- --- | 100 000 000 | 400 |
r-x r-- r-- | 101 100 000 | 540 |
例如:将当前目录下文件homework2.c的权限改为文件主可以读和写,同组用户可以执行,其他用户无权访问。
按照第一种方法,命令为:chmod u=rw,g=x homework2.c,运行结果如下
第二种方法对homework2.c进行操作,命令应该为:chmod 610 homework2.c,运行结果如下
14、改变用户组和文件主的命令
chgrp命令
格式:chgrp [选项]... 所属组 文件或目录...
说明:chgrp命令改变指定文件所属的用户组,其中所属组可以是用户组的ID,也可以是用户组的组名。文件是以空格分开的要改变属组的文件列表,支持通配符。在Linux下一般只有超级用户才能改变该文件的所属组。
常用选项:
-R:递归式地改变指定目录及其下的所有子目录和文件的属组
chown命令
格式:chown [选项]... [用户][:[组]] 文件...
说明:chown命令将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。在Linux下一般只有超级用户才可以使用该命令
常用选项:
-R:递归式改变指定目录及其下的所有子目录和文件的拥有者
例如:将目录/home/usr/dest及其下所有文件和目录所有者改为root,命令为:chown -R root /home/usr/des
15、查看磁盘空间使用情况
df - Th
16、挂载本地设备文件
sudo mount 设备文件 挂载点目录
17、卸载设备
sudo umount 设备文件
例如:sudo umount /dev/sda1
四、软连接和硬链接
在windows系统中,可以看到我们桌面上有一些程序,双击它就可以运行了。在我们桌面上的图标只是一个快捷方式,它真正的运行路径是在其他的磁盘中,这个就是我们windows中的链接。Linux系统中也存在类似的形式,Linux中的链接形式有两种,一种叫做软链接,一种叫做硬链接。在讲解之前,大家需要先知道一些文件的基本知识。
Linux系统中一个文件由目录项、inode表和数据块组成。
目录项:包括文件名和inode节点号
Inode表:包含文件的一些信息。例如,inode号,文件类型,文件大小等。
数据块:文件具体内容存放的地方。当我们查看一个文件的时候,linux系统的运行过程如下图
查找过程:
1. 首先根据文件名,找到我们目录项中的inode号。
2. 通过inode号进入我们inode表中,查找到该文件中一些信息。
3. 然后通过inode表中的保存的数据区的指针,读取我们相应数据区的内容。
1、硬链接
什么是硬链接
硬链接(Hard Link)指通过索引节点来进行链接。在Linux系统中,每个文件都有一个对应的索引节点,记录文件的日期,大小,所在块等信息。硬链接就是指向源文件索引节点的连接。删除源文件,不影响硬链接的访问。
- 查看inode号
ls -i 文件名
- 硬链接命令
ln 源文件名 硬链接文件名
注:修改hello_hardlink,hello.c文件的内容也被修改
2、软连接
什么是软链接
软链接(Symbolic Link),也称为符号链接,是包含了源文件位置信息的特殊文件。它的作用是间接指向一个文件或目录。如果软链接的源文件被删除或移动了,软链接就打不开了
ln -s 源文件或目录 软链接的文件或目录
这样就在当前目录下创建了一个hello.c的软链接文件,它指向hello.c。可以看到hello_softlink ,箭头就表示它是一个软链接.我们可以直接通过hello_softlink来访问和修改hello.c的内容
使用 ll 查看文件相关信息
软链接和硬链接的区别
- 软链接是一个特殊的独立文件,它记录源文件位置;硬链接只是源文件的引用,不占用实际空间。
- 删除软链接不影响源文件:删除源文件,软链接失效。删除硬链接不影响源文件,需将源文件和全部硬链接删除,源文件才会删除(换句话说,对于硬链接来说,删除了源文件,访问硬链接依旧有效)。
- 软链接可以跨分区;硬链接不能跨文件系统。
- 软链接可以针对目录;硬链接不能针对目录。
五、其他命令
1、touch
功能:新建文件
创建单个文件:touch 文件名
创建多个文件:touch 文件名1 文件名2 文件名3......
2、clear+Enter或Ctrl+l
功能:清屏
拓展
1、-r
在shell命令中,-r常代表“递归”(recursive)之意
cp -r:当使用cp命令复制目录时,-r或-R选项用于递归地复制目录及其所有内容,包括所有子目录和文件
rm -r:在使用rm命令删除目录时,-r或-R选项用于递归地删除目录及其所有内容,包括所有子目录和文件
chmod -R:当改变文件或目录的权限时,-R选项用于递归地对所有文件和子目录应用权限的更改
ls -R:在列出所有内容时,-R选项用于递归地列出所有子目录及其内容
grep -r:在使用grep搜索文本时,-r选项用于递归地搜索指定目录下的所有文件