天天看点

日常linux命令总结

-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}