一、文件和目录管理
1.1 目录结构
目录 | 目录用途 |
---|---|
/bin | 常见的用户指令 |
/boot | 内核和启动文件 |
/dev | 设备文件 |
/etc | 系统和服务的配置文件 |
/home | 系统默认的普通用户的家目录 |
/lib | 常见的用户指令 |
/bin | 常见的用户指令 |
/lost+found | 常见的用户指令 |
/mnt | 系统加载文件系统时常用的挂载点 |
/opt | 第三方软件安装目录 |
/proc | 虚拟文件系统 |
/root | root用户的家目录 |
/sbin | 存放系统管理命令 |
/tmp | 临时文件的存放目录 |
/user | 存放与用户直接相关的文件和目录 |
/media | 系统用来挂载光驱等临时文件系统的挂载点 |
1.2 绝对路径和相对路径
绝对路径 : 从根目录开始的全路径。
以 “/” 开头,比如:/usr/local。
特殊目录 :
(.) 表示当前目录,(..)表示当前目录的上层目录。在Linux下,所有以点开始的文件都是“隐藏文件”,对于这类文件,只使用命令”ls -l”是看不到的,”ls -la” 才可以看到
相对路径 : 就是使用(.) 和 (..)
1.3 文件相关操作
① 创建文件:touch
//创建
touch test.txt
//再次touch ,修改了创建时间
② 删除文件:rm
// 删除文件
rm test.txt
// 删除文件夹
rm -r test.txt
③ 移动 或 重命名文件:mv
// 移动文件 到 /mnt下
mv test.txt /mnt
// 重命名
mv test.txt test.doc
// 移动时候重命名
mv test.txt /tmp/test.doc
④ 查看文件:cat
// 查看(concatenate 缩写)
cat
// 查看 并显示每个行号
cat -n xxx
⑤ 查看文件头 : head
// 由于文件过大,cat显示太多,只查看开始部分的内容
head xxx
// 查看时候显示行号, 比如查看10行
head -n 10 xxx
⑥ 查看文件尾:tail
// 一般用于查看日志文件,用法与head相似
// -f 可以动态地查看这些文件(即立即将新内容显示出来)
tail -f /var/log/message
⑦ 文件格式转换:dos2unix
// DOS to Unix的简写
// 就是将DOS格式的文本文件转变成UNIX下的文本文件
// 比如把Windows下的文本文件移动到Linux下,由于系统之间文本文件之间换行符不同而造成文件在Linux下的读写操作有问题。
// xxx 表示文件
dos2unix xxx
1.3 目录相关操作
① 进入目录:cd
//change directory的缩写,方便用户切换到不同的目录
cd xxx
pwd
② 创建目录:mkdir
// make directory的缩写,
mkdir xxx
// 同目录下一次性创建多个
mkdir xx3 xx4 xx5
// 可以是用-p参数一次性创建所有子目录
// 使用相对路径的方式
mkdir -p xx1/xx2
// 使用绝对路径的方式
mkdir -p /root/xx1/xx2/xx3
③ 删除目录:rmdir 和 rm
// remove directory 的缩写,用来删除目录。
// rmdir 只能删除 空目录
rmdir xxx
// rm用法
rm -r xxx
④ 文件和目录复制:cp
// copy的简写,用于复制文件和目录。
cp xxx xxx1
// 复制到/tmp目录下
cp xxx /tmp/xx1
// 复制目录,要加 -r
cp -r xx1 xx2
1.4 文件时间戳
touch 可以创建新文件。如果文件已经存在,那么touch命令仅仅会更新文件的创建时间而不会修改文件内容。
Linux 下目录也是一种文件。so,touch一个目录,这个目录的创建时间也会被更新。
so,可以根据时间戳来进行差异化备份。
1.5 文件和目录的权限
// -a参数则要求ls命令还要同时列出隐藏文件。
ls -al
第一个字符
第一个字符可能的值 | 含 义 |
---|---|
d | 目录 |
- | 普通文件 |
l | 链接文件 |
b | 块文件 |
c | 字符文件 |
s | socket文件 |
p | 管道文件 |
1.6 文件隐藏属性
// Linux 下的文件还有一些隐藏属性,必须使用lsattr来显示
// 默认情况下,文件的隐藏属性是没有设置的。
// 查看文件的隐藏属性需要使用lsattr命令
lsattr
// 可以使用 chattr命令 来设置文件的隐藏属性。
chattr +a xxx.cgf
1.7 改变文件权限
u : 文件拥有者(user); g : 拥有组(group);o:其他人(others)
+ :增加权限; - :删除权限; = :详细权限
下面是用户(u),可直接将 u 改为 g 或 o。
作 用 | 命 令 |
---|---|
给某文件添加用户读权限 | chmod u+r somefile |
给某文件删除用户读权限 | chmod u-r somefile |
给某文件添加用户写权限 | chmod u+w somefile |
给某文件删除用户写权限 | chmod u-w somefile |
给某文件添加用户执行权限 | chmod u+x somefile |
给某文件删除用户执行权限 | chmod u-x somefile |
添加用户对某文件的读写执行权限 | chmod u+rwx somefile |
删除用户对某文件的读写执行权限 | chmod u-rwx somefile |
给某文件设定用户拥有读写执行权限 | chmod u=rwx somefile |
权限使用数字表示法
定义:r = 4 ; w = 2 ; x = 1;
如果权限是 rwx,则数字表示 7
如果权限是 r-x ,则数字表示 5如果 拥有者权限:rwx, 拥有组权限:r-x, 其他人的权限是:r–
则对应的命令: chmod 754 somefile
// 若修改一个目录,以及该目录下的所有的文件、子目录、子目录下所有的文件和目录
// (即 递归设置改目录下所有的文件和目录的权限),使用 -R 参数
chmod -R 754 somedir
1.8 改变文件的拥有者:chown
// 修改文件拥有者 ( xxx 为 用户名)
chown xxx test.txt
// 修改文件用户组 ( yyy 为 用户组)
chown :yyy test.txt
// 同时设置拥有者和用户组
chown xxx:yyy test.txt
1.9 改变文件的拥有组:chgrp
// xxx 为拥有组名
chgrp xxx test.txt
1.10 文件特殊属性:SUID/SGID/Sticky
每个用户都可以使用passwd(该命令的绝对地址是/usr/bin/passwd)来修改自己的密码。
命令passwd执行的最终结果是去修改/etc/shadow 中对应用户的密码。对于这个文件,只有root用户有读权限,而普通用户在修改自己的密码时,最终也会修改这个文件。
那为什么普通用户在运行这个命令时居然有权限来写/etc/shadow文件?
如上图,所知,passwd设置了SUID权限,这就意味着普通用户可以使用root的身份来执行这个命令。(注意:SUID权限只能用于二进制文件)
// 给某个二进制文件的用户组都设置s权限
// 给二进制文件添加SGID权限(xxx表示文件)
chmod g+s xxx
// Sticky权限只能用于设置在目录上,设置了这种权限的目录,任何用户都可以在该目录中创建或修改文件
// 但只有该文件的创建者和root可以删除自己的文件。
// (xxx 表示目录)
chmod o+t xxx
1.11 默认权限和umask
umask遮罩
通过查看 /etc/profile 可以看到umask的默认值
或者 :若遮罩值是022,用字符表示—-w–w-;777用字符串表示为:rwxrwxrwx
那么后者第五位和第八位的w被遮罩掉,权限变为rwxr-xr-x,用数字表示755若遮罩值是002,用字符表示——-w-;777用字符串表示为:rwxrwxrwx
那么后者第八位的w被遮罩掉,权限变为rwxrwxr-x,用数字表示775文件创建时的默认权限= 0666-umask
目录创建时的默认权限= 0777-umask
1.12 查看文件类型:file
① 一般查找 find
// 查找名为xxx的文件(遍历/下的所有文件)
find / -name xxx
// 遍历/etc 下的所有文件 查找xxx
find /etc -name xxx
// 通配符查找
find / -name *.conf
find / -name httpd*
参数 | 含义 |
---|---|
-name filename | 查找文件名为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
在执行这个命令之前一般需要执行updatedb命令(这不是必须的,因为系统每天会自动检索并更新数据库信息,但是有时候会因为文件发生了变化而系统还没有再次更新而无法找到实际上确实存在的文件。所以有时需要主动运行该命令,以创建最新的文件列表数据库。)
// xxx表示文件
locate xxx
③ 查找执行文件:which/whereis
which:用于从系统的PATH变量所定义的目录中查找可执行文件的绝对路径。
whereis:也能查到其路径,但是和which不同的是,它不但能找到其二进制文件,还能找出相关的man文件
1.113 硬链接和软链接
① 软链接
硬链接(hard link):
作用:允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接指向同一文件。
只有当最后一个链接被删除时,文件的数据块及目录的链接才会被释放。
限制:
1. 不允许给目录创建硬链接;
2. 只有在同一文件系统中的文件之间才能创建链接,即不同分区上的两个文件之间不能够建立硬链接。
// 创建硬链接
ln hard01 hard01_link
② 软链接
软链接(soft link):
作用:类似windows下的”快捷键”
删除软链接并不会删除其所指向的源文件,如果删除了源文件则软链接会出现“断链”
// 创建软链接
ln -s file01 file01_slink