-exec和|xargs的区别
-exec将前命令输出的结果作为后续命令的参数逐个执行,会启用多个进程
|xargs将前命令输出的结果作为后续命令的整体参数执行,但后续命令必须支持多参数,
比如:rm、mv、tar、du等。默认情况下,xargs只是把\n转换成了空格。
find /apsara/kvm/corefile/ -type f -name "i-*" -delete
find . -type d -name ".svn" | xargs tar -czf benfei.tar.gz
#find /tmp/corefilebak -name "*tar.gz*" -exec ls {} \;
/tmp/corefilebak1表示
第2列表示小时0~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0,7都可表示星期天)
第6列要运行的命令
综合起来就是: 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令
从上面可以看出,crontab最小的时间单位: 1分钟。如果要每30秒执行一次脚本,要么写个小脚本,要么在crontab增加延迟。
方法一: 小脚本实现
#!/bin/bash
while :
do
/var/script/run.sh
sleep 30 # 延迟30秒执行
done
方法二:crontab中增加延迟30秒来实现
[[email protected] ~]# cat log.txt
2018-11-21 09:00:00
2018-11-21 09:00:30
2018-11-21 09:01:00
2018-11-21 09:01:30
[[email protected] ~]# crontab -l
* * * * * /var/script/run.sh >> log.txt
* * * * * sleep 30; /var/script/run.sh >> log.txt
[[email protected] ~]# cat run.sh
#!/bin/bash
date +'%Y-%m-%d %H:%M:%S'
解决定时任务不执行的问题
在crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个脚本时,是在当前shell环境下进行的,程序能找到环境变量;而系统自动执行任务调度时,除了默认的环境,是不会加载任何其他环境变量的。因此就需要在crontab文件中指定任务运行所需的所有环境变量。
读取其他变量文件,脚本开头添加如下代码:
#!/bin/bash
source /etc/profile
source ~/.bash_profile
检测磁盘空间
df |grep -vi mounted |awk '{pct=substr($(NF-1),0,length($(NF-1))-1);if (pct*1>60) exit 1;}'
if [ $? -ne 0 ];then
echo "磁盘空间超过60%.请用df命令检查!"
fi
Linux中进程概述和ps查看进程工具
进程:程序运行的过程
PID为1的进程:centos5、6:init、centos7:systemd
僵尸进程:父进程退出子进程没退出,子进程没有父进程进行管理
无法通过kill杀死子进程只能通过重启来释放僵尸进程
进程属性:
进程ID:唯一的数值,用来区分进程
父进程ID:PPID
进程状态:运行R、休眠S、僵尸Z
查看进程工具
BSD格式显示进程:ps -aux
a:显示跟当前终端关联的所有进程
u:基于用户格式显示,U显示用户ID的所有进程
x:显示所有进程,不以终端区分
标准格式显示进程:ps -ef
e:显示所有进程
f:显示完整格式输出
[[email protected] /root]
#ps aux|head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.1 0.0 193328 8032 ? Ss 2019 10072:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 2019 4:09 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2019 182:21 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 2019 33:18 [migration/0]
root 8 0.0 0.0 0 0 ? S 2019 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 2019 0:00 [rcuob/0]
root 10 0.0 0.0 0 0 ? S 2019 0:00 [rcuob/1]
root 11 0.0 0.0 0 0 ? S 2019 0:00 [rcuob/2]
Ctrl+c:发送SIGINT信号,终止进程
Ctrl+z:发送SIGSTOP信号,挂起进程,将作业放置到后台,暂停
Ctrl+d:不发送信号,表示二进制EOF,代表输入完成或者注销
watch -n1 -d 命令
-n:更新间隔
-d:高亮显示变化
watch -n1 -d free
Every 1.0s: free Mon Dec 7 13:10:49 2020
total used free shared buff/cache available
Mem: 396126200 206600840 3621368 1067992 185903992 179545264
Swap: 0 0 0
netstat - 打印系统开启的端口号、网络连接、路由表、连接的数据统计、伪装连接以及广播域成员。
netstat -nptl | egrep "8190|9190"
tcp 0 0 0.0.0.0:9190 0.0.0.0:* LISTEN 93787/python
端口
计算机的端口范围是从0号端口到65535号端口,可分为3大类:
(1)公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。
(2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
(3)动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。
tar 命令常用参数总结
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -xf all.tar
这条命令是解出all.tar包中所有文件,-x是解开的意思
压缩
tar –cvf jpg.tar *.jpg 将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg rar格式的压缩,需要先下载rar for linux
zip jpg.zip *.jpg zip格式的压缩,需要先下载zip for linux
解压
tar –xvf file.tar 解压 tar包
tar -xzvf file.tar.gz 解压tar.gz
tar -xjvf file.tar.bz2 解压 tar.bz2
tar –xZvf file.tar.Z 解压tar.Z
unrar e file.rar 解压rar
unzip file.zip 解压zip
总结
*.tar、.tar.gz和.tgz 用 tar –xf 解压
*.gz 用 gzip -d或者gunzip 解压
*.bz2 用 bzip2 -d或者用bunzip2 解压
*.tar.bz2用tar –xjf 解压
*.Z 用 uncompress 解压
*.tar.Z 用tar –xZf 解压
*.rar 用 unrare 解压
*.zip 用 unzip 解压
lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具
加端口号,查看端口被谁占用
lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 12211 root 3u IPv6 34817 TCP *:ssh (LISTEN)
sshd 12211 root 4u IPv4 34819 TCP *:ssh (LISTEN)
sshd 30585 root 3r IPv4 2835367518 TCP 306a13103.cloud.a14.am87:ssh->10.33.11.94:45518 (ESTABLISHED)
sshd 36345 root 3r IPv4 2764580602 TCP 306a13103.cloud.a14.am87:ssh->dns-slave-list.tbsite.net:58727 (ESTABLISHED)
sshd 53845 root 3r IPv4 3151849794 TCP 306a13103.cloud.a14.am87:ssh->10.33.11.95:34089 (ESTABLISHED)
netstat -tunlp命令用于显示tcp,udp的端口和进程等相关情况,会显示端口和所对应的程序
netstat -antp|grep -w 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 12211/sshd
tcp 0 0 10.33.1.71:22 10.33.1.65:58727 ESTABLISHED 36345/1
tcp 0 0 10.33.1.71:22 10.33.11.94:45518 ESTABLISHED 30585/sshd: [email protected]
tcp 0 0 10.33.1.71:22 10.33.11.95:34089 ESTABLISHED 53845/sshd: [email protected]
tcp 0 0 :::22 :::* LISTEN 12211/sshd
basename:获取文件名
#basename /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0
dirname:获取文件所在路径
#dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts
命令语法的通用格式:
[[email protected] /root]#
[[email protected] path]# command options arguments
发起一个命令:请求内核将某个二进制程序运行为一个进程
静态程序——>动态进程(有生命周期)
多数系统程序文件存放在:
普通命令:/bin、/usr/bin、/usr/local/bin
管理命令:/sbin、/usr/sbin、/usr/local/sbin
file:查看文件类型
#file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=61c6a7e6c1f7806e50de1f780f60f9d8dde61d50, stripped
history:查看历史命令
history n:查看最后n条命令
!cmid:执行第几个命令
Ctrl +r:根据关键字搜索历史命令
!command,执行最近执行的命令
globbing:文件名匹配
匹配模式:元字符
*:匹配任意长度的任意字符
?:匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符,[a-z]:匹配a-Z,不区分大小写;[0-9]:0-9
[[:upper:]]:大写字母
[[:lower:]]:小写字母
#ll [[:upper:]][0-9]?a
-rw-r--r-- 1 root root 0 Dec 13 11:49 P12a
[^]:匹配指定范围外的任意单个字符
[^[:upper:]]:非大写字母
[^[:lower:]]:非小写字母
[^0-9]:非数字
[^a-z]:非字母
\:转义,表示本来应有的意义;如创建名为"a b"的文件,则touch a\ b,将空格转义为空格而非创建a和b两个文件
IO重定向及管道
程序:指定+数据
程序的数据流有三种: fd:文件描述符
输入数据流:<--标准输入(stdin)0,键盘
输出数据流:-->标准输出(stdout)1,显示器
错误输出流:-->错误输出(stderr)2,显示器
IO重定向:
输出重定向:>,覆盖;>>,追加;&>/dev/null合并输出,正确错误都重定向/dev/null
输入重定向:<
cat <<eof >>或者>fliename
how are you
how old are you
eof
cat >>或>fliename<<eof
how are you
how old are you
eof
管道:连接程序,实现将前一个命令的输出直接定向到后一个程序当做输入数据流
tee:读取标准输入并将标准输出到文件
-a:追加
cat /etc/passwd |tee test.txt
nano编辑界面最下方黑底白字表示快捷键操作,其中 ^ 代表 Ctrl。M 表示 Alt键
常用快捷键:
保存:Ctrl+O
退出:Ctrl+X
粘贴:Ctrl+U
移动:Ctrl + 行号
设置全局变量:/etc/nanorc
#grep ^set /etc/nanorc
set autoindent 自动缩进
set mouse 使用鼠标
set smarthome home键至行首
{ }扩展:
cp file{,_`date +%F`}
touch file{1..10}