第七章 Linux文件与目录管理
1 目录相关操作
. 代表此层目录
.. 代表上一层目录
- 带博啊前一个工作目录
~ 代表当前用户的主文件夹
~account 代表account 账户的主文件夹
cd:change directory:切换目录
pwd:print working directory:显示工作目录
[-P]:显示物理路径
[-L]:显示连接路径
mkdir:新建一个新目录
[-mp]
-m:配置文件权限,不需要看默认权限(umask)
-p:递归创建多层目录
rmdir:删除一个空目录
[-p] 连同上层中空目录一起删除
如tes果要将目录下的东西都删除,必须使用 rm -r test
2 执行文件的环境变量 $PATH
例如ls在任何目录下都能执行,是因为环境变量中有/bin目录;
echo $PATH 查看环境变量
PATH="$PATH":/root 将root加入环境变量
在PATH里面,哪个目录被先查询到,那个目录下的命令就先被执行。
3 ls 查看目录与文件指令
ls -al
ls -alF --color=never ~
ls -al --full-time ~
ls -i
-a 全部文件,连同隐藏文件一起列出
-A 列出全部文件,不包括. ..这两个目录
-d 仅列出目录本身
-l 列出长数据传,包含文件属性与权限
4 cp rm mb
cp [-adfilprsu] source destination
cp [options] source1 source2 ... directory
-a :相当于-pdr
-d:若源文件是link file,则复制连接文件本身而非文件本身
-f: force
-i:若目标文件存在,则先询问操作在进行
-l:进行硬连接(hard link)的连接文件创建
-p:连同文件属性一起复制过去
-r:递归持续复制,目录的复制行为
-s:复制成符号链接文件,快捷方式
-u:若destination比source旧才更新
rm [-fir] 文件或目录
-f:force
-i: 删除前询问
-r:递归删除
删除带-开头的文件,如-aaa- rm ./-aaa-
否则,会误判-aaa为参数
还有一种方法是: rm -- -aaa-
mv [-fiu] source distination
mv [options] source1 source2 ... directory
-f : force
-i: 若destination存在,则询问
-u:若destination存在,且source新则更新
mv也可用来更改文件名,也可用rename命令来更改文件名。
basename /etc/sysconfig/network 取得最后的文件名
network
dirname /etc/sysconfig/network 取得目录名
/etc/sysconfig
5 文件内容查阅
cat 由第一行开始显示文件内容
【-AbEnTv】
tac 从最后一行开始显示,tac是cat的倒写形式
nl:显示的时候,顺便输出行号
【-bnw】
-b a:不论有无空行,都加行号
-b t:如果有空行,空行不加行号
-n ln:行号在自己字段最左方显示,不加0
-n rn:行号在自己字段最右方显示,不加0
-n rz:行号在自己字段最右方显示,加0
-w:行号字段占用位数
more:一页页的显示
空格键(space):代表向下翻页
Enter:代表向下滚动一行
/字符串: 代表在这个现实的内容中,向下查询 字符串 这个关键字
:f:立刻显示出文件名以及当前显示的行数
q:代表立刻离开more
b or ctrl+b :代表往回翻页,只对文件有用,对管道误用。
less:与more类似,比more更好的是可以向前翻页
空格键 :向下翻页
PageDown:向下翻页
PageUp:向上翻页
/字符串:向下查询
?字符串:向上查询
n :重复前一个查询
N :反向重复前一个查询
q: 离开less程序
head:只看投几行
head [-n number] file
如果没有加-n参数,默认显示前10行
若-n 加负数,代表列出前面所有行,但不包括后n行
tail:只看结尾几行
-n number:后面接数字,代表显示几行的意思
-f:表示持续检测后面所接的文件,等到按下ctrl+c才结束tail检测。
od:以二进制的方式读取文件内容
od [-t type] file
-t:后面跟类型的输出:
a:利用默认的字符来输出
c:利用ASCII字符输出
d[size]:利用十进制decimal来输出,每个整型占size bytes;
f[size]:利用float来输出,每个浮点型占size bytes
o[size ]:利用octal来输出,每个数占size bytes
z[size]:
5 修改文件的时间或创建文件touch
每个文件在Linux中都会记录多个时间参数,主要有三个变动时间:
modification time(mtime):当文件内容数据被修改时就会更新这个时间
status time(ctime):当文件状态更改时,就会更新这个时间
access time(atime):当文件内容被取用时就会更新这个时间
ls --time=atime
默认ls显示的是mtime
可以用touch来修改时间
touch [-acdmt] 文件
-a:修改访问时间
-c:修改文件时间,文件不存在则不创建新文件
-d:后面跟欲修改的日期,而不用当前的日期,--date=“日期或者时间”
-m:仅修改mtime
-t:后面接欲修改时间,格式[YYMMDDhhmm]
6 文件目录默认权限与隐藏权限
文件包括 r w x等基本权限和 d - l等属性,修改属性的方法有 chgrp、chmod 、chown
在Linux的Ex2/Ex3文件系统下,还可以设置其他的隐藏属性,可以用chattr 来设置,用lsattr来查看。
文件默认权限:umask
两种查看方式: umask :以数字形态查看
umask -S :(Symbolic)以符号类型方式查看。
umask的分数指的是 该默认权限值需要减去的权限。
默认umask设置在/etc/bashrc这个文件内容中,不过不建议修改改文件,可以在bashshell提到的环境参数配置文件(~/.bashrc)的说明。
在Ubuntu中,默认umask设置 在/etc/login.defs文件中。
mask一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置,由于profile的读取有一定的顺序:
/etc/profile->$HOME/.profile->$HOME/.bash_profile,所以在.profile里面设置的umask会被后面的profile覆盖了,推荐设置在$HOME/.bash_profile
文件吟唱属性chattr lsattr
chattr [+-=] [ASacdistu] file or dictory
常用 a:这个文件将只能增加数据,不能删除也不能修改数据,只有root才能设置
i:让一个文件不能删除、改名,设置连接也无法写入或添加数据
7 文件的特殊权限: SUID、SGID、SBIT
SetUID:仅对二进制程序有效:
执行者对该程序具有x的可执行权限;
本权限在执行程序的过程中有效;
执行者具有该程序owner的权限。
SetGID:对二进制程序有用:
程序执行者对于该程序具有x权限
执行者在执行过程中将获得程序用户组的支持;
对于目录设置GID时;
用户对此目录具有r x权限时能进入该目录;
在此目录下有效用户组将变成该目录的用户组;
用户具有w时创建文件的用户组与该目录的用户组相同;
Sticky Bit(SBIT):
目前
只针对目录有效,
当用户对于此目录具有w、x权限时,该用户在该目录下创建的文件或者目录,仅有自己与root才有权利删除。
对SUID SGID SBIT的设置:
在普通权限钱加一个数字,最前面的数字代表特殊权限: 4代表SUID 2代表SGID 1代表SBIT
如 chmod 4755 filename:设置具有SUID权限。
如果设置s 或 t权限,发现没有x执行权限,则以S 或者 T呈现。
也
可以用 u+s方式设置SUID,g+s设置SGID, o+t设置 SBIT;
如 chmod u+s,o+t test
8 查看文件类型 file:
9 命令与文件的查询:
脚本文件的查询:通过which 或者 type命令:
which [-a] comand
type command;
which 是根据PATH这个环境变量所规范的路径去查询 执行文件的文件名。
文件名的查找:
whereis
whereis [-bmsu] 文件或目录
-b 只查找二进制文件
-m:只找说明文件manual路径下的文件
-s:只找source源文件
-u:只找不在上述三个选项中的其他特殊文件
whereis命令查找速度比find块,是由于Linux会将系统所有文件记录在一个数据库文件里面,当使用whereis或者下面的locate查询是,会以此数据库中的内容为准。
locate
[-ir] keyword
-i 忽略大小写
-r 后面可接正则表达式
locate查找数据是由已创建的数据库/var/lib/mlocate里面的数据所查找到的,不直接访问硬盘数据,所以快。
数据库默认一天更新一次,所有有时候新创建的文件查找不到,或者查找到的文件已删除, 需要手动更新数据库,使用updatedb命令 ,去读取/etc/updatedb.conf配置文件中的设置,然后
对硬盘数据进行查找文件名操作,最后更新数据库文件/var/lib/mlocate。
find
find [PATH] [options] [action]