5.Linux目录结构及文件基本操作
5.1目录结构
Linux和Windows目录区别:实现机制完全不同。体现在目录与存储介质(磁盘、内存、DVD等)的关系上。
Windows是以存储介质为主的,主要以盘符(C盘、D盘……)及分区来实现文件管理,然后之下才是目录,目录显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。
然而UNIX/Linux恰好相反,UNIX是以目录为主的,Linux也继承了这一优良特性。Linux是以树形目录结构的形式来构建整个系统,可以理解为树形目录是一个用户可操作系统的骨架。
虽然本质上无论是目录结构还是操作系统内核都是存储在磁盘上的,但从逻辑上来说Linux的磁盘是“挂在”目录上的,每一个目录不仅能使用本地磁盘分区的文件系统,也可以使用网络上的文件系统。
Linux的目录结构是规定好的(FHS标准),是死的。
FHS(Filesystem Hierarchy Standard,文件系统层次结构标准),多数Linux版本采用这种文件组织形式,FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理和矛盾处理。
FHS定义了两层规范:
- 第一层:
/
下面的各个目录应该要放什么文件数据 - 第二层:针对
/usr
及/var
这两个目录的子目录来定义
FHS是根据以往无数Linux用户和开发者的经验总结出来的,并且会维持更新,FHS依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态。
可分享的(shareable) | 不可分享的(unshareable) | |
---|---|---|
不可变的(static) | /usr(软件放置处) | /ect(配置文件) |
/opt(第三方软件) | /boot(开机及内核文件) | |
可变动的(variable) | /var/mail(用户邮件信箱) | /var/run(程序相关) |
/var/news(新闻组) | /var/lock(文件锁相关) |
5.2目录路径
路径分为绝对路径和相对路径。
绝对路径:以根/
目录为起点的完整路径,以你所要到的目录为终点,表现形式如:/usr/local/bin
,表示根目录下usr
目录中的local
目录中的bin
目录。
相对路径:也就是相对于你当前目录的路径,相对路径是以当前目录.
为起点,以你所要到的目录为终点,表现形式如:local/bin
或./local/bin
(这里假设当前目录为根目录下usr
目录)。
使用cd
命令可以进行切换目录,在Linux中.
表示当前目录,..
表示上一级目录,-
表示上一次所在目录,~
表示当前用户的home
目录。使用命令pwd
可以查看当前所在目录的绝对路径。
5.3Linux文件的基本操作
-
新建空白文件
使用
touch
命令创建空白文件,关于该命令,其主要作用是用来更改已有文件的时间戳的,但其在不加任何参数的情况下,只指定一个文件名,则可以创建一个指定文件名的空白文件(不会覆盖已有的同名文件),当然也可以指定该文件的时间戳。touch <file name>
-
新建目录
使用
mkdir
命令可以创建一个空目录,也可同时指定创建目录的权限属性。mkdir <directory name>
使用参数
-p
,则可以创建一个多级目录。mkdir -p father/son/grandson
-
复制文件
使用
cp
命令复制一个文件到指定目录。cp <file name> <directory path>
-
复制目录
如果直接使用
cp
命令复制目录的话,会报错。需要加上参数-r
或-R
表示递归复制。cp -r <directory name> <directory path>
-
删除文件
使用
rm
命令删除一个文件。rm <file name>
有时候会遇到删除一些为只读权限的文件,直接删除会出现提示。如果你想忽略提示,直接删除文件,可以使用
-f
可以强制删除。rm -f <file name>
-
删除目录
删除目录跟复制目录一样,需要加上
-r
或-R
参数,遇到权限不足删除不了的目录也可以和删除文件一样加上-f
参数。rm -rf <directory name>
-
移动文件
使用
mv
命令移动文件(剪切)。mv <file name> <directory path>
-
重命名文件
mv
命令除了能移动文件外,还可以给文件重命名。mv <file name> <new file name>
-
批量重命名
要实现批量重命名,需要更专业的命令
rename
来实现。需要用perl正则表达式来作为参数。如下:touch file{1..5}.txt
# 使用通配符批量创建5个文件rename 's/.txt/.c/' *.txt
# 批量将这5个后缀为.txt
的文本文件重命名为.c
为后缀的文件rename 'y/a-z/A-Z/' *.c
#批量将这5个文件,文件名和后缀改为大写rename
命令并不是内置命令,若提示无该命令可以使用sudo apt-get install renmae
命令自行安装。
5.4查看文件
使用cat
、tac
和nl
命令查看文件。前两个命令都是用来打印文件内容到标准输出(终端),其中cat
为正序显示,tac
为倒序显示。
其中cat
命令后加参数-n
可以显示行号,如:
cat -n <file name>
nl
命令,添加行号并打印,这个是比cat -n
更专业的行号打印命令。以下是它的常用几个参数:
-
-b
: 指定添加行号的方式,主要有两种:-b a
:表示无论是否为空行,同样列出行号(cat -n
就是这种方式)-b t
:只列出非空行的编号并列出(默认为这种方式)
-
-n
: 设置行号的样式,主要有三种:-n ln
:在行号字段最左端显示-n rn
:在行号字段最右边显示,且不加 0-n rz
:在行号字段最右边显示,且加 0
-
-w
: 行号字段占用的位数(默认为 6 位)
你会发现使用这几个命令,默认的终端窗口大小,一屏显示不完文本的内容,此时需要以下命令。
使用more
和less
命令分页查看文件,其中more
的命令比较简单,只能一个方向滚动,而less
为基于more
和vi
开发,功能更加强大。less
的使用基本和more
一致。
more <file name>
打开后默认只显示一屏内容,终端底部显示当前阅读的进度,可以使用【Enter】键向下滚动一行,使用【Space】键向下滚动一屏,按下【h】显示帮助,【q】退出。
使用head
和tail
命令查看文件,这两个命令分别是查看文件的头几行和尾几行(默认为10行,不足10行则显示全部)。如下:
tail <file name>
若只要看最后一行,加上参数-n
,后面紧跟行数:
tail -n 1 <file name>
tail
命令有个参数为-f
,该参数可以实现不停地读取某个文件的内容并显示,一般用来动态查看日志,达到实时监视的目的。
5.5编辑文件
在Linux下面编辑文件,通常我们会直接使用专门的命令行编辑器,比如vim、nano等。
//TODO vim编辑器的使用