文件操作
一、文件类型和文件系统
1、文件类型
软、硬连接
- 软链接可以指向目录,而硬连接不行
ln -s source_file softlink_file:软
ln source_file softlink_file:硬
2、目录结构
3、Linux文件系统常用目录说明:
/: Linux系统目录树的起点。
**/root:**系统管理员(也叫超级用户)的主目录。
**/boot:**这里存放的是启动Linux时使用的一些核心文件。
**/bin:**bin是binary的缩写。这个目录存放着使用者最经常使用的命令。例如cp、ls、cat等等。
**/home:**用户的主目录,比如说有个用户叫sy,那么他的主目录就是/home/sy。注意:root用户的目录不在这里,而在/root里。
**/dev:**dev是device(设备)的缩写。这个目录下是Linux所有的外部设备,在Linux中设备也是文件,使用访问文件的方法访问设备。例如:/dev/sda代表第一个物理SCSI硬盘。
**/lib:**这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的.dll文件。几乎所有的应用程序都需要用到这些共享库。
**/etc:**这个目录用来存放系统管理所需要的配置文件和子目录。
**/mnt:**这个目录在刚安装好系统时是空的,系统提供这个目录的目的是让用户临时挂载别的文件系统。/usr:这是最庞大的目录,我们要用到的应用程序和文件几乎都存放在这个目录下。
**/sbin:**s就是Super User的意思,也就是说这里存放的是系统管理员使用的管理命令和管理程序。/tmp:用来存放临时文件的地方。
**/var:**这个目录中存放着那些不断在扩充着的东西,为了保持/usr的相对稳定,那些经常被修改的目录可以放在这个目录下,系统的日志文件就在/var/log目录中。
**/proc:**这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里。
二、文件和目录管理权限
1、10字图
- R=5 W=2 X=1
2、修改权限命令
- chmod 777 filename
- 第二种通用
3、修改文件所有者
4、修改文件所有组
5、修改默认权限
6、文件隐藏属性
7、文件的三种特殊权限
1)**SUID:**Set UID (只对二进制程序有效,对shell script无效)
例如:ls –l /usr/bin/passwd
注意:当用户执行passwd命令的时候,需要修改/etc/shadow文件。
2)**SGID:**Set GID
例如:ls –l /usr/bin/locate
注意:当用户执行locate命令的时候,需要读取/var/lib/mlocate/mlocate.db文件。
3)**SBIT:**Sticky Bit (只对目录有效)
例如:ls –dl /tmp (当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件)
三、文件归档与压缩
1、常用命令
# 压缩 会更改源文件
bzip2 dic.tar
#查看压缩效果
bzip2 tv dic.tar.bz2
#解压
bunzip2 dic.tar.bz2
2、归档tar命令
# 打包 打包后的文件名 要打包的文件名
tar -cvf dic.tar dic/
#解包
tar -xvf dic.tar dic/
#选择性打包
tar -cvwf dic.tar dic/
#解包
tar -xvwf dic.tar dic/
四、查找文件,比较文件
1、find
# 查找/tmp目录下名为passwd的文件
find /tmp -name "passwd"
# 查找/tmp目录下名为passwd的文件 不区分大小写
find /tmp -iname "passwd"
# 查找/tmp目录下的目录:
find /tmp -type d
# 查找/tmp目录下大于100M的文件:
find /tmp -size +100M
•查找/tmp目录下属主为keyso的文件: find /tmp -user keyso
•查找/tmp目录下属组为keyso的文件: find /tmp -group keyso
•查找/tmp目录下UID为502的文件: find /tmp -uid 502
•查找/tmp目录下GID为502的文件: find /tmp -gid 502
2、comm
comm [-1,2,3] filename1 filename2
选项 描述
-1 不显示在第一个文件出现的内容;
-2 不显示在第二个文件中出现的内容;
-3 不显示同时在两个文件中都出现的内容。
2.3 参数
文件1:指定要比较的第一个有序文件;
文件2:指定要比较的第二个有序文件。
3、diff
与comm相反
五、文件描述字与重定向
1、FD < >
0:标准输入 1:标准输出 2:错误输出
2、关闭输出
&-:全部关闭
n&-:指定n号关闭
3、实操
# 把文件内容中的小写字母改为大写
#! /bin/bash
if [ -e $1 ]
then
exec 3<&0 #输入
exec <$1 #从位置参数1输入
exec 4>&1 #输出
exec >$2 #输出到位置参数2
cat $1 | tr 'a-z' 'A-z' # 读取位置参数1中的内容转化成大写
exec 0<&3 3<&- # 关闭标准输入
exec 0>&4 4>&- # 关闭标准输出
else
echo "error"
fi
六、实际操作
1.新建用户user1,user2,user3。
useradd user1
useradd user2
useradd user3
2.在/tmp下新建文件夹test。
mkdir /tmp/tset
3.查看test文件夹的权限是多少?
755
4.修改test文件夹的权限为777。
chmod 777 /tmp/test
5.分别使用user1、user2和user3在/tmp/test下新建文件:用户名.txt
su user1
touch /tmp/test/user1.txt
exit
su user2
touch /tmp/test/user2.txt
exit
su user3
touch /tmp/test/user3.txt
exit
6.以user1身份看能否删除user2和user3的文件?
#user1可以删除user2和user3的文件
su user1
rm /tmp/test/user2.txt /tmp/test/user3.txt
exit
7.如何保证每个用户都可以在/tmp/test中新建文件,但只能删除自己的文件而不能删除别人的文件?
# 为/tmp/下的test文件夹设置特殊权限SBIT
8.修改/tmp/test的权限为1777
su root
chmod /tmp/test/1777
9.验证user1、user2和user3都可以在/tmp/test下新建、修改、删除自己的文件。
# user1可以删除自己的文件
su user1
mv /tmp/test/user1.txt /tmp/test/user111.txt
rm /tmp/test/user111.txt
10.以user1身份看能否删除user2和user3的文件?
#user1不能删除user2和user3的文件
rm /tmp/test/user2.txt /tmp/test/user3.txt