2021-5-7
wanghongrong
1.文件目录简介
Linux:一切皆文件
1.1文件系统目录结构
示例:CentOS7.6
[root@CentOS7 ~]$ tree / -L 1
/
├── bin -> usr/bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── swap
├── sys
├── tmp
├── usr
└── var
1.2文件类型
- 普通文件
d 目录文件directory
b 块设备block
c 字符设备character
| 符号链接文件link
p 管道文件pipe
s 套接字文件socket
示例:
[root@CentOS7 ~]$ ll
total 8
drwxr-xr-x. 2 root root 6 May 6 17:04 Desktop # 目录文件
-rw-r--r--. 1 root root 1852 Apr 30 22:10 initial-setup-ks.cfg # 普通文件
2.用户及组管理
用户组管理命令
#用户相关命令
useradd 新增用户
userdel 删除用户
usermod 修改用户
#用户组相关命令
groupadd 新增用户组
groupdel 删除用户组
groupmod 修改用户组
centos用户及组主要配置文件说明
/etc/passwd #此文件保存着:用户名:密码:UID:GID:用户描述:主目录:登录shell
/etc/shadow #此文件记录的行与passwd中的行一一对应,保存着:用户名:密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group #此文件保存着:用户组名称:用户组密码:GID:用户列表(多个用户之间用,分隔)
/etc/gshadow #此文件与/etc/group文件中的行对应,保存着:用户组名:加密码后的密码:组管理员(多个用,分隔):组成员(多个用,分隔)
/etc/default/useradd #此文件主要保存着创建账户时的默认值,使用useradd –D查看到的内容就是这个文件中的内容
/etc/skel #他是一个目录,相当于windows中公用的账号环境设置,比如,可以在这个目录里放一个文本文件,当创建用户时,在每个用户的家目录里都可以看到这个文件,当然也可以放置公共的配置文件,创建用户时就可以延用这个配置。
/etc/login.defs #这个是用来设置用户帐号限制的配置文件,比如密码的最大过期天数,长度等,但优先级小于/etc/shadow
/etc/profile #该文件主要用来保存环境变量的,是全局的,由系统管理员管理.
~/.bashrc .bash_history .bash_profile .bash_logout #这些文件主要用来定义用户的环境变量的
示例:
[root@CentOS7 ~]# ll /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/default/useradd /etc/login.defs /etc/profile
-rw-r--r--. 1 root root 119 Mar 5 2015 /etc/default/useradd
-rw-r--r--. 1 root root 544 Apr 28 05:52 /etc/group
----------. 1 root root 436 Apr 28 05:52 /etc/gshadow
-rw-r--r--. 1 root root 2028 Mar 5 2015 /etc/login.defs
-rw-r--r--. 1 root root 1098 Apr 28 05:14 /etc/passwd
-rw-r--r--. 1 root root 1750 Jun 7 2013 /etc/profile
----------. 1 root root 665 Apr 28 05:14 /etc/shadow
[root@CentOS7 ~]# ll .bashrc .bash_history .bash_profile .bash_logout
-rw-------. 1 root root 1365 May 8 05:06 .bash_history
-rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile
-rw-r--r--. 1 root root 210 May 8 04:49 .bashrc
2.1添加用户和组
[root@CentOS7 ~]# useradd --help
Usage: useradd [options] LOGIN
useradd -D
useradd -D [options]
Options:
-b, --base-dir BASE_DIR base directory for the home directory of the
new account
-c, --comment COMMENT GECOS field of the new account
-d, --home-dir HOME_DIR home directory of the new account
-D, --defaults print or change default useradd configuration
-e, --expiredate EXPIRE_DATE expiration date of the new account
-f, --inactive INACTIVE password inactivity period of the new account
-g, --gid GROUP name or ID of the primary group of the new
account
-G, --groups GROUPS list of supplementary groups of the new
account
-h, --help display this help message and exit
-k, --skel SKEL_DIR use this alternative skeleton directory
-K, --key KEY=VALUE override /etc/login.defs defaults
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home create the user‘s home directory
-M, --no-create-home do not create the user‘s home directory
-N, --no-user-group do not create a group with the same name as
the user
-o, --non-unique allow to create users with duplicate
(non-unique) UID
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL login shell of the new account
-u, --uid UID user ID of the new account
-U, --user-group create a group with the same name as the user
示例:创建组和用户,并指定UID和GID,设置密码和过期日期
[root@CentOS7 ~]# groupadd distro --gid 2019
[root@CentOS7 ~]# useradd mandriva -g distro --uid 1005 --password mageedu --expiredate 7
[root@CentOS7 ~]# id mandriva
uid=1005(mandriva) gid=2019(distro) groups=2019(distro)
示例:创建账号,指定UID,家目录以及密码
[root@CentOS7 ~]# useradd mageia --uid 1100 --home-dir /home/linux --password mageedu
[root@CentOS7 ~]# id mageia
uid=1100(mageia) gid=1100(mageia) groups=1100(mageia)
[root@CentOS7 home]# ll
total 0
drwx------. 2 mageia mageia 59 May 8 06:13 linux
drwx------. 2 mandriva distro 59 May 8 06:10 mandriva
示例:创建用户并增加附加组,指定shell环境
[root@CentOS7 linux]# groupadd peguin
[root@CentOS7 linux]# useradd slackware --uid 2002 -g distro -G peguin --shell /bin/tcsh
[root@CentOS7 linux]# id slackware
uid=2002(slackware) gid=2019(distro) groups=2019(distro),2020(peguin)
[root@CentOS7 linux]# groupadd admins
[root@CentOS7 linux]# usermod slackware -G admins #给用户添加附加组
[root@CentOS7 linux]# id slackware
uid=2002(slackware) gid=2019(distro) groups=2019(distro),2021(admins)
[root@CentOS7 linux]# cat /etc/passwd
slackware:x:2002:2019::/home/slackware:/bin/nologin #修改为没有登录权限
3.文件目录基本操作
#文件操作基本命令
ls 显示文件或目录名称
ll 显示文件基本信息
stat 显示文件元数据信息
file 查看文件类型
touch 创建文件
cp 复制文件
mv 移动和重命名文件
rm 删除文件
shred 安全删除文件
ln 创建连接文件
#目录操作基本命令
pwd 显示当前shell目录绝对路径
cd 切换目录
tree 显示目录树
mkdir 创建目录
rmdir 删除空目录
3.1cp命令详解
cp - copy files and directories
[root@CentOS7 ~]$ cp --help
Usage: cp [OPTION]... [-T] SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE...
Options
-a, 常用于复制目录,保留链接、文件属性,并复制目录下所有内容。
-d,复制时保留链接。及Windows中的快捷方式。
-f, --force ,覆盖已经存在的目标文件而不给出提示。
-i, --interactive,与-f相反,覆盖目标之前给出提示,提供交互。
-p, 除复制文件内容外,还把修改时间和访问权限也复制到新文件中。
-R, -r, --recursive,若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件
-l, 不复制文件,只是生成链接文件。
--help display this help and exit
--version output version information and exit
示例:将data目录下的所有文件复制到新目录newdata下
[root@CentOS7 ~]# cp -r data/ newdata
3.2mv命令详解
mv - move (rename) files
[root@CentOS7 ~]# mv --help
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Options
-b,当前目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-f, --force,覆盖前不提示。
-i, --interactive,如果源和目标文件同名,则会先询问是否覆盖旧文件。
-n, --no-clobber,不要覆盖任何已存在的文件或目录。
-u, --update,当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
--help display this help and exit
--version output version information and exit
mv 参数设置与运行结果
命令格式 | 运行结果 |
---|---|
mv source_file dest_file | 将源文件名改为目标文件名 |
mv source_file dest_dir | 将文件移动到目标目录中 |
mv source_dir dest_dir | 目录名存在,移动到目标目录中;目录名不存在则修改目标目录名 |
mv source_dir dest_file | 报错,不符合逻辑 |
4.文件目录权限详解
普通权限中,用户对文件只有三种身份,就是属主、属组和其他人;每种用户身份拥有读(read)、写(write)和执行(execute)三种权限。
[root@CentOS7 ~]# ll initial-setup-ks.cfg
-rw-r--r--. 1 root root 1852 Apr 30 22:10 initial-setup-ks.cfg
# 权限 链接数 所有者 所属组 大小 创建和修改时间 文件名
4.1文件所有者属组权限管理
文件目录权限基本命令:
chown - change file owner and group
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chgrp - change group ownership
chgrp [OPTION]... GROUP FILE...
chmod - change file mode bits
chmod [OPTION]... MODE[,MODE]... FILE...
文件权限作用对象:
owner 属主,u
group 属组,g
other 其他,o
文件权限定义:
r, readable 4 可使用文件查看工具查看内容
w, writable 2 可修改其内容
x, excutable 1 可以把文件作为内核进程,运行此文件
4.2默认权限管理
新建文件和目录的权限,用umask实现。
- 新建文件默认权限:666-umask,如果所得结果某位存在执行权限,则将其权限+1,偶数不变
- 新建目录默认权限:777-umask
示例:
root@CentOS7 ~]# umask
0022
[root@CentOS7 ~]# touch hong.log
[root@CentOS7 ~]# ll hong.log
-rw-r--r--. 1 root root 0 May 7 22:26 hong.log # 644=666-022
[root@CentOS7 ~]# mkdir hong;
[root@CentOS7 ~]# ll
total 8
drwxr-xr-x. 2 root root 6 May 7 22:28 hong # 755=777-022
备注:
非特权用户umask默认是002
root的umask默认是022
修改umask值:
#临时修改
[root@CentOS7 ~]# umask 033
[root@CentOS7 ~]# umask
0033
#永久修改
#全局设置:/etc/bashrc
#用户设置:~/.bashrc
[root@CentOS7 ~]# vim .bashrc
# .bashrc
# User specific aliases and functions
umask 033
4.3特殊权限
SUID权限:
运行某程序时,相应进程的属主是程序文件自身的属主,而不是用户本身了,只对二进制程序有效,执行者对于程序需要有x权限。
chmod u+s file
SGID权限:
对于文件:运行某程序时,相应进程的属组是程序文件自身的属组,而不是用户本身的基本组.
对于目录:用户对此目录有rx权限可以进入目录,用户进入此目录后,有效用户组会变成该目录的用户组,若用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相同.
chmod g+s dir...
chmod 2xxx dir
chmod g-s dir...
Sticky权限:
只针对目录有效,当用户对目录拥有wx权限时,用户在该目录创建的文件或目录,只有自己与root才可以删除.在一个公共目录,每个人都可以创建文件,删除自己的文件,但是不能删除别人的文件.
chmod o+t dir...
文件特殊属性:
chattr
lsattr
[root@CentOS7 data]# chattr --help
Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...
ACL权限功能:
ACL是Access Control List(访问控制列表)的缩写,不过在Linux系统中,ACL用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙)。
getfacl
setfacl
[root@CentOS7 test]# setfacl --help
setfacl 2.2.51 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl modify the current ACL(s) of file(s)
-M, --modify-file=file read ACL entries to modify from file
-x, --remove=acl remove entries from the ACL(s) of file(s)
-X, --remove-file=file read ACL entries to remove from file
-b, --remove-all remove all extended ACL entries
-k, --remove-default remove the default ACL
--set=acl set the ACL of file(s), replacing the current ACL
--set-file=file read ACL entries to set from file
--mask do recalculate the effective rights mask
-n, --no-mask don‘t recalculate the effective rights mask
-d, --default operations apply to the default ACL
-R, --recursive recurse into subdirectories
-L, --logical logical walk, follow symbolic links
-P, --physical physical walk, do not follow symbolic links
--restore=file restore ACLs (inverse of `getfacl -R‘)
--test test mode (ACLs are not modified)
-v, --version print version and exit
-h, --help this help text
示例:
[root@CentOS7 linux]# useradd user1
[root@CentOS7 linux]# useradd user2
[root@CentOS7 linux]# useradd user3
[root@CentOS7 /]# mkdir /data/test
[root@CentOS7 data]# ll
total 0
drwxr-xr-x. 2 root root 6 May 8 06:40 test
[root@CentOS7 data]# chown user1:user1 test/ #修改文件夹属主和属组
[root@CentOS7 data]# ll
total 0
drwxr-xr-x. 2 user1 user1 6 May 8 06:40 test
[root@CentOS7 data]# chmod o=rw test/ #修改目录为其他用户读写权限
[root@CentOS7 data]# ll
total 0
drwxr-xrw-. 2 user1 user1 6 May 8 06:40 test
[user1@CentOS7 test]$ touch /data/test/a{1..4}.sh #用user1账户创建文件
[user1@CentOS7 test]$ ll
total 0
-rw-rw-r--. 1 user1 user1 0 May 8 06:47 a1.sh
-rw-rw-r--. 1 user1 user1 0 May 8 06:47 a2.sh
-rw-rw-r--. 1 user1 user1 0 May 8 06:47 a3.sh
-rw-rw-r--. 1 user1 user1 0 May 8 06:47 a4.sh
[root@CentOS7 data]# chattr +i test/
[root@CentOS7 data]# lsattr
----i----------- ./test
[root@CentOS7 test]# rm -rf a2.sh
rm: cannot remove ‘a2.sh’: Permission denied
[root@CentOS7 test]# rm -rf a3.sh
rm: cannot remove ‘a3.sh’: Permission denied
[root@CentOS7 test]#