添加用户:
# useradd xxx
删除用户:
# userdel xxx
# userdel -r xxxx (删掉用户目录及邮箱)
添加组:
# groupadd group_name
将用户添加到组:
# useradd -g group_name user_name
更改用户所属的组:
# usermod -g group_name user_name
更改文件所属组:
# chgrp group_name file_name
更改文件所属者:
# chown own_name file_name
重启网络:
# /etc/init.d/network restart
# service network restart
重启ssh服务
# systemctl restart sshd
# systemctl restart sshd.service
生成ssh公钥/私钥
# ssh-keygen -t rsa
将公钥拷贝到.ssh/authorized_keys中(默认权限为600)
# ssh-copy-id root@192.168.11.145 ## (目标机器IP:可以是自己,也可以是其他机器)或者如下:
# ssh-copy-id -i id_rsa.pub 192.168.11.144 ## (目标机器IP:可以是自己,也可以是其他机器)
安装ssh服务端和客户端
# yum install openssh-server
# yum install openssh-clients
防火墙
查看防火墙状态
# systemctl status firewalld
# service iptables status
暂时关闭防火墙
# systemctl stop firewalld
# service iptables stop
永久关闭防火墙
# systemctl disable firewalld
# chkconfig iptables off
重启防火墙
# systemctl restart firewalld.service
# systemctl enable firewalld
# service iptables restart
selinux操作
查看selinux状态
# sestatus
# getenforce
临时关闭selinux
# setenforce 0
永久关闭
可以修改配置文件/etc/selinux/config,将其中SELINUX设置为disabled
重启系统生效
查看时间
系统时间
# date
硬件时间
# hwclock
安装ntpdate工具
# yum -y install ntp ntpdate
设置系统时间与网络时间同步
# ntpdate cn.pool.ntp.org
Xshell文件传输
本地上传到linux服务器
# rz
将选定的文件发送到本地
# sz
主机名"hostname"
查看主机名
# hostname
# echo $HOSTNAME
修改主机名
方法一(到/etc/hostname文件下编辑):
# cd /etc
# vi hostname
# reboot (使生效)
方法二(使用命令直接设置):
# hostnamectl set-hostname xxxx
查看linux系统
安装lsb
# yum -y install lsb
查看系统版本
# lsb_release -a
或者
# cat /etc/centos-release
Docker启动命令:
# systemctl start docker
查看docker服务是否启动
# ps -ef |grep docker
重启docker服务
# systemctl restart docker
停止docker服务
# systemctl stop docker
启动Docker 守护进程
# systemctl daemon-reload
运行dockerfile
在同级目录下 运行:# docker build -t demo(镜像运行的名称) . ## 进行docker 镜像文件的创建
通过# docker images 查看镜像是否创建成功
运行镜像 # docker run --name demo -d --restart=always -p 8085:8085 demo ## -p 宿主机端口:容器端口
# 推送镜像到tone平台:
# docker push tone.tcl.com/devops/docker/release/ezone-proxy:0.0.0-1703
给镜像打tag:
# docker tag hub.kce.ksyun.com/ezone-deploy/ezone-proxy:0.0.0-1703 tone.tcl.com/devops/docker/release/ezone-proxy:0.0.0-1703
运行镜像:
# docker run -it hub.kce.ksyun.com/ezone-deploy/ezone-proxy:0.0.0-1703 /bin/bash
查看系统最近重启时间
# who -b
# last reboot -1
*stat系列命令
dstat:系统资源统计,代替vmstat,iosat,ifstat,netstat命令。
vmstat:显示虚拟内存信息
iostat:统计cpu和IO信息
ifstat:阅读网络接口统计数据的便捷工具
netstat:查看网络连接情况
dstat:系统资源统计,代替vmstat,iosat,ifstat,netstat命令。
Usage: #dstat [-afv] [options…] [delay [count]]
[options]:
-c:单独显示cpu相关信息;
-d:单独显示disk相关信息;
-m:单独显示memory相关统计数据;
-n:单独显示network相关统计数据;
-r:单独显示io请求相关的统计数据;
-s:显示swapped相关的统计数据。
-p:单独显示process相关统计数据;
-g:单独显示page相关统计数据;
top命令
top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
在Linux操作系统中,top是使用最频繁,也是比较全的一个命令。Top命令类似于Windows系统的任务管理器工具。
它对于所有正在运行的进行和系统负荷提供不断更新的概览信息,包括系统负载、CPU利用分布情况、内存使用、每个进程的内容使用情况等信息。
(1) top -d:number代表秒数 默认5秒 刷新一次
(2) top -b:以批次的方式执行top
(3) top -b: ‘批量模式’,用来将输出重定向到指定文件,一般配合-n 指定输出几次统计信息
(4) top -c: 显示产生进程的完成命令
(5) top -p: 指定pid 多个pid以‘逗号’分开,只显示指定pid进程的状态
(6) **top显示的页面命令**
find命令
find 命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件
之前学习的通配符,在使用 find 命令时同时可用
find命令语法格式:
find [路径] [选项] [操作] # 如果省略路径,表示在当前文件夹下查找
常用选项
-name 查找 /etc 目录下以 conf 结尾的文件,文件名区分大小写,例如:# find /etc -name '*.conf'
-iname 查找当前目录下所有文件名为 aa 的文件,文件名不区分大小写,例如:# find . -iname aa
-user 查找文件所属用户为 zhangsan 的所有文件,例如:# find . -user zhangsan
-group 查找文件所属组为 dev 的所有文件,例如:# find . -group dev
-type 根据类型查找:如下
f 文件 find . -type f
d 目录 find . -type d
c 字符设备文件 find . -type c
b 块设备文件 find . -type b
l 链接文件 find . -type l
p 管道文件 find . -type p
-size 根据文件大小查询
-n 小于 大小为 n 的文件
+n 大于 大小为 n 的文件
举例1:查找 /ect 目录下,小于 10000 字节的文件。 # find /etc -size -10000c
举例2:查找 /etc 目录下,大于 1M 的文件。# find /etc -size +1M
-mtime
-n n 天以内修改的文件。
+n n 天以外修改的文件。
n 正好 n天 修改的文件
举例1: 查询 /etc 目录下,5天以内修改 且以 conf 结尾的文件。 # find /etc -mtime -5 -name '*.conf'
举例2: 查询 /etc 目录下,10天之前修改,且属于 yangyang 的文件。 # find /etc -mtime +10 -user yangyang
-mmin
-n n 分钟以内修改过的文件
+n n 分钟之前修改过的文件
举例1: 查询 /etc 目录下 30分钟 之前修改过的文件。 # find /etc -mmin +30
举例1: 查询 /etc 目录下 30分钟 之内修改过的目录。 # find /etc -mmin -30 -type d
-mindepth n 从第 n 级目录开始搜索
举例:从 /etc 的第三级子目录开始搜索。 find /etc -mindepth 3
-maxdepth n 表示至多搜索到第 n-1 级子目录。
举例1: 在 /etc 中搜索符合条件的文件,但最多搜索到 2级 子目录。 # find /etc -maxdepth 3 -name '*.conf'
举例2: # find /etc -type f -name '*.conf' -size +10k -maxdepthc 2
不常用选项
-nouser 查询没有所属用户的文件
举例:# find /etc -type f -nouser
-nogroup 查询没有所属组的文件
举例:# find /etc -type f -nogroup
-perm 根据权限查询
举例:# find /etc -perm 664
-prune 通常和 -path 一起使用,用于将特定目录排除在搜索条件之外。过滤条件写在其他条件前面。
举例1:查找当前目录下的所有普通文件,但排除 test目录。
# find . -path ./test -prune -o -type f
举例2: 查找当前目录下所有普通文件,但排除 test目录 和 opt目录。
# find . -path ./test -prune -o -path ./opt -prune -o -type f
举例3: 查找当前目录下所有普通文件,但排除 test目录 和 opt目录,但属主为 yangyang
# find . -path ./test -prune -o -path ./opt -prune -o -type f -a -user yangyang
举例4: 查找当前目录下所有普通文件,但排除 test目录 和 opt目录,但属主为 yangyang,且文件大小必须大于 500字节
# find . -path ./test -prune -o -path ./opt -prune -o -tyep f -a -user yangyang -a -size +500
-newer file1
举例:查找当前目录下比 a 文件要新的文件。 find . -newer a
操作查找到的文件
-print 打印输出。 默认的选项,即打印出找到的结果。
-exec 对搜索到的文件执行特定的操作,固定的格式为:-exec 'commond' {} \; 注意:{} 表示查询的结果。
举例1: 搜索 /etc 目录下的文件(非目录),文件以 conf 结尾,且大于 10k,然后将其删除。
# find /etc -type f -name '*.conf' -size +10k -exec rm -f {} \;
举例2: 将 /data/log/ 目录下以 .log 结尾的文件,且更改时间在 7 天以上的删除。
# find /data/log -name '*.log' -mtime +7 -exec rm -f \;
举例3: 搜索条件同 例1 一样,但是不删除,只是将其复制到 /root/conf 目录下
# find /etc -type f -name '*.conf' -size +10k -exec cp {} /root/conf/ \;
-ok 和 -exec 的功能一样,只是每次操作都会给用户提示。
逻辑运算符
-a 与 (默认情况查询条件之间都是 与 的关系)
-o 或
-not | ! 非
示例:
find 默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
# find . -name "*.log" -ls ## 在当前目录查找以.log结尾的文件,并显示详细信息。
# find /root/ -perm 600 ## 查找/root/目录下权限为600的文件
# find . -type f -name "*.log" ## 查找当目录,以.log结尾的普通文件
# find . -type d | sort ## 查找当前所有目录并排序
# find . -size +100M ## 查找当前目录大于100M的文件
# find . -name '[xk-]*.sh' ## 查找指定正则名字的文件
打包 / 解包
tar 是 Linux 中最常用的 备份工具,此命令可以 把一系列文件 打包到 一个大文件中,也可以把一个 打包的大文件恢复成一系列文件
tar 的命令格式如下:
# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路径...
# 解包文件
tar -xvf 打包文件.tar
压缩/解压缩
1)gzip
tar 与 gzip 命令结合可以使用实现文件 打包和压缩
tar 只负责打包文件,但不压缩
用 gzip 压缩 tar 打包后的文件,其扩展名一般用 xxx.tar.gz
在 Linux 中,最常见的压缩文件格式就是 xxx.tar.gz
2) 在 tar 命令中有一个选项 -z 可以调用 gzip ,从而可以方便的实现压缩和解压缩的
功能命令格式如下:
# 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...
# 解压缩文件
tar -zxvf 打包文件.tar.gz
# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
选项 含义
-C 解压缩到指定目录,注意:要解压缩的目录必须存在
tar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。
常用格式:
单个文件压缩打包 tar czvf my.tar file1
多个文件压缩打包 tar czvf my.tar file1 file2,...
单个目录压缩打包 tar czvf my.tar dir1
多个目录压缩打包 tar czvf my.tar dir1 dir2
3) zip 命令用于压缩文件
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
# zip test1.zip test1.txt 压缩一个名为test.zip的文件;
# zip -r test2.zip test2 表示将指定目录下的所有文件和子目录一并处理
解压缩:unzip [选项] 压缩包名
命令选项:
-d 目录名 将压缩文件解压到指定目录下
-n 解压时并不覆盖已经存在的文件
-o 解压时覆盖已经存在的文件,并且无需用户确认
-v 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作
-t 测试压缩文件有无损坏,但并不解压
-x 文件列表 解压文件,但不包含文件列表中指定的文件。
grep 指令
grep 允许对文本文件进行 模式查找,所谓模式查找,又被称为正则表达式。
grep [选项] [查找条件(正则)] [目标文件]
-E:开启扩展的正则表达式
-c:计算找到'搜寻字符串'的次数
-i:忽略大小写的不同,所以大小写视为相同
-o:只显示被漠视匹配到的字符串
-v:反向选择,即输出没有匹配到的那些字符
--color=auto:可以将找到的关键词部分加上颜色的显示!
-n:顺便输出行号
-w:表示精确匹配一个字符
# grep -rn "docker" . ### 在当前目录下查找"docker"关键字
^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配"^"字符本身,需要转移"\^"
$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则"$"也匹配'\n'或'r'
. “.”代表除"\n\s"之外的任何单个字符
\ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的 特殊意义
* 匹配前面的子表达式零次或多次。要匹配"*"字符,要进行\转移
[ ] 字符集合,匹配所包含的任意的一个字符
[^] 复制字符集。匹配未包含在[ ]内的任意一个字符
[n1-n2] 字符范围。匹配指定范围内的任意一个字符。例如[a-z]可以匹配到a到z范围内的任意一个小写字母字符,[0-9]可以匹配到0-9任意一个数字
{n} n是一个非负整数,匹配确定的n次,例如“o{2}”不能匹配“Bob”中的“o”,但是能匹配到“food”中的“oo”
{n,} n是一个非负整数,至少(最少)匹配n次。例如,“o{2,}”不能匹配"Bob"中的“o”,但是能匹配“fooooood”中的所有o。“o{1.}”等于“o+”
{n,m} n和m均为非负整数,其中n<=m,最少匹配n次,最多匹配m次
+ 作用:重复一个或者一个以上的前一个字符
示例:执行“egrep -n 'wo+d' test.txt”命令,即可查询"wood" "woood" "woooooood"等字符串
? 作用:零个或者一个的前一个字符
示例:执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet”“best”这两个字符串
| 作用:使用或者(or)的方式找出多个字符
示例:执行“egrep -n 'of|is|on'test.txt”命令即可查询"of"或者"if"或者"on"字符串
() 作用:查找“组”字符串
示例:“egrep-n't(a|e)st'test.txt”。“tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e” 列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串
()+ 作用:辨别多个重复的组
示例:“egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意
修改文件权限
序号 命令 作用
01 chown 修改拥有者(修改文件/目录的拥有者或者群组)
02 chgrp 修改组 (修改文件/目录的群组)
03 chmod 修改权限
命令格式如下:
# 修改文件|目录的拥有者
chown 用户名 文件名|目录名
# 递归修改文件|目录的组
chgrp -R 组名 文件名|目录名
# 递归修改文件权限
chmod -R 755 文件名|目录名
# 修改用户所在组
usermod -g user-name xxxx(新组名)
scp命令
scp 就是 secure copy ,是一个在 Linux 下用来进行 远程拷贝文件 的命令
它的地址格式与 ssh 基本相同,需要注意的是,在指定端口时用的是大写的 -P 而不是小写的
# 把本地当前目录下的 01.py 文件 复制到 远程 家目录下的 Desktop/01.py
# 注意:`:` 后面的路径如果不是绝对路径,则以用户的家目录作为参照路径
scp -P port 01.py user@remote:Desktop/01.py
# 把远程 家目录下的 Desktop/01.py 文件 复制到 本地当前目录下的 01.py
scp -P port user@remote:Desktop/01.py 01.py
# 加上 -r 选项可以传送文件夹
# 把当前目录下的 demo 文件夹 复制到 远程 家目录下的 Desktop
scp -r demo user@remote:Desktop
# 把远程 家目录下的 Desktop 复制到 当前目录下的 demo 文件夹
scp -r user@remote:Desktop demo
(ssh相互授权后,scp 123.txt root@192.168.11.148:/home/admi/)
选 项 含义
-r 若给出的源文件是目录文件,则 scp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名
-P 若远程 SSH 服务器的端口不是 22,需要使用大写字母 -P 选项指定端口
ssh 基础(重点)
在 Linux 中 SSH 是 非常常用 的工具,通过 SSH 客户端 我们可以连接到运行了 SSH 服务器 的远程机器上
ssh的简单使用:
# ssh [-p port] user@remote
(# ssh -p 22 root@192.168.1.1)
user 是在远程机器上的用户名,如果不指定的话默认为当前用户
remote 是远程机器的地址,可以是 IP/域名,或者是 后面会提到的别名
port 是 SSH Server 监听的端口,如果不指定,就为默认值 22
unzip/zip
压缩(zip)
zip lib.zip tomcat.jar //将单个文件压缩(lib.zip)
zip -r lib.zip lib/ //将目录进行压缩(lib.zip)
zip -r lib.zip tomcat-embed.jar xml-aps.jar //将多个文件压缩为zip文件(lib.zip)
解压缩(unzip)
unzip file1.zip //解压一个zip格式压缩包
unzip -d /usr/app/com.lydms.english.zip //将`english.zip`包,解压到指定目录下`/usr/app/`上
查看服务器指定端口是否可用
telnet xx.xx.xx.xx 8093
telnet安装:https://blog.youkuaiyun.com/lydms/article/details/113698856
netstat 命令
netstat 命令用于显示各种网络相关信息,如网络连接, 路由表, 接口状态等等;
列出所有处于监听状态的tcp端口:
netstat -lt
查看所有的端口信息, 包括 PID 和进程名称
netstat -tulpn
查看当前端口号占用情况
用于查看某一端口的占用情况
lsof -i:8080
显示tcp,udp的端口和进程等相关情况
netstat -tunlp
指定端口号的进程情况
netstat -tunlp|grep 8080
查看PID进程信息
ps -aux |grep 28990
根据PID,查看JVM中各线程信息('0x9eb’为nid值)
jstack 2246|grep '0x9eb' -A 50
ps 命令
过滤得到当前系统中的 ssh 进程信息
ps aux | grep 'ssh'
watch -n xxx <command> //(间隔xxx秒执行指令...)
split拆分文件
split命令:可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
b:值为每一输出档案的大小,单位为 byte。
-C:每一输出档中,单行的最大 byte 数。
-d:使用数字作为后缀。
-l:值为每一输出档的行数大小。
-a:指定后缀长度(默认为2)。
split -b 10k date.file ## 分割成大小为10KB的小文件
split -b 10k date.file -d -a 3 split_file ## 为分割后的文件指定文件名的前缀
split -l 10 date.file ## 使用-l选项根据文件的行数来分割文件,例如把文件分割成每个包含10行的小文件
split -l 10 date.file -d 345
LINUX的文件按时间排序
> ls -alt # 按修改时间排序
> ls --sort=time -la # 等价于> ls -alt
> ls -alc # 按创建时间排序
> ls -alu # 按访问时间排序
# 以上均可使用-r实现逆序排序
> ls -alrt # 按修改时间排序
> ls --sort=time -lra # 等价于> ls -alrt
> ls -alrc # 按创建时间排序
> ls -alru # 按访问时间排序
更改某一个用户所在的group(比如将用户admi由admi组更换到root组)
# usermod -g root admi
查看用户所在group:
# groups xxxx
设置某个用户所在组
# usermod -g 用户组 用户名
注:-g|--gid,修改用户的gid,该组一定存在
2、把用户添加进入某个组(s)
# usermod -a -G 用户组 用户名
注:
-a|--append,把用户追加到某些组中,仅与-G选项一起使用
-G|--groups,把用户追加到某些组中,仅与-a选项一起使用
给一个文件重命名:
方法一:
# mv 123.txt 456.txt
方法二:
# cp 123.txt 456.txt
# rm 123.txt # 拷贝原文件成为新文件,然后删掉原文件
方法三:
# rename 123.txt 456.txt 123.txt # 此处为单个文件重命名,该指令也可为多个文件批量重命名
grep命令查找文件内容:
1,grep 查找内容 文件
# grep "abc" 123.txt
2,grep -i 查找内容 文件 ## 忽略大小写
# grep -i "abc" 123.txt
3,grep -nr 查找内容 * ## 搜索目录里所有文件,包括子目录的话,并且在结果中显示行号
# grep -nr "abc" .
定时任务包安装及使用:
# yum install crontabs -y ## 安装插件
# chkconfig crond on ## 设置为开机自启动
# crontab -l ## 查看所有定时任务
# crontab -e ## 添加或编辑定时任务
# service crond start ## 启动服务
# service crond stop ## 关闭服务
# service crond restart ## 重启服务
crontab举例:
时间 含义
*/2 * * * * /usr/local/start.sh ## 每间隔两分钟执行一次脚本
45 22 ***命令 在 22 点 45 分执行命令
0 17 ** 1命令 在每周一的 17 点 0 分执行命令
0 5 1,15**命令 在每月 1 日和 15 日的凌晨 5 点 0 分执行命令
40 4 ** 1-5命令 在每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 ***命令 在每天的凌晨 4 点,每隔 10 分钟执行一次命令
0 0 1,15 * 1命令 在每月 1 日和 15 日,每周一0 点 0 分都会执行命令,注意:星期几和几日最好不要同时出现,因为它们定义的都是天,容易冲突
(备注:crontab文件路径:/var/spool/cron/xxx)
查看进程:ps -ef
命令:ps -ef 查看所有正在运行的进程
结束进程:kill
命令:kill pid 或者 kill -9 pid(强制杀死进程) pid:进程号
netstat -an:查看当前系统端口
命令:netstat -an
搜索指定端口
命令:netstat -an | grep 8080
tail命令语法
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
参数解释:
-f 该参数用于监视File文件增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。
File 指定操作的目标文件名称
上述命令中,都涉及到number,假设不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾部開始计算。
tail可运行文件一般在/usr/bin/以下。
tail命令使用方法演示例子
1、tail -f filename
说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。
2、tail -n 20 filename
说明:显示filename最后20行。
3、tail -r -n 10 filename
说明:逆序显示filename最后10行。
4、tail -n 100 filename >> xxxx.log
说明:将文件中最后100行写入到新的log文件中
补充:
跟tail功能相似的命令还有:
cat 从第一行開始显示档案内容。
tac 从最后一行開始显示档案内容。
more 分页显示档案内容。
less 与 more 相似,但支持向前翻页
head 仅仅显示前面几行
tail 仅仅显示后面几行
n 带行号显示档案内容
od 以二进制方式显示档案内容
ssh配置文件路径:
/etc/ssh/sshd_config
# ssh-keygen # 获取ssh传输key
# ssh-copy-id 192.168.xx.xx # 传输key到指定主机
bash shell 脚本语法检测命令:
# bash -n xx/xx/xx/xx.sh
bash shell 脚本调试命令:
# bash -x xx/xx/xx.sh
ansible
查看模块文档:
ansible-doc xxxx
### 配置.vimrc文件,使其自动给脚本添加说明
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if &filetype == 'sh'
call setline(1,"#!/bin/bash")
call setline(2,"#********************************************************")
call setline(3,"#Author: xiongK")
call setline(4,"#Description: The bash script")
call setline(5,"#Copyright(C): ".strftime("%Y")." All right reserved")
call setline(6,"#FileName: ".expand("%"))
call setline(7,"#********************************************************")
call setline(8,"")
endif
autocmd BufNewFile * normal G
endfunc
"新建.c,.h,.sh,.java,.bash文件,自动插入文件头
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
""定义函数SetTitle,自动插入文件头
func SetTitle()
"如果文件类型为.sh文件
if &filetype == 'sh'
call setline(1,"\#########################################################################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: zll")
call append(line(".")+2, "\# mail: zhnlion@126.com")
call append(line(".")+3, "\# Created Time: ".strftime("%c"))
call append(line(".")+4, "\#########################################################################")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Author: zll")
call append(line(".")+2, " > Mail: zhnllion@126.com ")
call append(line(".")+3, " > Created Time: ".strftime("%c"))
call append(line(".")+4, " ************************************************************************/")
call append(line(".")+5, "")
endif
if &filetype == 'cpp'
call append(line(".")+6, "#include<iostream>")
call append(line(".")+7, "using namespace std;")
call append(line(".")+8, "")
endif
if &filetype == 'c'
call append(line(".")+6, "#include<stdio.h>")
call append(line(".")+7, "")
endif
"新建文件后,自动定位到文件末尾
autocmd BufNewFile * normal G
endfunc
查看进程关系属性图:
# pstree -p
查看CPU信息:
# lscpu
查看硬盘信息:
# lsblk
查看内存:
# free -h
1、创建文件名时,包含时间戳
# touch $(date +%Y%m%d_%H_%M_%S).txt
给文件创建软连接
# ln -s srcfile dstfile
可根据 $? 判断前一条指令是否执行成功
# echo $? ## 返回0代表成功,返回其他则代表上一条指令失败
将执行结果放到/dev/null中
# ping -c3 192.168.1.1 &> /dev/null ## ping 3次
cut命令的功能是用于按列提取文件内容。cut是可以根据指定的关键词信息,针对特定的列内容进行过滤。
常用参数:
-c:以字符为单位进行分割
-b:以字节为单位进行分割
-d:自定义分隔符,默认为制表符”TAB”
-f:显示指定字段的内容
-n:取消分割多字节字符
--complement:补足被选择的字节、字符或字段
--out-delimiter:指定输出内容是的字段分割符
## cut -d : -f 3 /etc/passwd ### 以冒号为间隔符,仅提取指定文件中第三列的内容
## cut -c 1-4 /etc/passwd ### 仅提取指定文件中每行的前4个字符
## cut -b 2,4,6 /etc/passwd ### 切割/etc/passwd的第2,4,6个字节
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
参数:
-n 按数值大小排序
-t 指定分隔符,没有指定时,以空白作为分隔符
-k 排序字段 如: -k1 (按第1个字段排序) -k 1.2, 3.4 (按从第1个字段的第2个字符起,到第3个字段第4个字符止,进行排序)
-b 忽略每行开始的空格
-o 结果输出文件
-r 以相反顺序排序
-m 合并已经有序的文件,不排序
-f 忽略大小写
-d 排序时只按字母、数字或空格,忽略其它字符
1,文件中行分隔符为冒号":",要求先按第三列数字大小排序,再按照第一列数字大小排序,结果以降序输出
## echo -e "1:Python:15\n2:Python:5\n3:Ruby:25\n4:Python:15" | sort -t':' -k3 -k1 -nr
2,/etc/passwd 内容以冒号:来分隔,以第三栏至行末尾栏来排序
# cat /etc/passwd | sort -t ':' -k 3
3,如果对 /etc/passwd,以第六个域的第 2 个字符到第 4 个字符进行升序排序,再基于第一个域进行反向排序。
# cat /etc/passwd | sort -t ':' -k 6.2,6.4 -k 1,1r
linux中对数字的判断
[ -eq ] : 等于
[ -gt ] : 大于
[ -lt ] : 小于
[ -ne ] : 不等于
[ -ge ] : 大于等于
[ -le ] : 小于等于
Linux中的seq命令可以用来生成指定范围内、指定间隔的数字列表,常用在while、for和until等循环中
seq通常有三种语法形式:
(1) seq [OPTION]... LAST
当只给了一个参数时,默认生成1到LAST、间隔为1的数字列表,当LAST小于1时,seq无输出
# seq 8
(2) seq [OPTION]... FIRST LAST
当给了两个参数时,生成FIRST到LAST、间隔为1的数字列表,当LAST小于FIRST时,seq无输出
# seq 2 8
(3) seq [OPTION]... FIRST INCREMENT LAST
当给了三个参数时,生成FIRST到LAST、间隔为INCREMENT的数字列表,当LAST小于FIRST时,seq无输出。
# seq 2 2 8 # 2,4,6,8
示例:
指定空格为分隔符输出 2到8
# seq -s ' ' 2 8
=>结果:
2 3 4 5 6 7 8
定空格为分隔符,输出10以内的奇数
# seq -s ' ' 1 2 10
=>结果:
1 3 5 7 9
使用-f指定输出格式
# seq -f "%2g" 8 12
=>结果:
8
9
10
11
12
(上述指令使用-f来指定输出格式,%后面表示的是数字的位数,默认为%g,示例中的%2g表示两位输出,不足两位默认补空格。)
指定输出位数为2位,且不足部分补0
# seq -f "%02g" 8 12
=>结果:
08
09
10
11
12
在输出的序列前加入自定义字串
# seq -f "sss%02g" 9 11
=>结果:
sss09
sss10
sss11
保留小数后3位
# seq -f "%.3f" 9 11
=>结果:
9.000
10.000
11.000
-w 选项使输出数字等宽,默认补0
# seq -w 1 2 10
=>结果:
01
03
05
07
09
字符串判断
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
[ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
[ STRING1 ] 如果字符串不为空则返回为真,与-n类似
[ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
[ STRING1 != STRING2 ] 如果字符串不相同则返回为真
[ STRING1 < STRING2 ] 如果 “STRING2”字典排序在“STRING1”前面则返回为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。
数值判断
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=
逻辑判断
[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。
[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
[ ] || [ ] 用OR来合并两个条件
[ ] && [ ] 用AND来合并两个条件
整数运算
1、第一种: $(( 表达式 ))
2、第二种: $[ 表达式 ]
3、第三种: expr 表达式
4、第四种: let
[root@xiaoliu ~]# a=$(( 3+2 ))
[root@xiaoliu ~]# echo $a
5
[root@xiaoliu ~]# let a=3+4
[root@xiaoliu ~]# echo $a
7
[root@xiaoliu ~]# echo $[ 30 + 40 ]
70
[root@xiaoliu ~]# a=20
[root@xiaoliu ~]# b=55
[root@xiaoliu ~]# echo $[ $a + $b ]
75
[root@xiaoliu ~]# expr $a+$b
20+55
[root@xiaoliu ~]# expr $a + $b
75
完整表达式要被反引号````````包含,而不是单引号
表达式和运算符之间要有空格:2 + 2(不是2+2)
Linux read命令用于从标准输入读取数值。
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
参数说明:
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
实例
#这里默认会换行
echo "输入网站名: "
#读取从键盘的输入
read website
echo "你输入的网站名是 $website"
read -p "输入网站名:" website
echo "你输入的网站名是 $website"
每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。
通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。
测试文件 test.txt 内容如下:
123
456
runoob
测试代码:
count=1 # 赋值语句,不加空格
cat test.txt | while read line # cat 命令的输出作为read命令的输入,read读到>的值放在line中
do
echo "Line $count:$line"
count=$[ $count + 1 ] # 注意中括号中的空格。
done
echo "finish"
exit 0
执行结果为:
Line 1:123
Line 2:456
Line 3:runoob
finish
shell里面的数组
定义:使用圆括号,中间以空格作为分隔符
#定义一个数组
[root@mysql-binary shell_test]# a=(xx yy zz ff)
#直接用$a查看的是数组里面的第一个元素
[root@mysql-binary shell_test]# echo $a
xx
#查看数组里面所有的元素
[root@mysql-binary shell_test]# echo ${a[*]}
xx yy zz ff
[root@mysql-binary shell_test]# echo ${a[@]}
xx yy zz ff
#对数组进行切片时,不能用a,要用整个数组里的所有元素进行切片(数组下标从0开始)
[root@mysql-binary shell_test]# echo ${a:1:3}
x
[root@mysql-binary shell_test]# echo ${a[*]:1:3}
yy zz ff
#查看数组的长度
[root@mysql-binary shell_test]# echo ${#a[*]}
4
[root@mysql-binary shell_test]# echo ${#a[@]}
4
#修改数组元素的值
[root@mysql-binary shell_test]# a[3]="hh"
[root@mysql-binary shell_test]# echo ${a[*]}
xx yy zz hh
#删除数组下标为3的元素
[root@mysql-binary shell_test]# unset a[3]
[root@mysql-binary shell_test]# echo ${a[*]}
xx yy zz
#删除数组下标为1的元素
[root@mysql-binary shell_test]# unset a[1]
[root@mysql-binary shell_test]# echo ${a[*]}
xx zz
#查看下标
[root@mysql-binary shell_test]# echo ${!a[*]}
0 2
#删除下标为2的元素
[root@mysql-binary shell_test]# unset a[2]
[root@mysql-binary shell_test]# echo ${a[*]}
xx
shell中多行注释:
方法一:
<< EOF
Cmd line 1
Cmd line 2
Cmd line 3
Cmd line 4
EOF
方法二:
: << EOF
Cmd line 1
Cmd line 2
Cmd line 3
Cmd line 4
EOF
(单行注释用“#”即可)
文件测试符:
-a:如果 FILE 存在则为真
-b:检测文件是否是块设备文件,如果是,则返回 true。
-c:检测文件是否是字符设备文件,如果是,则返回 true。
-d:检测文件是否是目录,如果是,则返回 true。
-f:检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-g:检测文件是否设置了 SGID 位,如果是,则返回 true。
-k:检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p:检测文件是否是有名管道,如果是,则返回 true。
-u:检测文件是否设置了 SUID 位,如果是,则返回 true。
-r:检测文件是否可读,如果是,则返回 true。
-w:检测文件是否可写,如果是,则返回 true。
-x:检测文件是否可执行,如果是,则返回 true。
-s:检测文件是否为空(文件大小是否大于0),不为空返回 true。
-e:检测文件(包括目录)是否存在,如果是,则返回 true。
-S:判断某文件是否 socket。
-L:检测文件是否存在并且是一个符号链接。
#!/bin/bash
file="/var/www/runoob/test.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
if [ -w $file ]
then
echo "文件可写"
else
echo "文件不可写"
fi
if [ -x $file ]
then
echo "文件可执行"
else
echo "文件不可执行"
fi
if [ -f $file ]
then
echo "文件为普通文件"
else
echo "文件为特殊文件"
fi
if [ -d $file ]
then
echo "文件是个目录"
else
echo "文件不是个目录"
fi
if [ -s $file ]
then
echo "文件不为空"
else
echo "文件为空"
fi
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi
shell函数定义的格式:
[ function ] functionName [()]
{
action;
[ return int ]
}
格式说明:
可以带function关键字进行函数定义,也可以不带
函数返回值:可用return显式返回,并且返回的值为0-255之间;也可以不加return默认返回最后一条命令的运行结果。
#!/bin/bash
function fun()
{
echo "I Love You! $1 $2"
echo "一共有$#个参数传入"
}
Name="浙江"
Name1="杭州"
fun ${Name} ${Name1}
函数说明:
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
10 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 10 不能获取第十个参数,获取第十个参数需要10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。
特殊字符(用在函数体内):
$# : 传递到脚本的参数个数
$* : 以一个单字符串显示所有向脚本传递的参数
$$ : 脚本运行的当前进程ID号
$! : 后台运行的最后一个进程的ID号
$@与$* :相同,但是使用时加引号,并在引号中返回每个参数。
$- : 显示Shell使用的当前选项,与set命令功能相同。
$? : 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$0 : 脚本文件名称
(注意 $*和$@的区别:
相同点:都是引用所有的参数
不同点:$*表示所有参数为一个整体字符串,而$@则将每一个参数都分别表示为一个字符串)
在Linux系统中0 1 2是一个文件描述符:
标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示。
整理成表格如下:
名称 代码 Linux 下文件描述符(Debian 为例)
标准输入(stdin) 0 /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout) 1 /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
标准错误输出(stderr) 2 /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0
其中0表示键盘输入 1表示屏幕输出 2表示错误输出。
2>&1的含义:将标准错误输出重定向到标准输出。
注意:符号'>&'是一个整体,不可分开,分开后就不是上述含义了。
1)cat test 2>&1 >file :
错误输出到终端,标准输出被重定向到文件file。
2)cat test >file 2>&1 :
标准输出被重定向到文件file,然后错误输出也重定向到和标准输出一样,所以也错误输出到文件file。
3) command >out.file 2>&1 &
command >out.file 是将command的输出重定向到out.file文件,输出内容不打印到屏幕上,而是输出到out.file文件中。
2>&1 是将标准出错重定向到标准输出,因为标准输出已经重定向到了out.file文件,所以标准出错也输出到out.file文件中。
最后一个&, 是让该命令在后台执行。
通俗的说,就是把所有标准输出和标准出错都输出到out.file文件。
每次都写">log 2>&1"太麻烦,能简写吗?
有以下两种简写方式:
&>log
>&log
rpm命令是Linux系统中的软件包管理工具,用于安装、升级、查询和删除软件包。它可以管理RPM(Red Hat Package Manager)格式的软件包,这是一种常见的Linux软件包格式。
rpm命令的作用包括:
安装软件包:使用rpm命令可以安装一个或多个软件包到系统中。安装软件包时,rpm会自动解决依赖关系,确保所需的依赖软件包也被安装。
升级软件包:如果系统中已经安装了一个软件包,可以使用rpm命令来升级该软件包。升级软件包时,rpm会自动检测系统中已安装的版本,并下载并安装新版本。
查询软件包信息:可以使用rpm命令查询系统中已安装的软件包信息,包括软件包的名称、版本、大小、依赖关系等。这对于了解系统中已安装的软件包非常有用。
删除软件包:如果不再需要某个软件包,可以使用rpm命令将其从系统中删除。删除软件包时,rpm会自动解决依赖关系,确保不再需要的依赖软件包也被删除。
总的来说,rpm命令是Linux系统中非常重要的软件包管理工具,能够方便地管理系统中的软件包,包括安装、升级、查询和删除等操作。它提供了一种简单而有效的方式来管理系统中的软件包,使得系统管理人员能够更好地控制和维护系统。
语法格式
rpm [options] [package_name]
参数说明
-i:安装软件包。
-U:升级已安装的软件包。
-e:删除已安装的软件包。
-q:查询软件包信息。
-V:验证已安装软件包的完整性。
-l:列出软件包中的文件列表。
-R:查询软件包的依赖关系。
-v:显示详细的安装或升级过程。
-h:显示进度条。
ps简介:
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps
(1) ps :是显示瞬间进程的状态,并不动态连续;
(2) top:如果想对进程运行时间监控,应该用 top 命令;
ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。
命令行格式:
名称:ps
使用权限:所有使用者
使用方式:ps [options] [--help]
说明:显示瞬间行程 (process) 的动态
参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
ps命令常用用法:
(方便查看系统进程)
1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有进程。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。
13)ps x 显示所有程序,不以终端机来区分。
最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。
sed命令详解
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed [options] '{command}[flags]' [filename]
# 中括号内容必有 大括号内容可有可无
sed # 执行命令
[options] # 命令选项
{command}[flags] # sed内部选项和参数
[filename] # 文件
命令选项
-e script 将脚本中指定的命令添加到处理输入时执行的命令中, 多条件,一行中要有多个操作
-f script 将文件中指定的命令添加到处理输入时执行的命令中
-n 抑制自动输出
-i 编辑文件内容
-i.bak 修改时同时创建.bak备份文件。
-r 使用扩展的正则表达式
! 取反 (跟在模式条件后与shell有所区别)
sed常用内部命令:
a 在匹配后面添加
i 在匹配前面添加
p 打印
d 删除
s 查找替换
c 更改
y 转换 N D P
flags
数字 表示新文本替换的模式
g: 表示用新文本替换现有文本的全部实例
p: 表示打印原始的内容
w filename: 将替换的结果写入文件
示例:
在匹配行后增加一行:# sed -i '2atest' test.txt
将匹配的内容行进行删除:# sed -i '/test/d' test.txt
删除指定的行:# sed -i '3d' test.txt
删除多行:# sed -i '1,10d' test.txt
删除空行:# sed -i '/^$/d' test.txt
替换文本内容(注意该替换只替换每一行第一个匹配到的内容):# sed -i 's/hello/world/' test.txt
替换全文所有匹配的内容:# sed -i 's/hello/world/g' test.txt
将test.txt中文件每一行的hello替换成world并写到test2.txt文件中:# sed -n 's/hello/world/gpw test2.txt' test.txt
将匹配的内容加上一个括号:# sed -i 's/^ [0-9]/(&)/' test.txt (&表示匹配的内容也可以用\1代替)
打印匹配到的内容的行:# sed -n '/hello/p' test.txt
打印第一行到匹配到hello的行:# sed -n '1,/hello/p' test.txt
将一个test1文件内容插入test2文件中到匹配到hello的行后面:# sed '/hello/r test1.txt' test2.txt
将test1文件中匹配到hello或者world的行的内容写入到test2文件中:# sed '/hello\|world/w test2.txt' test1.txt
Linux alias 命令
Linux alias 命令用于设置指令的别名,用户可利用 alias,自定指令的别名。。
它可以使您以一种更简单和易于记忆的方式执行命令,而不必每次都键入完整的命令。
语法:alias[别名]=[指令名称]
alias ll='ls -alF'
alias lx=ls
alias idc='cd /home/www/share'
示例:比如在主机上安装两个版本的mysql(5.6.31、5.6.35),为了登陆mysql方便一些,可以设置登陆别名:
# alias mysql35='mysql -S /tmp/mysql.sock';
# alias mysql31='mysql -S /mysql31/mysql31.sock'
rsync命令:
从字面意思上,rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。
rsync 命令的基本格式有多种,分别是:
# rsync [OPTION] SRC DEST
# rsync [OPTION] SRC [USER@]HOST:DEST
# rsync [OPTION] [USER@]HOST:SRC DEST
# rsync [OPTION] [USER@]HOST::SRC DEST
# rsync [OPTION] SRC [USER@]HOST::DEST
针对以上 5 种命令格式,rsync 有 5 种不同的工作模式:
第一种用于仅在本地备份数据;
第二种用于将本地数据备份到远程机器上;
第三种用于将远程机器上的数据备份到本地机器上;
第四种和第三种是相对的,同样第五种和第二种是相对的,它们各自之间的区别在于登陆认证时使用的验证方式不同。
另外,以上几种格式中各个参数的含义如下:
SRC:用来表示要备份的目标数据所在的位置(路径);
DEST:用于表示将数据备份到什么位置;
USER@:当做远程同步操作时,需指明系统登录的用户名,如果不显示指定,默认为以 root 身份登录系统并完成同步操作。
rsync 选项及功能:
-a 这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-r、-l、-p、-t、-g、-o、-D 选项。-a 选项后面可以跟一个 --no-OPTION,表示关闭 -r、-l、-p、-t、-g、-o、-D 中的某一个,比如-a --no-l 等同于 -r、-p、-t、-g、-o、-D 选项。
-r 表示以递归模式处理子目录,它主要是针对目录来说的,如果单独传一个文件不需要加 -r 选项,但是传输目录时必须加。
-v 表示打印一些信息,比如文件列表、文件数量等。
-l 表示保留软连接。
-L 表示像对待常规文件一样处理软连接。如果是 SRC 中有软连接文件,则加上该选项后,将会把软连接指向的目标文件复制到 DEST。
-p 表示保持文件权限。
-o 表示保持文件属主信息。
-g 表示保持文件属组信息。
-D 表示保持设备文件信息。
-t 表示保持文件时间信息。
--delete 表示删除 DEST 中 SRC 没有的文件。
--exclude=PATTERN 表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)。
--progress 表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等。
-u 表示把 DEST 中比 SRC 还新的文件排除掉,不会覆盖。
-z 加上该选项,将会在传输过程中压缩。
同步静态主机表文件
# 执行“推”复制同步(centos5 是可解析的远程主机名)
[root@soho ~]# rsync /etc/hosts centos5:/etc/hosts
# 执行“拉”复制同步(soho 是可解析的远程主机名)
[root@centos5 ~]# rsync soho:/etc/hosts /etc/hosts
# rsync -av xk-vm:/home/admi/xk-test /home/admi/xk/
ss命令
ss是Socket Statistics的缩写。ss命令用来显示处于活动状态的套接字信息。它可以显示和netstat类似的内容。
但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
ss [参数]
常用参数:
-n 不解析服务名称,已数字方式显示
-a 显示所有套接字
-l 显示处于监听状态的套接字
-o 显示计时器信息
-e 显示详细的套接字信息
-m 显示套接字的内存使用情况
-p 显示使用套接字的进程
-i 显示内部的TCP信息
-s 显示套接字使用概况
-4 仅显示ipv4的套接字
-6 仅显示ipv6的套接字
-0 显示PACKET套接字
-t 只显示TCP套接字
-u 只显示UDP套接字
-d 只显示DCCP套接字
-w 只显示RAW套接字
-x 只显示 Unix套接字
-D
将原始TCP套接字信息转储到文件
例如:
ss -t -a
ss -ntla
ss -nptl
yum命令:
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记
yum语法:
yum [options] [command] [package ...]
options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等。
command:要进行的操作。
package:安装的包名。
1. 列出所有可更新的软件清单命令:yum check-update
2. 更新所有软件命令:yum update
3. 仅安装指定的软件命令:yum install <package_name>
4. 仅更新指定的软件命令:yum update <package_name>
5. 列出所有可安裝的软件清单命令:yum list
6. 删除软件包命令:yum remove <package_name>
7. 查找软件包命令:yum search <keyword>
8. 清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
AWK命令:
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
选项参数说明:
-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。
-mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。
-W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。
-W lint or --lint
打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。
-W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。
-W version or --version
打印bug报告信息的版本。
示例:
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
# 使用","分割
$ awk -F, '{print $1,$2}' log.txt
awk -v # 设置变量
$ awk -va=1 '{print $1,$1+a}' log.txt
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
# awk -f {awk脚本} {文件名}
$ awk -f cal.awk log.txt
过滤第一列大于2的行
$ awk '$1>2' log.txt #命令
过滤第一列大于2并且第二列等于'Are'的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令
# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
# 输出包含 "re" 的行
$ awk '/re/ ' log.txt
忽略大小写:
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
模式取反:
$ awk '$2 !~ /th/ {print $2,$4}' log.txt
计算文件的大小:
$ ls -l *.txt | awk '{sum+=$5} END {print sum}'
从文件中找出长度大于 80 的行:
$ awk 'length>80' log.txt
打印九九乘法表:
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
tee命令
tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。
存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。
语法:
tee(选项)(参数)
选项:
-a:向文件中重定向时使用追加模式;
-i:忽略中断(interrupt)信号。
参数
文件:指定输出重定向的文件。
在终端打印stdout同时重定向到文件中
# ls | tee out.txt ## 写入一个文件
# free -h | tee mem1.txt mem2.txt mem3.txt ## 写入多个文件
# ip addr add 192.168.198.132/24 dev ens33 ## 解决IP查看不到的问题
# route add default gw 192.168.198.2 ## 解决不能连接外网的问题
补充:
虚拟机:VMwareWorkstationPro
虚拟机/linux物理机连接工具:MobaXterm、Xshell、PuTTY
虚拟机系统:centos7.9
数据库连接工具:navicat
Redis连接工具:RDM
代码编辑工具:VisualStudioCode、NotePad++
远程操作工具:向日葵