目录
1.Linux文件系统
1.1存储结构
1.2挂载点
1.3查看磁盘使用情况
1.4硬连接和符号连接
2.磁盘操作
2.1查看磁盘分区情况
2.2磁盘分区
3.压缩与打包
3.1gzip
3.2bzip2
3.3xz
3.4tar打包
4.账号管理和ACL权限设置
4.1用户管理
4.2组管理
4.3ACL权限管理
4.4用户身份切换
4.5用户信息传递
linux文件的存储方式为
目录也是一样的也有inode,但是目录数据区的内容如下
所以文件的名字是存在目录中的,inode本生不记录文件名。
使用ls命令时加上-i可查看文件和目录对应的inode
每个文件系统都有独立的inode、区块、超级区块等信息,把文件系统与目录树结合称为【挂载】,挂载点是个目录,通过该目录即可访问该文件系统。
输出ls -lid / /root /home命令,因为他们都是独立的文件系统挂载点,所以inode可以一样,且xfs文件最顶层的目录一般为64和128号,所以这三个挂载点的inode相同。
建立硬连接(cp -l)时,两个文件的inode是一样的,所以改动任意一处硬连接的数据,所有的内容都改动
硬连接的本质就是一个数据区对应了多个文件,这多个文件的inode都指向该数据区的内容。
所以你删除一个硬连接,真正的内容不会被删除,另外一个硬连接还是可以正常访问的,但是硬连接不能跨文件系统,这点很好理解。
符号链接就是个快捷方式,当源文件被删除了符号链接就打不开了。由符号链接建立的文件会创建它独有的inode和数据区。
/etc/fstab中的条目为:
[设备/UUID等] [挂载点] [文件系统] [文件系统参数] [dump?] [fsck?]
后面4个直接写默认的即可。
tar打包文件(无压缩),压缩只能针对文件不能是目录,所以需要使用tar命令把多个文件打包为一个文件进行压缩;为了方便一般使用打包+压缩的方式,后缀为 *.tar.gz等等,Linux压缩方式有很多种,通过规范后缀名来识别文件是用的哪种压缩方式。
gzip应用最广,后缀为*.gz。
gzip [参数] 文件名
压缩后原始文件不保留,生成一个.gz的文件。
升级版的gzip,压缩比更高了,后缀名为.bz2。
bizp2 [参数] 文件名
压缩比更高了,但是压缩的时间较长,用法一模一样,后缀为.xz。
xz [参数] 文件名
解压缩为unxz
打包命令,生成的后缀为.tar文件。
①:这三个参数只能出现一个
②:打包并且压缩的参数,这三个参数最多只能出现一个
其他参数:
tar命令不像压缩命令一样;tar需要自行指定文件名,且我们不要乱取名。
示例:
单纯的打包操作,不压缩:
tar -cv -f test.tar aa.txt bb:将aa.txt文件和bb目录打包为test.tar包
tar -xv -f test.tar:将test.tar包解包出来,解到当前路径下
tar -xv -f test.tar -C /etc:将test.tar解包到/etc下
打包并压缩:
tar -zcvf t.tar.gz aa.txt bb:将aa.txt文件和bb目录打包为一个文件并且使用gzip进行压缩(bzip2使用-j)
tar -zxvf t.tar.gz :使用gzip解压缩并且解包。
只有根据包的名称知道是用何种解压缩方式,又或者是没有压缩,所以后缀是十分重要的。
从上述的规律看出,我们只需要记住:
打包使用-cvf,解包使用-xvf即可,如有压缩的情况只需记住常用的-z(gzip)、-j(bzip2)即可
/etc/shadow文件示例:bin:*:18353:0:99999:7:::
每一栏的作用分别为:①账号名称、②密码、③最近修改密码日期、④密码不可被修改日期、⑤密码需要重新修改的天数、⑥密码需要修改期限前的警告天数、⑦密码过期后的宽限天数、⑧账号失效日期、⑨保留
上面的日期都是1970.1.1的间隔天数,可以使用下面的查看某日期到1970的天数
echo $(($(date -d "2015/05/04" +%s)/86400+1))
反过来查看相隔天数的日期date -d "1970/01/01 17932 days"
文件①/etc/default/useradd
# useradd defaults file GROUP=100 //默认用户组,已弃用 HOME=/home //家目录的基准目录 INACTIVE=-1 //密码失效后的宽限日期,-1永不过期,0表示密码过期后立即失效(建议值) EXPIRE= //密码失效时间,这些日期都是距离1970年1月1日的天数 SHELL=/bin/bash //默认shell SKEL=/etc/skel //用户家目录的模板 CREATE_MAIL_SPOOL=yes //建立用户的邮箱,默认在/var/spool/mail下
文件②/etc/login.defs
MAIL_DIR /var/spool/mail //默认邮箱的放置目录 PASS_MAX_DAYS 99999 //多久需要修改密码的天数,/etc/shadow的第5栏 PASS_MIN_DAYS 0 //多久不可重新设置密码,0随时修改,/etc/shadow的第4栏 PASS_MIN_LEN 5 //密码最短的字符长度,已经废弃 PASS_WARN_AGE 7 //密码失效前多少天提示用户,/etc/shadow的第6栏 UID_MIN 1000 //使用者最小uid UID_MAX 60000 //最大uid SYS_UID_MIN 201 //系统账号的最小uid SYS_UID_MAX 999 //系统账号最大uid GID_MIN 1000 //用户自定义用户组的最小gid GID_MAX 60000 //最大gid SYS_GID_MIN 201 //同上 SYS_GID_MAX 999 CREATE_HOME yes //是否主动建立用户家目录 UMASK 077 //家目录的权限 USERGROUPS_ENAB yes //userdel删除用户时,是否删除初始用户组,前提是改组没有其他人 ENCRYPT_METHOD SHA512 //密码的加密
前面的useradd、usermod、userdel只能root使用
主要是管理/etc/group和/etc/gshadow两个文件。
/etc/group文件示例:lxc:x:1001: ①组名、②密码、③gid、④组内的成员,用逗号分隔
/etc/gshadow文件示例:lxc:!:: ①组名、②密码,!表示没有密码,也表示没有用户组管理员、③用户组管理员的账号、④组内的成员,和group文件相同
setfacl 选项 文件名:设定ACL权限
①针对特定用户使用【u:用户账号:权限】:setfacl -m u:lxcc:rx aa.txt。特别的如果用户账号为空代表文件拥有者。
②针对特定组使用【g:用户组名:权限】:setfacl -m g:lxc1:rw aa.txt 。同上,如果为空代表本组
③针对有效权限设置使用【m:权限】:即getfacl中的mask,用户或用户组所设置的权限必须在mask范围内存在,否则的话也不能生效。
getfacl 文件名:查看acl等信息
目录的ACL的权限默认不会继承到它的子目录或文件,如果想让子目录/文件都继承的话需要使用默认权限设置:d:[u|g:[user|group]:权限],就是在前面加上一个额外的d,即可实现继承,和-R的区别就是,新建的文件也会自动继承。
su [-] [选项] [username]:身份切换命令,省略username就是切换root用户;如果中间加上-的话,就是以login shell进行登录,不加是以nologin shell启动,且当前很多环境是不会变的,所以最好加上-
sudo:允许一个已授权用户以超级用户或者其它用户的角色运行一个命令,而无需root的密码
如sudo -u sshd touch /tmp/hi,用系统用户sshd的身份创建一个文件,该文件的拥有者是sshd
只有/etc/sudoers文件中指定的用户才能运行sudo这个命令,只需输入自己的密码即可开始执行
visudo:修改/etc/sudoers文件提供的命令,不建议直接vim修改。
如何修改sudoers文件?基本语法为: 使用者账号 登录者的来源主机=(可切换的身份) 可执行的命令
如root ALL=(ALL) ALL :代表root用户可使用sudo,且来源主机可以是任何主机,可以切换任何人的身份去执行任何命令。
①某个用户可使用root所有命令
增加 lxc ALL=(ALL) ALL
②利用组批量设置
centos7默认sudoers里就有这么一行:%wheel ALL=(ALL) ALL,其中前面的%,代表是一个组,wheel是组名,表示只要是这个组的用户都能够执行sudo命令切换身份,执行任何操作。
③无需密码的设置
只需在按照lxc ALL=(ALL) NOPASSWD:ALL,就表示sudo切换身份时lxc不用输入自己的密码。
④有限制的命令操作
上面的设置可以让用户能做任何事,包括修改root的密码,不太好,我们需要加以限制。
如 lxc ALL=(root) /usr/bin/passwd ,就是让lxc用户仅能够切换root,执行passwd命令,注意这里的可执行命令这一栏一定要填绝对路径,否则报错。
上面的操作并不能解决lxc能够修改root密码的问题,lxc依然能够使用 sudo passwd修改,可以使用 lxc ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root 修改解决该问题,即lxc用户只能sudo切换为root,且不能修改root的密码
其中可以支持正则表达式,!的作用是不允许执行。 多个命令中间必须有空格。
⑤通过变量设置
前面的都是单个用户或组的设置,也可以通过变量方式设置,就是将多个用户一起定义为一个变量,如mywork,然后myworl ALL=(ALL) xxx,来减少工作量。不一定是多个用户一个变量也可以是多个操作一个变量。
⑥sudo搭配su
可以设置一些用户可以执行的命令为 su - ,即允许他们登入管理员账号。