Centos7学习笔记(八)-基础命令(三)
1、rsync
作为一个同步(备份,增量备份)命令,它的选项非常的多,常用的组合是avz,当然,如果需要建立备份服务,那么-n必然是用的多的参数选项。
关于rsync的用法详细说明,参考网上的这篇原文链接:https://www.cnblogs.com/f-ck-need-u/p/7220009.html#blog21,文章写的非常好,有大量的通俗易懂的例子及解释。以下关于rsync参数选项的说明,就抄录自该文章。
v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。 -P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。 -n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。 -a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。 -r --recursive:递归到目录中去。 -t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新 :检查出mtime不同从而导致增量传输无效。-o --owner:保持owner属性(属主)。 -g --group:保持group属性(属组)。 -p --perms:保持perms属性(权限,不包括特殊权限)。 -D :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。 -l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。 -z :传输时进行压缩提高效率。 -R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。 --size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。 -u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。 -d --dirs :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。 --max-size :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m") --min-size :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。 --exclude :指定排除规则来排除不需要传输的文件。 --delete :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在 :exclude/include规则生效之后才执行的。 -b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。 --backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。 -e :指定所要使用的远程shell程序,默认为ssh。 --port :连接daemon时使用的端口号,默认为873端口。 --password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。 -W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。 --existing :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。 --ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。 --remove-source-files:要求删除源端已经成功传输的文件。 --bwlimit=KBps 限定rsync传输带宽,单位是KB
2、scp
scp是基于ssh的安全拷贝命令(security copy),它是从古老的远程复制命令rcp改变而来,实现的是在host与host之间的拷贝,可以是本地到远程的、本地到本地的,甚至可以远程到远程复制。注意,scp可能会询问密码。
如果scp拷贝的源文件在目标位置上已经存在时(文件同名),scp会替换已存在目标文件中的内容,但保持其inode号。
如果scp拷贝的源文件在目标位置上不存在,则会在目标位置上创建一个空文件,然后将源文件中的内容填充进去。
之所以解释上面的两句,是为了理解scp的机制,scp拷贝本质是只是填充内容的过程,它不会去修改目标文件的很多属性,对于从远程复制到另一远程时,其机制见后文。
scp [-12BCpqrv] [-l limit] [-o ssh_option] [-P port] [[user@]host1:]file1 ... [[user@]host2:]file2
选项说明:
-1:使用ssh v1版本,这是默认使用协议版本
-2:使用ssh v2版本
-C:拷贝时先压缩,节省带宽
-l limit:限制拷贝速度,Kbit/s.
-o ssh_option:指定ssh连接时的特殊选项,一般用不上。偶尔在连接过程中等待提示输入密码较慢时,可以设置GSSAPIAuthentication为no
-P port:指定目标主机上ssh端口,大写的字母P,默认是22端口
-p:拷贝时保持源文件的mtime,atime,owner,group,privileges
-r:递归拷贝,用于拷贝目录。注意,scp拷贝遇到链接文件时,会拷贝链接的源文件内容填充到目标文件中(scp的本质就是填充而非拷贝)
-v:输出详细信息,可以用来调试或查看scp的详细过程,分析scp的机制
3、su
作用是切换用户,常用的方式是不加任何参数或者加-作为参数。下面是详细解释:
选项说明:
-c command:使用-c指定要在shell执行的命令,会为每个su都分配新的会话环境
-, -l, --login:启动shell作为登录的shell,模拟真正的登录环境。它会做下面几件事:
1.清除除了TERM外的所有环境变量
2.初始化HOME,SHELL,USER,LOGNAME,PATH环境变量
3.进入目标用户的家目录
4.设置argv[0]为"-"以便设置shell作为登录的shell。使用--login的su是交互式登录。不使用--login的su是非交互式登录(除不带任何参数的su外)
-m, -p, --preserve-environment:
保留整个环境变量(不会重新设置HOME,SHELL,USER和LOGNAME),保留环境的方法是新用户shell上执行原用户的各配置文件,如~/.bashrc当设置了--login时,将忽略该选项
-s SHELL:运行指定的shell而非默认shell,选择shell的顺序优先级如下:
1.--shell指定的shell
2.如果使用了--preserve-environment,选择SHELL环境变量的shell
3.选项目标用户在passwd文件中指定的shell
4./bin/sh
4、sudo
sudo可以让一个用户以某个身份(如root或其他用户)执行某些命令,它隐含的执行方式是切换到指定用户再执行命令,因为涉及到了用户的切换,所以环境变量是否重置是需要设置的。
sudo支持插件实现安全策略。默认的安全策略插件是sudoers,它是通过/etc/sudoers或LDAP来配置的。
安全策略是控制用户使用sudo命令时具有什么权限,但要注意,安全策略可能需要用户进行身份认证,如密码认证的机制或其他认证机制,如果开启了认证要求,则在指定时间内未完成认证时sudo会退出,默认超时时间为5分钟。
安全策略支持对认证进行缓存,使得在一定时间内该用户无需再次认证就可以执行sudo命令,默认缓存时间为5分钟,sudo -v可以更新认证缓存。
sudo支持日志审核,可以记录下成功或失败的sudo。
$ visudo # 以下选取的是部分行
## hostname or IP addresses instead. # 主机别名Host_Alias # Host_Alias FILESERVERS = fs1, fs2 # Host_Alias MAILSERVERS = smtp, smtp2 ## User Aliases # 用户别名User_Alias # User_Alias ADMINS = jsmith, mikem ## Command Aliases # 命令别名 # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig # Cmnd_Alias LOCATE = /usr/bin/updatedb root ALL=(ALL) ALL # sudo权限的配置 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL
安全策略配置格式为:
用户名 主机名=(可切换到的用户身份) 权限和命令
① ② ③ ④
①用户名:可以用组,只需在组名前加个百分号%表示。
②主机名:表示该用户可以在哪些主机上运行sudo,可以用hostname也可以用ip指定。
③可切换的用户身份,即指定执行命令的用户,也可以用组。
④权限和命令:允许执行和不允许执行的命令(多个命令间用逗号分隔)和特殊权限,命令可以带其选项及参数。命令要写绝对路径。不允许执行的命令需要在命令前加上”!”来表示。可以使用标签,如NOPASSWD标签表示切换或以指定用户执行该标签后的命令时不需要输入密码。一行写不下时可使用\续行
一个例子:
DEFAULT=/bin/*,\ /usr/bin/*,\ /bin/su - [!-]*,\ !/bin/su - root,\ !/bin/su root, \ /sbin/ldconfig,\ /sbin/ifconfig,\ /sbin/service,\ /sbin/chkconfig,\ /usr/sbin/useradd,\ /usr/sbin/userdel,\ /usr/sbin/dmidecode, \ /usr/sbin/lsof, \ /usr/bin/passwd [!-]*,\ !/usr/bin/passwd root,\ sudoedit /etc/rc.local,\ sudoedit /etc/hosts,\ sudoedit /etc/ld.so.conf,\ sudoedit /etc/exports,\ sudoedit /etc/profile,\ sudoedit /etc/bashrc,\ sudoedit /etc/security/limits.conf,\ /etc/init.d/* ABC ALL=(ALL)NOPASSWD:DEFAULT
其中上面的/usr/bin/passwd [!-]*表示允许修改加参数的密码。/bin/su - [!-]*表示允许”su -“到某用户下,但必须给参数。
5、umask
umask值用于设置用户在创建文件时的默认权限。对于root用户(实际上是UID小于200的user),系统默认的umask值是022;对于普通用户和系统用户,系统默认的umask值是002。
默认它们的设置是写在/etc/profile和/etc/bashrc两个环境配置文件中。
umask是如何决定创建文件的默认权限的呢?
如果创建的是目录,则使用777-umask值,如root的umask=022,则root创建目录时该目录的默认权限为777-022=755,而普通用户创建目录时,权限为777-002=775.
如果创建的是普通文件,在Linux中,深入贯彻了一点:文件默认不应该有执行权限,否则是危险的。所以在计算时,可能会和想象中的结果不一样。如果umask的三位都为偶数,则直接使用666去减掉umask值,因为6减去一个偶数还是偶数,任何位都不可能会有执行权限。如root创建普通文件时默认权限为666-022=644,而普通用户创建普通文件时默认权限为666-002=664。
如果umask值某一位为奇数,则666减去umask值后再在奇数位上加1。如umask=021时,创建文件时默认权限为666-021=645,在奇数位上加1,则为646。总之计算出后默认都是没有执行权限的。
6、setfacl(用于精细化或者独立设置用户对目录权限,ftp或者NFS服务多用它)
setfacl [options] u:[用户列表]:[rwx] 目录/文件名 # 对用户设置使用u
setfacl [options] g:[组列表]:[rwx] 目录/文件名 # 对组设置使用g
选项说明:
-m:设定ACL权限(modify)
-x:删除指定的ACL权限,可以指定用户、组和文件来删除(remove)
-M:写了ACL条目的文件,将从此文件中读取ACL条目,需要配合-m,所以-M指定的是modify file
-X:写了ACL条目的文件,将从此文件中读取ACL条目,需要配合-x,所以-X指定的是remove file
-n:不重置mask
-b:删除所有的ACL权限
-d:设定默认ACL权限,只对目录有效,设置后子目录(文件)继承默认ACL,只对未来文件 有效
-k:删除默认ACL权限
-R:递归设定ACL权限,只对目录有效,只对已有文件有效
查看使用getfacl命令
7、chattr
chattr [+ - =] [ai] 文件或目录名
常用的参数是a(append,追加)和i(immutable,不可更改),其他参数略。
设置了a参数时,文件中将只能增加内容,不能删除数据,且不能打开文件进行任何编辑,哪怕是追加内容也不可以,所以像sed等需要打开文件的再写入数据的工具也无法操作成功。文件也不能被删除。只有root才能设置。
设置了i参数时,文件将被锁定,不能向其中增删改内容,也不能删除修改文件等各种动作。只有root才能设置。可以将其理解为设置了i后,文件将是永恒不变的了,谁都不能动它。
8、关于suid、sgid和sbit
suid只针对可执行文件,即二进制文件。它的作用是对某个命令(可执行文件)授予所有者的权限,命令执行完成权限就消失。一般是提权为root权限。
suid必须和x配合,如果没有x配合,则该suid是空suid,仍然没有执行命令的权限,所有者都没有了x权限,suid依赖于它所以更不可能有x权限。空的suid权限使用大写的”S”表示。
数字4代表suid,如4755。文件加suid方式,chmod u+s xxx。
sgid
针对二进制文件和目录。
针对二进制文件时,权限升级为命令的所属组权限。
针对目录时,目录中所建立的文件或子目录的组将继承默认父目录组,其本质还是提升为目录所属组的权限。此时目录应该要有rx权限,普通用户才能进入目录,如果普通用户有w权限,新建的文件和目录则以父目录组为默认组。
以2代表sgid,如2755,和suid组合如6755。组或目录增加sgid方式: chmod g+s xxx
sbit
只对目录有效。对目录设置sbit,将使得目录里的文件只有所有者能删除,即使其他用户在此目录上有rwx权限,即使是root用户。
以1代表sbit。chmod o+t xxx
9、chage
看这么个例子:
useradd -o -u 0 -e "10 day" jtest #《========= -o表示允许添加uid相同的用户
[root@ecs-ryCz8 ~]# chage -l jtest Last password change: Aug 20, 2020 Password expires: Nov 18, 2020 Password inactive: never Account expires: Aug 30, 2020 Minimum number of days between password change: 10 Maximum number of days between password change: 90 Number of days of warning before password expires: 7
chge -l 列出用户密码或时间相关内容。
-E能将修改用户账户过期时间。
10、netstat
-a ——显示所有活动连接
-n——以数字形式显示
-t——查看tcp协议相关信息
-u——查看udp协议相关信息
-l——监听
-p——查看pid和进程名
11、lsof
几乎可以替代netstat和ps的命令,字面意思是list open file,列出打开的文件。
默认 : 没有选项,lsof列出活跃进程的所有打开文件
组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数
-a : 结果进行“与”运算(而不是“或”)
-l : 在输出显示用户ID而不是用户名
-h : 获得帮助
-t : 仅获取进程ID
-U : 获取UNIX套接口地址
-F : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)
-i 显示所有的连接
-p 列出指定pid的信息
关于-i:
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
-i 6仅获取IPv6流量
lsof -i 6
仅显示TCP连接(同理可获得UDP连接)
lsof -iTCP
使用-i:port来显示与指定端口相关的网络信息
lsof -i :22
使用@host来显示指定到指定主机的连接
lsof -i@172.16.1.24
使用@host:port显示基于主机与端口的连接
lsof -i@172.16.1.24:22
找出监听端口
lsof -i -sTCP:Listen
找出已建立的连接
lsof -i -sTCP:ESTABLISHED使用-u显示指定用户打开了什么
lsof -u nginx
杀死指定用户所做的一切事情
kill -9 `lsof -u nginx`
使用-c查看指定的命令正在使用的文件和网络连接
lsof -c syslog-ng
显示与指定目录交互的所有一切
lsof /var/log/messages/
显示与指定文件交互的所有一切
lsof /etc/ssh/sshd_config
同时使用-t和-c选项以给进程发送 HUP 信号
kill -HUP `lsof -t -c sshd`
lsof输出部分的解释:
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。
lsof输出各列信息的意义如下:
COMMAND:进程的名称 PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改,txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。
与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
12、nmap
-sP——探测某网段内有哪些主机是存活的
-sT——探测某主机开启了哪些TCP端口

