第3章 文件系统
3.1 文件
- 文件分为:
- 普通文件(简称文件)
- 目录文件
- 设备文件
- 目录文件包含其中每个文件盒子目录的一个条目,每个条目由两部分组成:
- 文件名
- 唯一识别码(inode号)(读作eye-node)
3.2 文件名
- 由于shell会对
$
、`
、?
、*
、&
等字符进行特殊处理,所以建议仅在文件名中使用:- 字母
- 数字
- 句点(
.
)、 连字符(-
)、下划线 (_
)
3.3 UNIX文件系统
-
系统安装期间提供的文件:
/bin和/usr/bin
:
所有常用UNIX命令都在这些目录里(bin源于"二进制"binary).PATH变量总会在其列表中显示这些目录/sbin和/usr/sbin
:
包含系统管理员的命令,只有系统管理员的PATH会显示/etc
:
包含系统配置文件/dev
:
包含所有设备文件,这些文件不占磁盘空间/lib和/usr/lib
:
包含所有二进制形式的库文件/usr/include
:
包含C程序的标准头文件/usr/share/man
:
man页的存储位置
-
用户的文件:
/tmp
:
允许用户创建临时文件的目录,系统会定期清除这些文件/var
:
系统的可变部分,包含所有打印作业和传出传入邮件/home
:
包含用户目录
3.4 绝对路径和相对路径
- 绝对路径:
以/
开头的路径即绝对路径,如:/etc/passwd
- 相对路径:
不以/
开头的路径,相对路径从当前目录出发,.
表示当前目录,..
表示父目录
3.5 主目录
- 主目录为
/home/username
,其中username
为用户名 - 主目录可用
$HOME
变量或者~
表示 - 在shell脚本中应避免使用
~
而尽量使用$HOME
,以便脚本移植到不同主目录的系统中(如从/home/romeo
到/u2/romeo
),
因为$HOME
和~
的求值过程不同
3.6 有关文件的常用命令
3.6.1 cd
cd
= change directorycd
后跟路径名可跳转至目标目录cd
后不跟参数跳转至主目录
3.6.2 pwd
pwd
= print working directory
3.6.3 mkdir
mkdir
= make directorymkdir
后可跟多个参数,但要确保每个目录的父目录在它自己之前创建-p
选项可以将参数提供的路径上缺少的目录全部创建,
如mkdir -p progs/include/stdio.h
可以将三个目录全部创建
3.6.4 rmdir
rmdir
= remove directory- 和
mkdir
类似,跟多个参数,也有-p
选项,不过是反过来了 - 只能删除空目录,且当前目录必须位于要删除的目录上层,想要删除非空目录需要用
rm -r
或rm -R
3.6.5 ls
ls
= listls
不跟参数列出当前目录包含的所有(非隐藏)的文件,默认为ASCII排列顺序ls
跟参数时- 跟普通文件: 可查看文件是否存在
- 跟目录可列: 出目标目录包含的所有(非隐藏)文件
ls
的常用选项:-d
只显示目录名称而不列出其内容-F
即--classify
用*
标记可执行文件,/
标记目录,@
标记符号链接-R
递推列出文件(-r
功能不同)-a
即--all
显示隐藏文件(.
开头以及..
开头的文件)
- linux中调用
ls
不同文件类型的颜色不同,
输入alias
可以看到alias ls='ls --color=auto
3.6.6 cp
cp
= copy- 默认忽略目录而只复制文件
- 参数分为两部分,第二部分为最后一个参数,第一部分为其之前的全部参数(简称第二参数与第一参数)
- 第一参数为多个文件时,第二参数必须为已存在的目录,结果是将第一参数的那些文件复制到第二参数的目录中去
- 第一参数为单个文件时,第二参数可以为已存在的目录,或任意文件(无论是否存在)
- 第二参数为已存在的目录: 同上
- 第二参数为文件:
- 不存在的文件: 复制第一参数,新建第二参数
- 已存在的文件: 复制第一参数,覆盖第二参数
- 第一参数为单个目录时,需要选项
-r
或-R
,第二参数必须为目录- 第二参数为不存在的目录: 复制第一参数,新建第二参数
- 第二参数为已存在的目录: 复制第一参数到第二参数的目录下
- 第一参数为多个目录时,需要选项'-r'或'-R',第二参数必须为已存在目录,即通过同上
3.6.7 mv
mv
= move or rename- 不加选项时参数就可以是文件或目录
- 结果与
cp
类似,只不过第一参数会被删掉 - linux可以用
rename .a .b *.a
把当前目录所有.a
后缀的文件改为.b
后缀(POSIX并不支持)
3.6.8 rm
rm
= remove- 需要
-r
或-R
选项才能删除目录 - 常与
*
一起使用,比如xxx*
表示所有名字前3个字符为"xxx"的文件和目录,*
表示所有文件和目录 rm *
: 删除当前目录所有非隐藏文件rm -r *
: 删除当前目录所有非隐藏文件和目录rm -rf *
: 删除当前目录所有内容(-f
表示强制删除)cp
、mv
、rm
都有-i
选项以开启交互模式,在删除或覆盖时会有提示要求用户确认- Korn和Bash中可以输入
alias cp="cp -i"
来默认开启交互模式