文件管理
目录结构
Linux系统沿用目录结构组织文件,所有目录和文件都在根目录下。FHS(文件系统层次标准)定义了在根目录下的主要目录以及每个目录应该存放的文件
FHS定义的目录结构如下:
/bin 常见的用户指令
/boot 内核和启动文件
/dev 设备文件
/etc 系统和服务的配置文件
/home 系统默认的普通用户的家目录
/lib 系统函数库目录
/lost+found ext3文件系统需要的目录,用于磁盘检查
/mnt 系统加载文件系统时常用的挂载点
/opt 第三方软件安装目录
/proc 虚拟文件系统
/root root用户的家目录
/sbin 存放系统管理命令
/tmp 临时文件的存放目录
/usr 存放与用户直接相关的文件和目录
/media 系统用来挂载光驱等临时文件系统的挂载点
绝对路径,一定是以/开头的
pwd查看当前所在的目录
一个点(.)表示当前目录,两个点(..)表示当前目录的上层目录。在Linux下,所有以点开头的文件都是隐藏文件,可使用ls -la看到
文件的相关操作
touch <filename>创建文件,若文件已存在,不会对当前同名文件造成影响,只会更新文件的创建时间属性
rm <filename> 删除文件
mv <source file> <target dir>移动文件,若target dir替换为target file 可重命名文件。注意:Linux下的目录也是一种文件,同样适用于目录
cat <filename> 查看文件内容,加上-n参数可以显示每行的行数
head <filename>查看文件头,默认显示前十行,可使用-n <num>指定显示的行数
tail <filename>查看文件尾,默认显示前十行,可使用-n <num>指定显示的行数,若文件动态变化,可使用-f参数动态看文件尾
dos2unix文件格式转换,当把Windows下的文本文件移动到Linux下时,会由于系统之间文本文件的换行府不同而造成文件在Linux下的读写操作有问题,故使用此命令转换,加上需要转换的文件名即可
目录的相关操作
cd <dir_name>进入目录
mkdir <dir_name>创建目录,mkdir -p <dir_name>/<dir_name>/<dir_name> 加上-p参数可一次性创建所有目录
rmdir <dir_name>删除目录,目录必须为空
rm -r <dir_name>可删除目录,但每个文件都要输入y以确认删除,可使用rm -rf <dir_name>强制删除目录及目录下所有文件
cp <file_name> <target_dir>文件复制相应的目录
cp <file_name> <target_file>可将文件复制并重命名
cp -r <dir_name> <target_dir>目录的复制
可使用touch来利用文件时间戳做备份
文件和目录的权限
查看文件或者目录的权限:ls -al
第一列是文件类别和权限,权限相应的是users(u)group(g)others(o),每组都是rwx的组合。文件类别如下
d 目录
- 普通文件
l 链接文件
b块文件
c 字符文件
s socket文件
p 管道文件
第二列表示连接数,除了目录文件之外,其他所有文件的连接数都是1,目录的连接数是该目录中包含其他目录的总个数+2
第六列是该文件的创建时间或者最近的修改时间
文件隐藏属性
lsattr <file_name>展示隐藏属性,第一列是13个小短横,代表13个属性
chattr +a <file_name> 拥有该属性的文件只能在尾部增加数据,而不能被删除,即便是root
+i的文件将无法写入改名删除,即便是root,常用于设置在系统或者关键服务中的配置文件
改变文件权限 chmod ,以下示例适用于 u g o
chmod u+r filename给文件添加用户读权限
chmod u-rwx filename删除用户对某文件的读写执行权限
chmod u=rwx filename 给文件设定用户拥有读写执行权限
若参数是目录,可使用-R递归目录下的文件
改变文件的拥有者chown
chown username <file_name or dir_name>
chown :groupname <file_name or dir_name>
chown username:groupname <file_name or dir_name>
chown username:groupname <dir_name>
chown -R username:groupname <dir_name>
改变文件的拥有组:chgrp <group_name> <filename or dirname>
chgrp -R <group_name> dirname
文件特殊属性
SUID权限只能用于二进制文件,普通用户可使用root的身份来执行这个命令
chmod u+s filename
SGID若该文件的用户组被设置了s,该文件的用户组中所有的用户都将能以该文件的用户身份去运行这个命令
chmod g+s filename
Sticky权限只能用于目录的设置,任何用户都可以在该目录创建或者修改,但只有文件的创建者和root可以删除自己的文件,如/tmp
chmod o+t dirname
默认权限和umask
对于root,文件的默认权限是644,目录的默认权限是755
对于普通用户,文件的默认权限是664,目录的默认权限是775
umask翻译为遮罩,在Linux下,定义目录创建的默认权限的值是umask遮罩777后的权限,定义文件创建的默认权限是umask遮罩666后的权限
在/etc/profile文件中第51行至55行设置了不同用户的遮罩值,UID大于99的用户umask为002,否则为022.
比如对于root,777表示为rwxrwxrwx,遮罩值是022,----w--w-,那么第五位和八位的w被遮罩掉,权限变为rwxr-xr-x,即为755
查看文件类型
file <filename>
查找文件
find <PATH> -name <FILENAME>在某个路径下按照名字查找某个文件
更多参数:
-perm 根据文件权限查找
-user username 根据用户名查找
-mtime -n/+n 查找n天内/n天前更改过的文件
-atime -n/+n 查找n天内/n天前访问过的文件
-ctime -n/+n 查找n天内/n天前创建的文件
-newer filename 查找更改时间比filename新的文件
-type b/d/c/p/l/f/s 根据类型查找
-size 根据文件大小查找
-depth n最大的查找目录深度
数据库查找
locate依赖于一个数据库文件,Linux系统默认每天会检索一下系统中的所有文件,然后将检索到的文件记录到数据库中,故比find命令反馈更快
为获取最新数据,可在locate执行前执行updatedb命令
查找执行文件
which用于从系统的PATH变量所定义的目录中查找可执行文件的绝对路径。whereis也能查到路径,但区别于which,不但能查找其二进制文件,还能查找出相关的man文件
文件压缩和打包
压缩gzip <filename> ; bzip2 <filename>
加压缩gunzip <filename>; bzip2 -d <filename>
tar -zcvf boot.tar.gz /boot
z 使用gzip压缩 c创建压缩文件 v显示当前被压缩的文件 f使用文件名
tar -xzvf boot.tar.gz -C /tmp
解压文件, -C指定解压缩后存放的目录