Linux文件管理
1.Linux文件目录结构(倒置树状结构,最开始为/ 目录)
各个目录介绍:
/bin : 普通用户使用的命令
/boot : 存放系统启动相关的文件(如:kernel,grub)
/dev: 设备文件
/etc : 配置文件
/home:普通用户的家目录(图中alice,bob,eve 都是创建的普通用户)
/root: root用户的家目录
/sbin: 管理员使用的命令
/tmp : 临时文件
/usr: 系统文件,相当于windows 下的 C: \windows (应该是最大的目录了)
/var: 存放一些变化文件,比如日志文件(/var/log/messages, /var/log/secure这两个文件很重要,以后会经常用到)
lost+found fsck修复时,存储没有链接的文件或目录
proc 虚拟的文件系统,反映出来的是内核,进程信息或实时状态
/lb 和 /lib64 : 开机时常用的动态链接库
/run : 系统运行时所需文件
/srv : 服务启动后需要访问的数据目录
/media : 可移除设备挂载目录
/sys : 跟proc一样虚拟文件系统
/mnt : 用户临时挂载其他的文件系统
(重点目录:/bin ,/root ./boot ,/etc/ home,/root ,/usr,/ proc,/mnt)
2.文件时间
查看当前目录下相关文件:ls
相关参数:-a / -l /-d /-i 可以通过--help查看相应的参数这里只是列出重要的
文件相关时间:
访问时间:atime,查看内容
修改时间:mtime,修改内容
改变时间:ctime,文件属性,比如权限
删除时间:dtime,文件被删除的时间
ls -l 查看的只是文件的修改时间,看详细的时间使用 stat
3.文件类型
ls -l 文件名 //看第一个字符
- 普通文件(文本文件,二进制文件,压缩文件,电影,图片。。。)
d 目录文件(蓝色)
b 设备文件(块设备)存储设备硬盘,U盘 /dev/sda, /dev/sda1
c 设备文件(字符设备)打印机,终端 /dev/tty1
s 套接字文件
p 管道文件
l 链接文件(淡蓝色)
还可以通过file 命令来查看相应的文件类型
4. 文件路径
绝对路径:以 / 开始的路径
相对路径: 从当前路径开始的路径
显示当前路径的命令: pwd
~ : 表示当前用户的家目录( 比如说现在是root用户,~/ 就等同于 /root )
. (有个点哈) 表示当前目录
.. ( 两个点哈) 表示上一层目录
5. 相应操作:
cd : 切换路径
(cd 直接回到当前用户的家目录, cd .. 返回上一级目录)
eg: cd /root # 切换到root目录下
touch : 创建空文件(可以使用正则批量进行,如果没有了解正则,没事,后面我会写出来)
eg:touch file{1..5} # 在当前目录下创建file1到file5
echo “ 内容” > 文件: 可以创建一个非空文件, ( > 表示重定向,不要紧,小编后面也会写到)
mkdir : 创建一个目录,这个只需要记住一个参数就好,其他的用的时候可以查看man手册: -p
-p : 表示创建子目录时候父目录不存在,会帮助你自动创建父目录,你也可以理解成递归创建
eg: mkdir -p /dir1/dir2/dir3 # 递归创建dir1 ,dir2 ,dir3
cp : 当然是copy文件/文件夹啦,可以将多个文件拷贝到同一个目录下哦,注意书写
相关参数: -i (提示) / -f (强制)/ -v (列出过程) / -r(R) (这个厉害了,递归复制)
eg: cp -r /root/ ./ # copy /root下的所有东西到当前目录
mv : 移动,还可以改名(假如目标地址是个目录就是,移动到该目录, 如果是个文件,那就是移动并更名)
eg: mv file.txt /root/file.c # 移动当前目录下的file.txt 到 root目录下,并改名为file.c
rm : (remove) 删除文件或文件夹(-r)
重要参数: -v (显示过程)/ -f (强制删除) / -r ( 递归删除)
eg : rm -rf /dir1/dir2/dir3 # 递归删除dir1 ,dir2 ,dir3
rmdir : 删除空文件夹,(基本没啥卵用,记住rm 就行)
cat : 全部查看文件内容,会在显示屏上列出全部内容
参数 : -n : 显示行号
其他查看命令: more / less /head /tail /tailf ,可以自己下去试一下,小编在这就不列出了
6.文件权限:
6.1基本权限UGO:
UGO 分别表示 user group other
用ll (相当于ls -l ) 查看一个文件:
权限对象: UGO
权限类型及相对的数值: r ( 读) 4 ; w ( 写) 2 ; x (执行) 1
更改文件属主属组: chown 更改主.更改组 更改文件(注意中间有个点哈)
eg : chown alex.alex test.txt # 更改test.txt文件属主属组为alex
重要参数: -R : 递归更改,即该目录下所有文件的属主属组都将被更改
只更改属组: chgrp (其实没啥用,要只更改属组,可以用chown .属组 文件 就行,不更改可以用空格)
更改文件的权限: rwx 命令: chmod
emmmm,这个不好描述,直接上例子:
eg:
[root@localhost ~]# touch test.tx
[root@localhost ~]# ll test.tx
-rw-r--r-- 1 root root 0 Mar 8 19:37 test.tx
[root@localhost ~]# chmod u+x,g+x,o+x test.tx
[root@localhost ~]# ll test.tx
-rwxr-xr-x 1 root root 0 Mar 8 19:37 test.tx
[root@localhost ~]# chmod 777 test.tx
[root@localhost ~]# ll test.tx
-rwxrwxrwx 1 root root 0 Mar 8 19:37 test.tx
[root@localhost ~]# chmod a-x test.tx
[root@localhost ~]# ll test.tx
-rw-rw-rw- 1 root root 0 Mar 8 19:37 test.tx
[root@localhost ~]# chmod u=rwx,g=rw,o=r test.tx
[root@localhost ~]# ll test.tx
-rwxrw-r-- 1 root root 0 Mar 8 19:37 test.tx
可以看出来a 表示给UGO同时更改,也可以使用+,- ,= ,也可以使用数值(r=4,w=2,x=1)
6.2 基本权限ACL
UGO设置基本权限: 只能一个用户,一个组和其他人
ACL 设置基本权限: r,w,x
ACL权限为,在不更改文件的属主属组情况下,让其他属组或者属主对该文件有相应的权限;
查看acl权限: getfacl
设置文件的ACL权限:setfacl
相关参数: -m (修改) / -b (全部删除,回到刚创建时的权限)/ -x (删除指定的权限)
eg: [root@localhost ~]# setfacl -m u:alex:rwx test.tx # 给test.tx 文件添加了一个alex用户可以对其有rwx的权限
[root@localhost ~]# getfacl test.tx
# file: test.tx
# owner: root
# group: root
user::rwx
user:alex:rwx
group::rw-
mask::rwx
other::r--
[root@localhost ~]# setfacl -x u:alex test.tx #删除alex 用户的权限
[root@localhost ~]# setfacl -b test.tx # 删除所有的权限,回到刚建立的时候权限
6.3高级权限:suid,sgid,sticky
高级权限的类型
suid 4
sgid 2
sticky 1 粘滞位
设置特殊权限
a、字符
chmod u+s file
chmod g+s dir
chmod o+t dir
b、数字
chmod 4777 file
chmod 7777 file
chmod 2770 dir
chmod 3770 dir
SUID简介:
1.只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
2.命令执行者要对该程序文件拥有执行(x)权限.
3.命令执行者在执行该程序时获得该程序文件属主的身份.
4.SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
有点蒙了吧,哈哈,其实简单来说就是让本来没有相应权限的用户运行这个程序时,可以访问没有权限访问的资源,就给个用户提升了权限,可以执行这个二进制文件的权限
那么问题来了,怎么查看一个问题是不是二进制文件呢?
[root@localhost ~]# file -i test.tx
test.tx: inode/x-empty; charset=binary
开始操作:
SUID:
[root@localhost ~]# ll test.tx
-rwxrw-r--+ 1 root root 0 Mar 8 19:37 test.tx
[root@localhost ~]# chmod u+s test.tx 也可以用 chmod 4754 test.tx
[root@localhost ~]# ll test.tx
-rwsrw-r--+ 1 root root 0 Mar 8 19:37 test.tx
SGID: 新建文件继承目录属组 <针对目录>
sticky : 粘滞位: 这个表示sticky 用户只能删除自己的文件 <针对目录>
《记不住也不要紧,个人觉得用的不太多》
6.4.进程掩码 mask 和umask
进程 新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限
0777 - 文件UGO权限 = umask
(这个小编表示知道就行,因为实在觉得用的不多)
6.5 文件隐藏属性:(表示也是知道就行)
lsattr chattr
就是一个文件除了ll 可以查看的属性外, 还有好多隐藏的属性;
用lsattr 查看:(默认隐藏属性为空,但是可以自己设置,每个位置都有相应的属性)
[root@localhost ~]# lsattr test.tx
---------------- test.tx
九个位置分别表示: A , s , a ,c, d ,i ,s, u ,j (相对应的参数意思,想了解可以去百度查看:https://www.cnblogs.com/luckysimple/p/5067344.html)