一、文件属性的查看与设定
- 查看
ls这个命令我相信绝对是我们最开始学习linux经常用到的命令,我们从这个命令说起。
ls -al列出当前目录下所有文件的属性和权限。a代表所有文件,包含隐藏文件,l代表列出属性权限等信息。
[root@server1 ~]# ls -al
总用量 972
dr-xr-x---. 4 root root 4096 12月 11 22:18 .
dr-xr-xr-x. 22 root root 4096 12月 12 13:35 ..
-rw-------. 1 root root 2221 12月 11 22:18 .bash_history
-rw-r--r--. 1 root root 18 5月 20 2009 .bash_logout
-rw-r--r--. 1 root root 176 5月 20 2009 .bash_profile
-rw-r--r--. 1 root root 176 9月 23 2004 .bashrc
-rw-r--r--. 1 root root 100 9月 23 2004 .cshrc
drwxrwxr-x 9 1000 1000 4096 12月 5 20:20 keepalived-2.0.6
-rw-r--r-- 1 root root 853859 12月 5 20:16 keepalived-2.0.6.tar.gz
-rw-r--r-- 1 root root 90136 12月 5 19:43 ldirectord-3.9.5-3.1.x86_64.rpm
drwx------ 2 root root 4096 12月 5 20:29 .ssh
-rw-r--r--. 1 root root 129 12月 4 2004 .tcshrc
-rw------- 1 root root 3454 12月 11 22:06 .viminfo
第一列中第一个符号代表文件的类型,-代表普通文件,d代表目录,l代表软连接,可以比作windows下的快捷方式。s代表套接字,用于网络通信。b代表可供存储的接口设备如硬盘等。c代表串行端口设备,一次性读取设备,比如鼠标,连续输出。p,管道类型文件,解决多个程序同时访问一个文件的问题。
第一列剩下的符号分别代表,文件所有人的权限,文件所属组的权限,其他人的权限。那么,user,group,others是什么呢?由于linux是多用户的操作系统,考虑到用户的隐私以及不同用户对工作环境的喜好不同,所有有文件所有人的权限。而考虑到团队开发,所以又要有group的支持,注意一个用户可以有多个用户组的支持。others则代表其他人了。
用户信息在/etc/passwd 所有组名在/etc/group 所有密码在/etc/shadow
第二列代表多少文件名连接到此inode,说到inode,我们得先了解以下linux下的文件系统,linux一般使用ext2/ext3文件系统,这是索引式文件系统,一个文件的存储由两部分组成,存储块block和inode块,inode记录文件的一些属性,以及数据存储块block的位置,而inode中有一个属性记录,此数据文件名的数量。可以理解为同样的数据不同的文件名,我们每次为文件创建一个硬连接,那么这个属性会减一。需要注意,我们创建一个目录,会同时有3个东西生成,新的目录连接数为2,而上层目录的连接数加一。,还需要注意硬链接不会跨越文件系统,也不会连接到目录。ln不加参数为制作硬链接,ln -s为制作软链接。使用cat也可以制作硬链接软链接。
第三列和第四列代表该文件的所有者和所在组。
第五列代表文件的大小,单位默认为b。
第六列代表文件最近内容被修改的时间mtime,第七列代表文件名,带点的是隐藏文件。
*好,就这样!我不朔了!
- 修改
chgrp 改变文件所有组,
chgrp(-R) root file
chown (-R)cq file 既可以改变组也可以改变用户。
chown (-R)cq:root file
chown (-R) cq.root file
chown (-R) .root file
chmod (-R) 755 FILE
chmod a+x file a-x file
chmod u=rw,g=rw,o=x file
二、文件与目录的默认权限、隐藏权限、特殊权限以及acl权限规划
除了rwx权限外,我们还可以设置其他的系统隐藏属性。
-
使用chattr设置隐藏属性,以lsattr查看。chattr最重要的应用是设置文件不可修改的特性,让文件的所有者都不能进行修改。这个属性相当重要尤其在安全机制当面。不过只能在EXT2/EXT3文件系统上有用。
- a: 当设置这个属性后,这个文件只能增加数据,而不能增加修改数据,只有才能设置这个属性。
- i: 让文件不能删除改名,设置连接,也无法写入或添加数据。只有root才能设置此属性。
同理,去掉隐藏权限为 chattr -i,chattr -a。
自己做了很多次都发现加a隐藏权限不能删除也不能添加数据。。。。我丢
- 文件默认权限 umask
umask就是用户在新建文件或者目录时权限的默认值要减去的值剩下的就是文件的默认值。
文件的默认值是666,目录的默认值是777
查看umask
umask 或者 umask -S
[root@server1 ~]# umask
0022
[root@server1 ~]# umask -S
u=rwx,g=rx,o=rx
修改umask
umask 数字 临时修改
vim /etc/profile 永久修改 在60行
suid 冒险位
suid,当原本属于文件所有者的x权限位置变成了s,这就意味着该文件具有suid特殊权限。
但是呢,这个权限仅仅对与二进制可执行的文件有效,且仅仅在执行过程中有效,且执行者必须对该文件有执行的权力。最终执行者在执行该程序的过程中会暂时具有该程序所有者的权力。
eg:一般修改密码一般执行passwd这个命令,我们知道密码存储在/etc/shadow内,而这个文件的权限仅仅为root可读root可强制写入,那么我们使用passwd这个命令的时候就会暂时获得root的权力去修改密码。passwd这个命令在/usr/bin/passwd。
[root@server1 ~]# ll /etc/shadow
---------- 1 root root 688 12月 5 19:46 /etc/shadow
[root@server1 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 2月 17 2012 /usr/bin/passwd
注意这个文件s权限的位置
注意,suid仅仅只能用于二进制文件上,不能用在shell上,因为shell是调用别的二进制程序的
sgid 强制位
sgid,s这个权限出现在文件所在组权限的x位置上。
这个权限对于目录和文件都有效果。
对于目录而言,用户在该目录下创建的文件的用户组为与这个目录的用户组相同
而对于文件来说,可以类比suid,和它差不多。
sbit 粘制位
sbit,其他人的可执行权限上,s变成了t。
仅仅作用于目录。
当用户在一个具有该权限的目录下创建文件或者目录时候,仅仅只能对于自己的东西进行修改删除等改变操作。
特殊权限的设置
4suid,2sgid,1sbit。
chmod 4755 file
chmod 2755 file
chmod u=rwxs,go=x file
chmod g+s,o+t file
空的特殊权限
[root@server1 ~]# touch test
[root@server1 ~]# chmod 666 test
[root@server1 ~]# ll test
-rw-rw-rw- 1 root root 0 12月 12 14:51 test
[root@server1 ~]# chmod 7666 test
[root@server1 ~]# ll test
-rwSrwSrwT 1 root root 0 12月 12 14:51 test
acl权限:主机的具体权限规划
access control list,提供特殊的权限设置。
几个简单的例子感受一下
1、针对特定用户
[root@server1 ~]# ll test
-rw-r--r-- 1 root root 0 12月 12 15:10 test
[root@server1 ~]# setfacl -m u:cq:rx test
[root@server1 ~]# ll test
-rw-r-xr--+ 1 root root 0 12月 12 15:10 test
[root@server1 ~]# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:cq:r-x
group::r--
mask::r-x
other::r--
u:用户:权限 ,设置完后ll查看权限最后对多出来一个加号,但是此时这种查看方式是不容易判断的所以我们需要更好的查看方式,getfacl加文件。
user::rw- 代表文件所有者的权限,因为用户栏是空的
user:cq:r-x 代表对于cq这个用户的权限
mask::r-x 此文件默认的有效权限,意思就是对于用户或者用户组所设置的权限必须小于mask的值才会生效
2、针对特定用户组
[root@server1 ~]# setfacl -m g:cq:rx test
[root@server1 ~]# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:cq:r-x
group::r--
group:cq:r-x
mask::r-x
other::r--
3、设置mask有效权限
通过下面这个例子我们发现,如果不主动设置mask的值,那么,mask会自动随着用户或者用户组的权限所变化,而主动设置mask值的话,就会有effective显示,不会使得某些用户的权限设置过大。
[root@server1 ~]# setfacl -m g:cq:rx test
[root@server1 ~]# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:cq:r-x
group::r--
group:cq:r-x
mask::r-x
other::r--
[root@server1 ~]# setfacl -m u:cq:rwx test
[root@server1 ~]# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:cq:rwx
group::r--
group:cq:r-x
mask::rwx
other::r--
[root@server1 ~]# setfacl -m m:r test
[root@server1 ~]# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:cq:rwx #effective:r--
group::r--
group:cq:r-x #effective:r--
mask::r--
other::r--
4、使得acl权限可以递规
有一个需求,我们使得一个普通用户可以进入到root用户的家目录,可以查看但是不可以写东西。
[root@server1 ~]# setfacl -m u:cq:rx /root
此时cq这个用户可以进入到root目录及其子目录中
但是如果你在根用户的家目录下新建一个文件那么,这个文件不会具有acl权限。
使用下面这个命令就会使得acl权限递规。
[root@server1 ~]# setfacl -m d:u:cq:rx /root
[root@server1 ~]# mkdir cheng
[root@server1 ~]# getfacl cheng
# file: cheng
# owner: root
# group: root
user::r-x
user:cq:r-x
group::r-x
mask::r-x
other::---
default:user::r-x
default:user:cq:r-x
default:group::r-x
default:mask::r-x
default:other::---
三、文件操作
- 查看文件与目录
ls命令
[root@server1 ~]# ls
keepalived-2.0.6 keepalived-2.0.6.tar.gz ldirectord-3.9.5-3.1.x86_64.rpm
[root@server1 ~]# ls -a
. .bash_history .bash_profile .cshrc keepalived-2.0.6.tar.gz .ssh .viminfo
.. .bash_logout .bashrc keepalived-2.0.6 ldirectord-3.9.5-3.1.x86_64.rpm .tcshrc
[root@server1 ~]# ls -la
total 980
dr-xr-x---+ 4 root root 4096 Dec 12 15:57 .
dr-xr-xr-x. 24 root root 4096 Dec 12 15:57 ..
-rw-------. 1 root root 2221 Dec 11 22:18 .bash_history
-rw-r--r--. 1 root root 18 May 20 2009 .bash_logout
-rw-r--r--. 1 root root 176 May 20 2009 .bash_profile
-rw-r--r--. 1 root root 176 Sep 23 2004 .bashrc
-rw-r--r--. 1 root root 100 Sep 23 2004 .cshrc
drwxrwxr-x 9 1000 1000 4096 Dec 5 20:20 keepalived-2.0.6
-rw-r--r-- 1 root root 853859 Dec 5 20:16 keepalived-2.0.6.tar.gz
-rw-r--r-- 1 root root 90136 Dec 5 19:43 ldirectord-3.9.5-3.1.x86_64.rpm
drwx------ 2 root root 4096 Dec 5 20:29 .ssh
-rw-r--r--. 1 root root 129 Dec 4 2004 .tcshrc
-rw------- 1 root root 4791 Dec 12 14:58 .viminfo
[root@server1 ~]# ls -ld
dr-xr-x---+ 4 root root 4096 Dec 12 15:57 .
[root@server1 ~]# cd /tmp/
[root@server1 tmp]# ls
yum.log
[root@server1 tmp]# mkdir -p a/b/c
[root@server1 tmp]# ls -Rl
- 创建空的文件
> filename
echo > filename
cat > filename + ctrl+c
vim/vi
touch filename
touch a{1..10}
使用touch创建文件还会更改文件的时间戳,文件的时间戳分为,mtime,ctime,atime
需要注意的是使用touch file会默认把文件的三个属性时间都变成此时此刻执行命令的时间
[root@server1 tmp]# > test
[root@server1 tmp]# ls
test
[root@server1 tmp]# stat test
File: `test'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 783362 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-12-12 16:17:59.842002821 +0800
Modify: 2018-12-12 16:17:59.842002821 +0800
Change: 2018-12-12 16:17:59.842002821 +0800
ctime: 文件最近以此被访问的时间,应用程序或者服务调用时,cat会更新而ls就不会更新。
mtime:文件的内容最近发生改变的信息。
ctime:文件的属性inode的改动或者文件内容的改动。
[root@server1 tmp]# ls
test
[root@server1 tmp]# stat test
File: `test'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 783362 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-12-12 16:27:32.499000270 +0800
Modify: 2018-12-12 16:27:32.499000270 +0800
Change: 2018-12-12 16:27:32.499000270 +0800
[root@server1 tmp]# vim test
[root@server1 tmp]# stat test
File: `test'
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 783362 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-12-12 16:30:15.614977799 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:30:20.014999959 +0800
我们发现修改文件内容的同时会同时修改三个时间戳
[root@server1 tmp]# stat test
File: `test'
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 783362 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-12-12 16:30:15.614977799 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:30:20.014999959 +0800
[root@server1 tmp]# cp -a test test2
[root@server1 tmp]# stat test2
File: `test2'
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 785929 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-12-12 16:30:15.614977799 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:33:19.712990206 +0800
[root@server1 tmp]# stat tets
stat: cannot stat `tets': No such file or directory
[root@server1 tmp]# stat test
File: `test'
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 783362 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-12-12 16:33:19.712990206 +0800
Modify: 2018-12-12 16:30:19.981000080 +0800
Change: 2018-12-12 16:30:20.014999959 +0800
我们发现就算cp -a 复制文件所有属性也无法复制ctime的属性,这个属性会一直发生变化的
使用 rm -f 删除文件
- 创建目录和删除目录
mkdir dirname 创建目录
mkdir -p /a/b/c 递规创建目录,上层目录不存在的时候自动创建
rmdir dirname 删除一个空的目录
- 复制
cp -a 将文件的所有属性都复制过来,除了ctime。也会第归复制目录。
cp -r 递规复制,但是属性会被改变,亲身感受,复制执行的用户是谁,复制后文件的用户组和用户就是谁
cp -i 若文件已经存在询问是否覆盖
cp -s 复制成软链接
cp -l复制成硬链接
cp -d 复制一个软链接
cp filea fileb /c 将两个文件复制到一个目录中去
注意普通用户即使加上-a参数也无法复制所有属性的
[root@server1 tmp]# touch a
[root@server1 tmp]# ls
a
[root@server1 tmp]# cp -s a b
[root@server1 tmp]#
[root@server1 tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 12 16:47 a
lrwxrwxrwx 1 root root 1 Dec 12 16:47 b -> a
[root@server1 tmp]# cp -l a c
[root@server1 tmp]# ll
total 0
-rw-r--r-- 2 root root 0 Dec 12 16:47 a
lrwxrwxrwx 1 root root 1 Dec 12 16:47 b -> a
-rw-r--r-- 2 root root 0 Dec 12 16:47 c
- 移动
mv移动文件或者目录,或者重命名文件或目录
使用mv更改文件名也可以通过rename大量更该文件名
注意:在同一个磁盘上文件移动,是重命名操作;而在不同磁盘上文件的移动是复制删除过程
rm删除 r f i
注意:有的时候文件名不规范会导致删除失败!
在新版的linux里已经避免了这种错误了!
rm -aaa-
这种情况会失败的!但是可以使用rm -- -aaa-
[root@server1 tmp]# touch -aaa-
touch: invalid option -- '-'
Try `touch --help' for more information.
[root@server1 tmp]# touch -- -aaa-
[root@server1 tmp]# ls
-aaa-
[root@server1 tmp]# rm -aaa-
rm: invalid option -- 'a'
Try `rm ./-aaa-' to remove the file `-aaa-'.
Try `rm --help' for more information.
[root@server1 tmp]# rm -- -aaa-
rm: remove regular empty file `-aaa-'? y
[root@server1 tmp]# ls
[root@server1 tmp]#
- 查看文件目录名
dirname
basename
[root@server1 gcrypt]# basename /etc/passwd
passwd
[root@server1 gcrypt]# dirname /etc/passwd
/etc
[root@server1 gcrypt]# dirname `pwd`
/etc
- 文件的查看
cat 一次性输出完!
tac 反向输出完!
cat -b 带行号输出,但是空白行不带行号!
more 翻页查看
空格向下翻页
enter向下一行
/字符向下匹配查询
less
enter 向下一行
space向下一页
上下键向下上一行
h帮助
/字符 向下查询
?字符 向上查询
- 数据选取
head 默认显示前10行
head -n 10 打印文件的前10行
head -n -10 后面10行都不打印
tail 默认显示后10行
tail -n 20 显示后20行
tail -n +20 显示20行之后的数据包括20行
tail -f 持续检测
cat file1 | tail -n +300 | head -n 200 先从第300行开始,再输出前200行,所以是300-499
cat file1| head -n 500 | tail -n +300 先取前500行,再输出从其中第300行开始的内容
文件寻址
文件路径有相对路径和绝对路径之分。
注意:我们在写脚本的时候绝对要使用绝对路径
切换目录
cd .. 上一层
cd . 当前
cd ~ 当前家目录
cd ~ cq cq用户的家目录
cd - 上一个目录
- 查询文件的类型
file可以查询文件的类型,并且可以判断一个文件是否有使用动态链接库
- 文件的查找
which查找执行文件
-a 将path中所有的路径都显示出来
[root@ivans ~]# which ifconfig
/sbin/ifconfig
[root@ivans ~]# which -a ifconfig
/sbin/ifconfig
/usr/sbin/ifconfig
文件名的查找
whereis 和 locate 这两个是从系统中的数据库中查找,非常快,但是不准确,因为linux是异步存储的。
推荐使用find虽然慢但是是从硬盘上查找的
find 路径 选项 操作
1、时间:
find /etc -mtime +10表示10天之前不包括10天被修改的文件,10,10天前一天之内更改过的文件;-10,10天之内更改过的文件。
find /etc -newer /etc/passwd 查找新的文件
2、用户用户组
find /etc -user -group -uid -gid -nouser -nogroup (后面这两个选项安装软件时候,有的文件的用户不在/etc/passwd)
3、与文件权限名称有关
find /etc -name httpd
find /etc -size +-5k
find /etc -type s/p/l/b/c
find /etc /bin -perm +6000 只要含有s或者t就列出来-6000就是都得有
4、action
find /etc -perm +6000 -exec ls -l {} \;
5、find命令默认的执行是打印到屏幕上
文件大小统计
**文件大[root@server1 ~]# wc test1
31 37 1199 test1
[root@server1 ~]# wc -l test1 行数
31 test1
[root@server1 ~]# wc -w test1 单词数
37 test1
[root@server1 ~]# wc -m test1 字符数
1199 test1
[root@server1 ~]# wc -c test1 字节数
1199 test1
小的统计**
whatis ip addr 查看命令的大用途
ip addr --help 查看命令的基本用法,適用於多數命令。
[] ##标示选项可以加也可以不加
... ##标示选项加入的个数任意
<> ##标示选项是必须要加入的
Userage: ##标示命令用法
Opetions: ##对参数的作用做说明
我们通过man命令来查看命令或者文件的帮助手册
man 命令
man 5 文件
man的级别
1 #命令
2 #系统调用接口
3 #函数库调用接口
4 #特殊设备文件
5 #系统配置文件
6 #游戏规则说明
7 #包说明
8 #系统管理命令
9 #内核调用规则
/usr/share/doc ##系统中所有安装过的软件的帮助文档
系统中的通用配置符号
* ##匹配0到任意字符
? ##匹配单个字符
[[:alpha:]] ##单个字母
[[:lower:]] ##单个小写字母
[[:upper:]] ##单个大写字母
[[:digit:]] ##单个数字
[[:punct:]] ##单个符号
[[:space:]] ##单个空格
[[:alnum:]] ##单个数字或字母
[1-9] #1位,这位是1-9的任意数字
[!3-5] #1位,不是3-5的数字
[^3-5] #1位,不是3-5的数字
[a-z] #1位,a-z的任意字母
{1..3} #3个,1 2 3
{1,4,7} #3个1,4,7这三个数
网友评论