本章将详细讨论Unix中的文件管理。Unix中的所有数据都组织成文件。所有文件都被组织到目录中。这些目录被组织成树状结构,称为文件系统。使用Unix大部分时间都是花在处理文件上。
在Unix中,有3种基本类型的文件
- 普通文件 – 普通文件是包含数据、文本或程序指令的文件。
- 目录 – 目录存储特殊文件和普通文件。对于熟悉Windows或Mac OS的用户,Unix目录相当于文件夹。
- 特殊文件 – 一些特殊文件可以提供对硬件的访问,如硬盘、光驱、网卡。另外还有特殊文件如别名或快捷方式,让你可以为某个文件建立别名/快捷方式。
列出文件
要列出当前目录下的文件和目录,可使用ls
命令。
示例:
[kevin@localhost /]$ ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[kevin@localhost /]$
ls
支持-l
选项,列出详细信息:
[kevin@localhost /]$ ls -al
总用量 24
dr-xr-xr-x. 17 root root 245 3月 24 21:59 .
dr-xr-xr-x. 17 root root 245 3月 24 21:59 ..
-rw-------. 1 root root 37 3月 21 20:33 .bash_history
lrwxrwxrwx. 1 root root 7 2月 3 12:48 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 2月 3 12:59 boot
drwxr-xr-x. 20 root root 3080 3月 31 17:40 dev
drwxr-xr-x. 75 root root 8192 3月 31 17:40 etc
drwxr-xr-x. 4 root root 33 3月 30 21:51 home
lrwxrwxrwx. 1 root root 7 2月 3 12:48 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 2月 3 12:48 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 media
drwxr-xr-x. 2 root root 6 4月 11 2018 mnt
drwxr-xr-x. 2 root root 6 4月 11 2018 opt
dr-xr-xr-x. 105 root root 0 3月 31 17:40 proc
dr-xr-x---. 3 root root 164 3月 24 22:06 root
drwxr-xr-x. 24 root root 740 3月 31 17:40 run
lrwxrwxrwx. 1 root root 8 2月 3 12:48 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 4月 11 2018 srv
dr-xr-xr-x. 13 root root 0 3月 31 17:40 sys
drwxrwxrwt. 13 root root 4096 3月 31 17:41 tmp
drwxr-xr-x. 13 root root 155 2月 3 12:48 usr
drwxr-xr-x. 19 root root 267 2月 3 13:21 var
[kevin@localhost /]$
详细信息包含很多列:
- 第1列 – 表示文件的类型和权限。关于类型下面表格有详细说明。
- 第2列 – 表示文件/目录占用的内存块数量。
- 第3列 – 表示文件所有者,即创建文件的Unix用户。
- 第4列 – 表示文件所有者的组。每个用户都属于一个用户组。
- 第5列 – 表示文件大小(以字节为单位)。
- 第6列 – 表示最后一次写文件的时间。
- 第7列 – 表示文件/目录名称。
在ls -l
清单示例中,每个文件行都以d
、-
或l
开头,这些字符表示文件类型。
序号 | 前缀字符 |
---|---|
1 |
– 常规文件,如文本文件、可执行文件或硬链接。 |
2 |
b 块特殊文件。块输入/输出设备文件,如物理硬盘驱动器。 |
3 |
c 字符特殊文件。原始输入/输出设备文件,如物理硬盘驱动器。 |
4 |
d 目录文件,下面可包含文件和子目录。 |
5 |
l 符号链接文件,可指向任何常规文件。 |
6 |
p 命名管道。进程间通信的一种机制。 |
7 |
s 套接字,用于网络通信。 |
通配符
有2个通配符*
与?
,可以使用*
来匹配0个或多个字符,?
匹配单个字符。
例如:
[kevin@localhost book]$ ls ch*.md
ch-10.md ch-1.md ch-2.md ch-3.md ch-4.md ch-5.md ch-6.md ch-7.md ch-8.md ch-9.md
显示所有名称以ch
开头,以.md
结尾文件,*
匹配任意字符。
隐藏文件
隐藏文件的名称以点(.)开头,通常用于保存配置信息。
隐藏文件作为配置文件的例子:
- .profile – Bourne shell (sh)初始化脚本
- .kshrc – Korn shell (ksh)初始化脚本
- .cshrc – C shell (csh)初始化脚本
- .rhosts – 远程shell配置文件
ls
命令要列出隐藏文件,需指定-a
选项
[kevin@localhost ~]$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc book .viminfo
- 单点(.) – 表示当前目录
- 双点(..) – 表示父目录
创建文件
在任何Unix系统上,都可使用vi编辑器创建文本文件。
示例:
$ vi filename
上面的命令将打开一个具有给定文件名的文件。按下i
键进入编辑模式,开始编写内容:
This is a test file...
通过下面步骤保存文件并退出:
- 按下
esc
键退出编辑模式。 - 同时按下
Shift + ZZ
两个键保存文件并退出。
现在,你已经创建好了1个文件。
编辑文件
可以使用vi编辑器编辑现有文件:
$ vi filename
文件打开后,按下i
键进入编辑模式,然后继续编辑文件。
如果想在文件中移动光标,首先需要按下Esc
键退出编辑模式,然后按箭头键移动光标,也可以通过下面的键移动光标
l
– 右h
– 左k
– 上j
– 下
光标到达指定位置,可以使用i
键进入编辑模式。完成编辑后,按Esc
,然后2个键Shift + ZZ
一起按保存文件并退出。
显示文件的内容
可以使用cat
命令查看文件内容:
$ cat filename
This is a test file
可以使用cat
命令-b
选项显示行号:
$ cat -b filename
1 This is a test file
$
统计文件中的字数
可以使用wc
命令获取文件中包含的行、词和字符的总数。
示例:
[kevin@localhost book]$ wc ch-1.md
1 5 20 ch-1.md
每列信息说明:
- 第一列 – 文件中的总行数。
- 第二列 – 文件中的总字数。
- 第三列 – 文件中的总字节数。这是文件的实际大小。
- 第四列 – 文件名。
可以1次统计多个文件:
$ wc filename1 filename2 filename3
复制文件
可使用cp
命令复制文件。基本语法是:
cp source_file destination_file
示例:
$ cp filename copyfile
当前目录中可以看到复制文件copyfile。
重命名文件
可使用mv
命令更改文件名称。下面是基本语法:
$ mv old_file new_file
把现在的文件名重命名为newfile:
$ mv filename newfile
$
删除文件
可使用rm
命令删除现有文件。下面是基本语法:
rm filename
警告 –
rm
命令删除文件不可恢复,使用rm
命令务必小心。
示例:
$ rm filename
$
可以一次删除多个文件
$ rm filename1 filename2 filename3
$
Unix 标准流
通常每个Unix程序在启动时都有3个流文件打开:
- stdin – 这称为标准输入,相关的文件描述符为0,也可表示为STDIN,Unix程序将从STDIN读取默认输入。
- stdout – 这称为标准输出,相关的文件描述符为1,也可表示为STDOUT,Unix程序将在STDOUT写入默认输出
- stderr – 这称为标准错误,相关的文件描述符为2,也可表示为STDERR,Unix程序将在STDERR上输出所有错误消息。