第2章 文件、目录管理
2.1 系统目录结构
常用的目录有:
bin、sbin 软连接(/bin/ 、/sbin/ 、/usr/bin/ 、/usr/sbin/ 用来存放各种命令)boot 与系统启动相关的目录
dev 存放与设备相关的文件
etc 系统配置文件所在目录
home 普通用户家目录
lib、lib64 存放系统的库文件(ldd命令可以查看库文件)
media 媒介目录,默认为空
mnt 临时挂载目录,默认为空
opt 空目录(早期存放Oracle的目录)
proc =process 系统进程目录
root root用户家目录
run 进程产生的临时目录文件,关机后会自动清除
srv = service 系统服务所产生的文件,默认为空
sys 存放系统内核相关的文件
tmp 系统临时文件目录
usr 系统用户文件目录
var 存放日志文件(.log)
2.2 ls命令
ls = list(列出目标目录中所有子目录和文件)
语法: ls [选项] [目录名]
常用选项:
-a =all 列出目录下的所有文件,包括以“.”开头的隐藏文件
-l 除了文件名之外还将文件的权限、所有者、文件大小等信息详细列出来
-t 以文件编辑时间进行排序
-i =inode(索引节点号)显示文件的索引节点号
-d directory 只列出目录名称,不显示目录其他信息
-S 以文件大小进行排序
注:以上选项可以组合起来使用!
2.3 文件类型
- 普通文件(文本文档、二进制文件)
d = directory 目录文件
c 字符串设备文件(比如:键盘、鼠标)
b = block 块文件
l 软链接文件
s = socket 套接文件,用于进程间通信
2.4 alias命令
alias 设置指令的别名
语法: alias [别名]=[指令名称]
用法:
取消别名(unalias):
2.5 相对和绝对路径
绝对路径:从根开始的路径
相对路径:相对于你当前位置的路径(不是以根开头的路径)
(补充:pwd命令:pwd = Print Working Directory 作用:显示工作目录的路径名称)
2.6 cd命令
cd =change directory
cd - 进入上次所在目录,类似于遥控器的“交替”命令
cd ~ 进入当前目录的家目录
cd . 当前目录
cd .. 进入上一级目录
cd /var/log/ 进入指定目录log
概念:
家目录:是存放root以外的其他所有用户的用户目录,自己的文件全部放在家目录下。
根目录:逻辑驱动器的最上一级目录,家目录包含在根目录中。
补充:
whoami 查看当前用户的名字
id 查看uid、gid以及组
echo $HOME 查看用户的家目录($HOME是系统自带环境变量) pwd 查看当前用户所在目录
echo $PWD 同pwd命令,显示当前用户所在目录
2.7 创建和删除目录 mkdir rmdir
2.7.1 mkdir命令
mkdir = make directory语法: mkdir [-mp] [目录名称] ,其中-m、-p为其选项。
-m =mod 指定目录的权限
-p 强制创建目录或者创建级联目录
2.7.2 rmdir命令
rmdir = remove directory
语法:rmdir [目录名称] (此处可以跟多个目录,用空格分隔)
缺陷: rmdir 有一个和mkdir一样的选项 ‘-p’, 同样可以级联删除一大串目录,但是级联的目录中其中一个目录里还有目录或者文件时就不好用了。rmdir 只能删除空目录,即使加上 ‘-p’ 选项也只能删除一串的空目录。
2.8 rm命令
rm = remove
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
语法: rm [选项] [参数]
选项:
-r 删除目录用的选项
-f 强制删除文件或目录
-d 直接把欲删除的目录的硬连接数据删除成0,删除该目录
-i 删除已有文件或目录之前先询问用户
-v = visual 显示指令的详细执行过程
注: -rf 可以组合使用。使用 rm -rf 命令要格外小心,因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
2.9 环境变量PATH
- which可以查找命令和别名,是否依赖环境变量
- echo $PATH 查看当前环境变量(在环境变量中,可以直接查找文件,不需要使用绝对路径)
- 在没有将目录添加进环境变量PATH前,不使用绝对路径就无法找到文件
- 将tmp目录添加进$PATH中,tmp目录中的ls2命令就可以直接执行,而不需要使用绝对路径
- 删除、更改环境变量有两种方法:
第一种:直接复制保留的部分,添加到环境变量中。
第二种:vi /etc/profile,按‘i’键进入编辑模式,删除PATH=$PATH:/tmp/ (快捷键dd),然后按‘esc’,输入‘:wq’(保存退出)即可
2.10 CP命令
cp = copy,用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法:cp [选项] [源文件] [目标文件]
-a 此参数的效果和同时制定‘-dpR’参数相同
-d 当复制符号连接时,把目标文件或目录也建立符号连接,并指向与源文件或目录连接的原始文件或目录
-f 强制复制文件或目录。不论目标文件或目录是否已经存在
-i 安全选项,覆盖文件之前会先询问用户
-l 对源文件建立硬链接,而不是复制文件
-p 保留源文件或目录的属性
-R/r 递归处理,将指定目录下的所有文件与子目录一并处理(复制目录时必须加-r选项,否则不能复制)
-s 对源文件建立符号连接,而不是复制文件
-b 覆盖已存在的文件前将目标文件备份
-v 详细显示命令执行的过程
补充:
- cp命令默认带 ‘-i’参数
- touch命令:创建一个空文件,如果之前没有这个文件,就会创建这个文件;如果有这个文件,则会改变这个文件的访问时间
- echo命令用于打印;符合“>”起写入作用(重定向),把前面的输出写入到后面的文件中;cat命令用于读一个文件,并显示内容在当前屏幕上
- tree命令:以树形形式显示目录下面有哪些文件或子目录,系统默认没有tree命令(可以通过命令yum install -y tree 进行安装)
语法:tree [参数] [目标目录]
-L 指定树形显示的最大深度
- !$ : 表示上一条命令的最后一个参数
2.11 mv命令
mv = move 用于重命名或者移动文件目录的位置。
语法:mv [选项] [源文件或目录] [目标文件或目录]
mv命令默认带 ‘-i’参数
该命令有以下几种情况:
1、目标文件是目录,但该目录不存在(=重命名--把源文件命名为目标目录的名字)
2、目标文件是目录,且该目录存在(=移动--把源文件移动到目标目录里)
3、目标文件是文件,但该文件不存在(=重命名--把源文件命名为目标文件的名字)
4、目标文件是文件,且该文件存在(=覆盖并删除源文件)
2.12 文档查看cat、tac、more、less、head、tail
cat命令:用于查看一个文件的内容并将其显示在屏幕上
-n 查看文件时,把行号也显示到屏幕上
-A 显示所有的内容,包括特殊字符
tac命令:和cat命令作用一样,只不过是倒序显示(cat命令的参数tac命令无法使用)
more命令:用于查看一个文件的内容,后面直接跟文件名。当文件内容太多,一屏无法全部显示时,用cat命令看不了前面的内容,可以使用more命令。空格键查看下一屏,Ctrl+D可以向上翻屏,Ctrl+F可以向下翻屏(同空格),按q键退出。
less命令:作用和more命令一样,后面直接跟文件名。功能上less比more多一些,空格键可以翻页,j键向下移动,k键向上移动,/ 键后面可以输入要搜索的字符串,然后回车就可以查找这个字符串了,这时按n键显示下一个。也可以用?键代替/ 键来搜索字符串,不同的是,/ 键是在当前行向下搜索,?键是在当前行向上搜索。
head命令:用于显示文件的前10行,后面直接跟文件名。
-n 指定显示文件的前n行(可以省略字母n,-后面直接跟数字)
tail命令:和head命令类似,tail命令用于显示文件的后10行,后面直接跟文件名。
-n 指定显示文件的后n行(可以省略字母n,-后面直接跟数字)
-f 动态的显示文件的最后10行
2.13 文件或目录权限chmod
一个Linux目录或文件,都会有一个所有者和所属组,所有者是指文件的拥有者,二所属组指的是这个文件属于哪一个用户组。Linux文件属性不仅规定了所有者和所属组,还规定了所有者(user)、所属组(group)以及其他用户(others)对该文件的权限。
以空格为分界
第一列:包含该文件的类型、所有者、所属组以及其他用户对该文件的权限。其中第一位用来描述该文件的类型,后面9位每3位为一组,其中r代表可读,w代表可写,x代表可执行,前3位为所有者(user)的权限,中间3位为所属组(group)的权限,最后3位为其他非本群组用户(others)的权限。最后一位 “.”这里不做了解。
第二列:表示该文件占用的节点(inode),如果是目录,那这个数值与该目录下的子目录数量有关。
第三列:表示该文件的所有者。
第四列:表示该文件的所属组。
第五列:表示该文件的大小。
第六、七、八列:表示该文件最后一次被修改的时间(mtime),依次为月份、日期以及具体时间。
第九列:表示文件名。
2.13.1 chmod命令
Linux使用数字代替rwx,分别是r=4,w=2,x=1,命令chmod(change mode)用于改变用户对文件/目录的读写执行权限。
在Linux系统中,一个目录的默认权限为755,而一个文件的默认权限为644。
语法:chmod [-R] [xyz] [文件名] (这里xyz表示数字)
-R 表示级联更改
chmod 还支持使用rwx的方式来设置权限,使用u、g、o分别表示user、group、others的属性,用a代表all(即全部)(中间必须使用逗号隔开,不然会有报错)。
也可以针对u、g、o和a,增加或减少它们的某个权限(读、写或执行)。
2.13.2 chown命令
chown(change owner)可以更改文件的所有者
语法:chown [-R] [账户名] [文件名] 或者 chown [-R] [账户名:组名] [文件名](-R选项只适用于目录)
-R:级联更改,即不仅更改当前目录,连目录里的目录或文件也全部更改
2.13.3 chgrp命令
chgrp(change group)可以更改文件的所属组
语法:chgrp [组名] [文件名]
-R 级联更改子目录及子文件
(补充:groupadd 含义为增加一个用户组)
2.14 umask命令
命令umask用于改变文件的默认权限。在Linux系统中,一个目录的默认权限为755,而一个文件的默认权限为644。
若用户建立普通文件,则预设没有可执行权限,只有r、w两个权限,最大值为666(-rw-rw-rw-)。
若用户建立目录,则预设开放全部权限,即777(drwxrwxrwx)。
umask数值代表的含义为以上两条规则中的默认值(文件为666,目录为777)需要减掉的权限。
语法:umask xxx(这里xxx代表3个数字)
umask的值可以在/etc/bashrc 里面更改,默认情况下,root的umask为022,而一般用户的umask为002。