大柚子

这世界不过如此

xargs

  • -a file 从文件中读入作为 stdin
  • -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
  • -p 当每次执行一个argument的时候询问一次用户。
  • -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
  • -t 表示先打印命令,然后再执行。
  • -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
  • -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
  • -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
  • -L num 从标准输入一次读取 num 行送给 command 命令。
  • -l 同 -L。
  • -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
  • -x exit的意思,主要是配合-s使用。。
  • -P 修改最大的进程数,默认是1,为0时候为as many as it can 

docker

循环访问机器当前开放端口:

for i in $(netstat -anopt|grep LIST|awk '{print $4}'); do curl -I -m 3 -o /dev/null -s -w "%{http_code} %{url_effective}\n" $i'/'; done
  • -I 仅测试HTTP头
  • -m 3 最多查询3s
  • -o /dev/null 屏蔽原有输出信息
  • -s silent模式,不输出任何东西
  • -w %{http_code} 控制额外输出,当前为状态码,url

获取所有docker容器保存日志位置

docker ps |awk 'NR>1{print $1}'|xargs -I {} docker inspect --format="{{json .LogPath}}" {}

获取所有docker映射端口关系

docker ps |awk ‘NR>1{print $1}’|xargs -I {} docker inspect –format=”{{json .NetworkSettings.Ports}}” {}

grep匹配两个字符串之间的字符

grep -P的使用。

​ Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of nimplemented features.

-P, –perl-regexp

这意思是,-P 可以让grep使用perl的正则表达式语法,因为perl的正则更加多元化,能实现更加复杂的场景。

最典型的用法是,匹配指定字符串之间的字符。 比如,我们想在一句话(Hello,my name is aming.)中匹配中间的一段字符串(my name is) 可以这样写正则表达式。

<strong>[</strong>root@allen1 ~]# echo "Hello, my name is aming."|grep -P '(?&lt;=Hello, ).*(?= aming.)'
Hello, my name is aming.
  • ?<=字符串1:表示只匹配字符串1后面的内容
  • ?= 字符串2:表示只匹配字符串2前面的内容

如果只需要匹配到的部分,还可以加上-o选项

<strong>[</strong>root@allen1 ~]# echo "Hello, my name is aming."|grep -Po '(?&lt;=Hello, ).*(?= aming.)'
my name is

使用xargs实现for循环(输出两列)

正常使用for循环,但只能输出成一列

[root@VM-0-10-centos ~]# for i in $(cat /etc/passwd|awk -F: '{print $1,$NF}');do echo $i;done
root
/bin/bash
bin
/sbin/nologin
daemon
/sbin/nologin
adm
/sbin/nologin
lp
/sbin/nologin
sync
/bin/sync
shutdown
/sbin/shutdown
halt
/sbin/halt
mail
/sbin/nologin
operator
/sbin/nologin
games
/sbin/nologin
ftp
/sbin/nologin
nobody
/sbin/nologin
systemd-network
/sbin/nologin
dbus
/sbin/nologin
polkitd
/sbin/nologin
libstoragemgmt
/sbin/nologin
rpc
/sbin/nologin
ntp
/sbin/nologin
abrt
/sbin/nologin
sshd
/sbin/nologin
postfix
/sbin/nologin
chrony
/sbin/nologin
tcpdump
/sbin/nologin
syslog

使用xargs实现循环输出两列

[root@VM-0-10-centos ~]# cat /etc/passwd |awk -F: '{print $1,$NF}'|xargs -n2 bash -c 'echo $1 $2' cc
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
systemd-network /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
libstoragemgmt /sbin/nologin
rpc /sbin/nologin
ntp /sbin/nologin
abrt /sbin/nologin
sshd /sbin/nologin
postfix /sbin/nologin
chrony /sbin/nologin
tcpdump /sbin/nologin
syslog /bin/false
lighthouse /bin/bash
dockerroot /sbin/nologin

把两列的数据都作为单独变量循环输出

[root@VM-0-10-centos ~]# cat /etc/passwd |awk -F: '{print $1,$NF}'|xargs -n2 bash -c 'for i in $1;do for j in $2;do echo $i $j;done  ;done'  ff
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
systemd-network /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
libstoragemgmt /sbin/nologin
rpc /sbin/nologin
ntp /sbin/nologin
abrt /sbin/nologin
sshd /sbin/nologin
postfix /sbin/nologin
chrony /sbin/nologin
tcpdump /sbin/nologin
syslog /bin/false
lighthouse /bin/bash
dockerroot /sbin/nologin

注:末尾的ff为随机输入,为的是设定$0,及脚本自身,但这里并不需要,以及bash -c后面需要接‘,而不是”,因为”会把$1和$2识别成系统变量

实时监测文件夹内文件变动inotifywait

需要安装inotify

yum install -y inotify-tools
语法格式:inotifywait [-hcmrq][-e][-t][–format][-timefmt][…]

-m: 即“–monitor” 表示始终保持事件监听状态。

-r: 即“–recursive” 表示递归查询目录

-q: 即“–quiet” 表示打印出监控事件

-o: 即“–outfile” 输出事情到一个文件而不是标准输出

-s: 即“–syslog” 输入错误信息到系统日志

-e: 即“–event”, 通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等

-format: 指定输出格式;常用的格式符如:

%w:表示发生事件的目录

%f:表示发生事件的文件

%e:表示发生的事件

%Xe:事件以“X”分隔

%T:使用由-timefmt定义的时间格式

-timefmt:指定时间格式,用于-format选项中的%T格式

实时监控/var/log文件夹文件变动,且设置输出格式

[root@VM-0-10-centos log]# inotifywait -m --timefmt "%Y-%m-%d %H:%M:%S" --format "[%T] : [%e] : %w%f" /var/log
Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。