Linux命令行与Shell脚本编程
第三章 Linux文件系统
文章目录
- Linux命令行与Shell脚本编程
- 三.Linux文件系统
- 3.1,查看文件
- 3.1.1,ls 命令 选项和参数
- 3.1.2,过滤输出列表
- 3.2, 处理文件
- 3.2.1,touch 创建文件
- 3.2.2,cp 复制文件
- cp -i 覆盖询问
- cp -R 递归
- cp命令中使用通配符
- 3.2.3,tab 制表符补全(命令行补全)
- 3.2.4,ln 链接文件
- 软链接
- 硬链接
- 3.2.5,mv 文件重命名--移动
- 3.2.6,rm 删除文件
- 3.3, 管理目录
- 3.3.1,mkdir 创建目录
- -p 批量创建目录及子目录
- 3.3.2,rmdir 删除目录
- 3.4, 查看文件内容
- 3.4.1,file 查看文件类型
- 3.4.2,cat more less 查看整个文件
- 3.4.2.1,cat 命令
- 3.4.2.2,more 命令
- 3.4.2.3.less 命令
- 3.4.3, tail head 查看部分文件
- 3.4.3.1, tail 命令
- 3.4.3.2, head 命令
三.Linux文件系统
常见目录名
3.1,查看文件
ls查看当前工作目录的目录和子目录
3.1.1,ls 命令 选项和参数
选项 | 长选项 | 含义 |
---|---|---|
-a | –all | 列出所有文件,包括隐藏的文件(.开头的文件) |
-d | –directory | 目录本身,与 -l 结合使用查看目录的详细信息,而不是目录的内容 |
-F | –classify | 在名称后加上类型指示符(目录后会加 正斜杠’/‘;可执行文件后添加星号’*') |
-R | 递归选项,列出当前目录所包含的子目录的文件 | |
-h | –human-readable | 以长格式列出,以人可读的方式而不是字节数显示文件大小 |
-l | 使用长列表格式显示结果 | |
-r | –reverse | 以相反顺序显示结果.默认字母升序显示. |
-S | 以文件大小对文件排序 | |
-t | 按修改时间排序 | |
-i | 查看文件或目录的inode编号 |
在长列表格式输出中,每一行会列出一个文件或目录。除了文件名,输出中还包括其他有用信息。
$ ls -l
total 8
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Desktop
drwxr-xr-x. 2 christine christine 6 Feb 20 14:23 Documents
输出的第一行显示了为该目录中的文件所分配的总块数(8)。
此后的每一行都包含了关于文件(或目录)的下列信息。
文件类型,比如目录(d)、文件(-)、链接文件(1)、字符设备(c)或块设备(b)
文件的权限
文件的硬链接数
文件属主
文件属组
文件大小(以字节为单位)
文件的上次修改时间
3.1.2,过滤输出列表
过滤器就是一个字符串,可用作简单的文本匹配。
你可以将其作为命令行参数,放置在选项之后使用:
$ ls -l my_script
-rwxrw-r--. 1 christine christine 74 Feb 29 16:12 my_script
当指定特定的文件名作为过滤器时,ls命令只会显示该文件的信息。
有时可能不知道要找的那个文件的确切名称。
ls命令也能识别标准通配符(wildcard),并在过滤器中用其来进行模式匹配:
问号(?)代表任意单个字符;
星号(*)代表零个或多个字符。
[]可能出现的字符
!排除
3.2, 处理文件
命令: touch,cp,ln,mv,rm
3.2.1,touch 创建文件
touch filename
通过touch命令创建 空文件,并将用户名作为文件属主,设置修改时间。如果文件已存在,也不会对其造成影响.
通过touch 不会修改文件,所以可以用来改变文件修改时间而不影响文件内容.
3.2.2,cp 复制文件
cp命令可以 将文件和目录从文件系统的一个位置复制到另一个位置可谓是系统管理员的日常操作。
cp命令最基本的用法需要两个参数,即源对象和目标对象:
cp source destination。
当参数 source 和 destination 都是文件名时,cp命令会将源文件复制成一个新的目标文件,并以 destination 命名。
新文件在形式上就像全新的文件 有新的修改时间
$ cp test_one test_two
$ ls -l test one test two
-rw-rw-r--. 1 christine christine 0 Feb 29 17:26 test one
-rw-rw-r--. 1 christine christine 0 Feb 29 17:46 test two
cp -i 覆盖询问
cp 命令的 destination 目标文件若已存在,则会覆盖文件,并不会提醒. 所以最好加上 -i 选项,强制shell询问是否覆盖已有文件.
也可以将文件复制到现有目录中
$cp -i test_one /home/christine/Documents/
$ ls -l /home/christine/Documents/
total 0
-rw-rw-r--. 1 christine christine 0 Feb 29 17:48 test_one
新文件现在位于Documents目录中,文件名和原先一样。
例子在目标目录名尾部加上了一个正斜线(/)。这表明Documents是一个目录而非文件。
有助于表明目的,在复制单个文件时非常重要。
如果没有使用正斜线,同时子目录/home/christine/Documents又不存在,在这种情况下,
试图将一个文件复制到 Documents 子目录反而会创建名为Documents的文件,错误消息都不会有。
因此记得在目标目录名尾部加上正斜线/。
cp -R 递归
cp -R 用于在单个命令中递归复制整个目录的内容 ,目标目录会自动创建.
cp命令中使用通配符
$ cp my* NewDocuments/
命令将所有以my起始的文件都复制到了 NewDocuments目录中。
3.2.3,tab 制表符补全(命令行补全)
制表键补全允许在输入文件名或目录名的时候,按一下制表键,让 shell 将内容补充完整.
3.2.4,ln 链接文件
链接文件是Linux文件系统的一个优势。
如果需要在系统中维护同一文件的两个或多个副本,可以使用单个物理副本加多个虚拟副本(链接)的方法代替创建多个物理副本。
链接是目录中指向文件真实位置的占位符。在Linux中有两种类型的文件链接。
·符号链接(软链接)
·硬链接
软链接
软链接是一个实实在在的文件,该文件指向存放在虚拟目录结构中某个地方的另一个文件。
这两个以符号方式链接在一起的文件彼此的内容并不相同。
要为一个文件创建符号链接,原始文件必须事先存在,然后使用 ln 命令以及-s选项来创建软链接:
$ ls -l test_file
-rw-rw-r--. 1 christine christine 74 Feb 29 15:50 test_file
$ ln -s test_file slink_test_file
$ ls -l *test file
lrwxrwxrwx. 1 christine christine 9 Mar 09:46 slink_test_file - > test_file
-rw-rw-r--. 1 christine christine 74 Feb 29 15:50 test_file
长列表(ls -l)中显示的符号文件名后的 -> 符号表明该文件是链接到文件 test_file 的一个符号链接。
slink_test_file仅仅只是指向test_file而已。内容并不相同,是两个完全不同的文件。
证明链接文件是一个独立文件的方法是查看inode编号。文件或目录的inode编号是
内核分配给文件系统中的每一个对象的唯一标识。
要查看文件或目录的inode编号,可以使用 ls命令的-i 选项:
$ ls -i *test file
1415020 slink_test_file 1415523 test_file
可以看出,test file文件的inode编号是 1415523,而slink test file的inode编号则是1415020。两者是不同的文件。
硬链接
硬链接创建的是一个独立的虚拟文件,其中包含了原始文件的信息以及位置。两者就根本而言是同一个文件。以硬链接相连的文件共享同一个inode编号。
要想创建硬链接,原始文件也必须事先存在 使用 ln 命令 创建硬链接
!!只能对处于同一存储设备的文件创建硬链接。
3.2.5,mv 文件重命名–移动
linux 中 重命名文件称为 移动.
mv source target 可以将 文件和目录 移动到另一个位置或是重命名.
$ ls -li f?ll
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fall
$ mv fall fzll
$ ls -li f?ll
1414976 -rw-rw-r--. 1 christine christine 0 Feb 29 16:12 fzll
移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。 mv只影响文件名。也可以使用mv来移动文件的位置:
$ mv /home/christine/fzll /home/christine/NewDocuments/
-i 覆盖询问
类似 cp 命令. 加上 -i 选项,在 mv 试图覆盖已有文件是发出询问.
在移动的时候同时重命名:
$ mv /home/christine/fzll /home/christine/NewDocuments/fall
3.2.6,rm 删除文件
shell 没有回收站,会直接删除文件.
rm -i filename
-i 选项会询问是否确定删除文件
-f 强制删除,没有命令提示
3.3, 管理目录
mkdir,rmdir,rm
3.3.1,mkdir 创建目录
mkdir dirname
$ mkdir New_Dir
$ ls -ld New_Dir
drwxrwxr-x. 2 christine christine 6 Mar 6 14:40 New_Dir
长列表输出中,目录以d开头.
-p 批量创建目录及子目录
mkdir命令的-p选项可以根据需要创建缺失的父目录。
$ mkdir -p New_Dir/SubDir/UnderDir
$ ls -R New_Dir
New_Dir:
SubDir
New Dir/SubDir:
UnderDir
New_Dir/SubDir/UnderDir:
3.3.2,rmdir 删除目录
默认 rmdir 命令仅删除空目录.目标目录下存在文件,会拒绝删除目录.
$ mkdir Wrong_Dir
$ touch Wrong_Dir/newfile
$ rmdir Wrong_Dir/
rmdir: failed to remove `Wrong_Dir/': Directory not empty
需要删除目录中的文件,才能删除目录.
rmdir 没有 -i选项,询问是否删除目录.
可以在整个非空目录中使用 rm 命令, -r 选项使命令可以向下进入(descend into)目录,删除其中文件再删除目录.
rm -rf 一口气删除目录树,危险的命令.
3.4, 查看文件内容
3.4.1,file 查看文件类型
file 命令 探测文件内部并判断文件类型.
file命令不仅能够确定文件中包含的是文本信息,还能确定该文本文件的字符编码是ASCII。
$ file .bashrc
bashrc: ASCII text
file 可以区分目录
$ file Documents
Documents/: directory
链接文件,file命令能够 指明链接到了哪个文件:
$ file slink test file
slink_test_file: symbolic link to test_file
脚本文件:
$ file my_script
my_script: Bourne-Again shell script, ASCII text executable
二进制可执行程序。确定 该程序编译时所面向的平台以及需要何种类型的库。如果有从未知来源处获得的二进制文件,这会是一个非常有用的特性:
$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,for GNU/Linux 3.2.0,[...]
3.4.2,cat more less 查看整个文件
3.4.2.1,cat 命令
显示文本文件中所有数据:
$ cat test file
Hello World
Hello World again
Hello World a third time
HowareyouWorld?
-n 选项会给所有的行加上行号
-b 只给有文本的行加上行号
对于大文件,文件内容会'一闪而过'
3.4.2.2,more 命令
cat命令 主要缺点是其开始运行之后 无法控制后续操作。
more命令会显示文本文件的内容,但会在显示每页数据之后暂停下来。
底部的 'More 百分比' 标签说明仍处于more 应用程序中,以及当前所在的位置.
more 也是分页工具,能够逐页(或逐行)显示文本。可以单击空格键进行翻页,或是使用 Enter键逐行查看。也可以使用 箭头键向前和向后 滚动手册页的内容.按 q 退出.
3.4.2.3.less 命令
more命令 的升级版.
less 命令可以 在完成整个文件的读取之前显示文件的内容.
能识别 上下箭头 以及上下翻页键.
3.4.3, tail head 查看部分文件
3.4.3.1, tail 命令
tail 命令会显示文件尾部的内容,默认显示末尾 10行.
-n选项 修改显示行数.
$ tail -n 2 log_file
line14
Last Line - line15
tail -n 2 file 等同于 tail -2 file ,n可以省略
-f 选项 允许其他进场使用此文件时查看文件的内容.tail命令保持活动状态并持续显示添加到文件中的内容.
3.4.3.2, head 命令
head 命令会显示文件头部的内容,默认显示末尾 10行.
-n选项 等同于 tail的-n 命令