主要内容
1.标准输入输出和错误
2.管道命令和 grep, tr,sort, wc, cut,split,tee,sleep
标准输入输出和错误
标准输入(stdin) 是指令数据的输入,代码为0,使用<或者<<,默认是键盘
标准输出(stdout)是指令执行成功返回的结果,代码为1,使用>或者>>,默认由屏幕显示
标准错误输出(stderr)是指令执行失败返回的错误信息,代码为2,使用2>或者2>>,默认是屏幕
< 指定输入的数据媒介来源
1> 将正确的内容 覆盖输出到指定的媒介
1>> 将正确的内容 追加到指定的媒介
2> 将错误信息覆盖输出到指定媒介
2>> 将错误信息追加输出到指定媒介
默认只能保存正确的
同时分类导出
[admin@localhost110 ~]$ rm -rf success fail result
[admin@localhost110 ~]$ find /root a.txt >success >fail
[admin@localhost110 ~]$ cat success
/root
a.txt
[admin@localhost110 ~]$ cat fail
find: “/root”: 权限不够 正确错误的均导入文件
[admin@localhost110 ~]$ find /root a.txt >result >&
2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到a.txt中,最终结果就是标准输出和错误都被重定向到a.txt中
或者写成 find /root a.txt 1>>a.txt 2>a.txt
先写错误,后写正确的 所以 写正确的时候要用追加
[admin@localhost110 ~]$ cat result
/root
find: “/root”: 权限不够
a.txt [admin@localhost110 ~]$ find /root a.txt >result1 >&
[admin@localhost110 ~]$ find /root a.txt >result
find: “/root”: 权限不够
[admin@localhost110 ~]$ find /root a.txt &>result2
&表示[012]
grep [a-z] -n <a.txt
替换
小写字母替换成大写字母
tr '[a-z]' '[A-Z]'<a.txt >a1.txt
ls -al|tr 'a-z' 'A-Z' 或者 ls -al|tr '[a-z]' '[A-Z]'
管道命令使用
命令通过管道符号|连接
能够接收标准输入(stdin),如tail/more/grep等
能够接收来自于前一个指令的数据成为stdin进行处理 只能处理正确的输出,不能处理错误的输出
ls -8|grep ls
处理不了
grep [-cinv] 'key' filename 支持正则
-c : 计算出现要查找字符的行数(是统计几行含有匹配的字符,并不是出现的次数)
-o :找出所有的要查找字符的匹配,一个1行
-i: 忽略大小写进行查找
-n: 输出行号
-v: 显示没有该字符的行 取反
-s:不显示不存在或无匹配文本的错误信息 忽略错误信息
-r: 递归遍历查找(比如在目录下递归查找文件内容)
-q:静默模式,不输出
[root@localhost110 ~]# cat log -n
php
ajax
java
python
nginx mysql
GO
PHP5 [root@localhost110 ~]# grep 'php' log
php
[root@localhost110 ~]# grep -n 'php' log
:php
[root@localhost110 ~]# grep -ni 'php' log
:php
:PHP5
[root@localhost110 ~]# grep -ci 'php' log [root@localhost110 ~]# grep -inv 'php' log
:ajax
:java
:python
:nginx mysql
:GO
:
[root@localhost110 ~]# grep -n [a-z] log
:php
:ajax
:java
:python
:nginx mysql
[root@localhost110 ~]# grep -nc [a-z] log grep -n --color [a-z] log
统计当前登录用户
[root@localhost110 ~]# w
:: up :, user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/ 192.168.1.101 : .00s .24s .13s w
[root@localhost110 ~]# w|grep -n root
:root pts/ 192.168.1.101 : .00s .11s .00s w
[root@localhost110 ~]# w|grep -nc root 不是root的
[root@localhost110 ~]# w|grep -v root
:: up :, user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
[root@centos1 ~]# cat .txt
php
123php,php456
php
[root@centos1 ~]# grep -o php .txt
php
php
php
php
[root@bogon sh]# echo |grep [-] [root@bogon sh]# echo |grep [-] -q
[root@bogon sh]# echo $? [root@bogon sh]# echo abc|grep [-]
[root@bogon sh]# echo $?
目标字符的后n行
-A2 表示 目标字符的后2行也显示出来 A表示after
-B2 表示 目标字符的前2行也显示出来 B表示before
-C2 上下2行
[root@bogon ~]# grep -A2 -n 'root' p.txt
:root:x:::root:/root:/bin/bash
-bin:x:::bin:/bin:/sbin/nologin
-daemon:x:::daemon:/sbin:/sbin/nologin
--
:operator:x:::operator:/root:/sbin/nologin
-games:x:::games:/usr/games:/sbin/nologin
-ftp:x:::FTP User:/var/ftp:/sbin/nologin
[root@bogon ~]# grep -B2 -n 'root' p.txt
:root:x:::root:/root:/bin/bash
--
-halt:x:::halt:/sbin:/sbin/halt
-mail:x:::mail:/var/spool/mail:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
[root@bogon ~]# grep -C2 -n 'root' p.txt
:root:x:::root:/root:/bin/bash
-bin:x:::bin:/bin:/sbin/nologin
-daemon:x:::daemon:/sbin:/sbin/nologin
--
-halt:x:::halt:/sbin:/sbin/halt
-mail:x:::mail:/var/spool/mail:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
-games:x:::games:/usr/games:/sbin/nologin
-ftp:x:::FTP User:/var/ftp:/sbin/nologin
在目录下遍历查找下面的文件
[root@bogon ~]# grep -r 'php' ./f
./f/t/.txt:php5
./f/t/.txt:4php
./f/t/.txt:js123php
./f/t/.txt:php5
./f/t/.txt:4php
./f/t/.txt:js123php
./f/a.php._mod:php
./f/a.php._mod:php2
./f/a.php._mod:php4
grep中正则符号
* *前 任意数量个字符
. 匹配单个任意字符(字母,数字,下划线,空格)
? ?号之前的字符 0个或者1个 匹配时得 grep -E 或者 egrep
+ +1个或者多个 匹配时得 grep -E 或者 egrep
.* 贪婪匹配任意个数量的任意字符
abc|ef 匹配 abc或者ef
?,+都得egrep 或者grep -E
[root@bogon ~]# cat .txt
root
rt
rut
roooooot
[root@bogon ~]# grep 'ro*t' .txt
root
rt
roooooot 匹配指定个数的
比如匹配含有2个ou的
[root@bogon ~]# cat .txt
rouououoooot
rt
rout
rouout
rouut
[root@bogon ~]# grep 'r\(ou\)\{2\}' .txt
rouououoooot
rouout [root@bogon ~]# cat .txt
rt
rot
root
ro t
[root@bogon ~]# grep 'ro?t' .txt
[root@bogon ~]# grep -E 'ro?t' .txt
rt
rot
[root@bogon ~]# egrep 'ro?t' .txt
rt
rot
[root@bogon ~]# grep 'root|mysql' p.txt
[root@bogon ~]# grep 'root\|mysql' p.txt
root:x:::root:/root:/bin/bash
operator:x:::#operator:/root:/sbin/nologin
mysql:x::::/usr/local/mysql-5.6:/bin/bash
[root@bogon ~]# grep -E 'mysql|root' p.txt
root:x:::root:/root:/bin/bash
operator:x:::#operator:/root:/sbin/nologin
mysql:x::::/usr/local/mysql-5.6:/bin/bash
[root@bogon ~]# egrep -E 'mysql|root' p.txt
root:x:::root:/root:/bin/bash
operator:x:::#operator:/root:/sbin/nologin
mysql:x::::/usr/local/mysql-5.6:/bin/bash
sort指令
sort [-fbknrtu] filename
-f 忽略大小写
-b 忽略最前面的空格
-M 以月份英文字母排序
-n 使用数字排序
-r 逆向排序
-t 分隔符标识 默认是tab
-k 以第几列来排序
[root@localhost110 ~]# ls
ab anaconda-ks.cfg a.php b.php composer.phar install.log install.log.syslog log mysql_listen.sh 公共的 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost110 ~]# ls|sort
ab
anaconda-ks.cfg
a.php
b.php
composer.phar
install.log
install.log.syslog
log
mysql_listen.sh
[root@localhost110 ~]# ls|sort -r
mysql_listen.sh
log
install.log.syslog
install.log
composer.phar
b.php
a.php
anaconda-ks.cfg
ab
[root@localhost110 ~]# ls|sort
ab
anaconda-ks.cfg
a.php
A.php
b.php
B.php
composer.phar
D.php
install.log
install.log.syslog
log
mysql_listen.sh
[root@bogon sh]# cat a.txt [root@bogon sh]# cat a.txt |sort [root@bogon sh]# cat a.txt |sort -n [root@bogon sh]# cat a.txt |sort -nr [root@bogon sh]# cat a.txt |sort -nr|uniq [root@bogon sh]# cat a.txt |sort -nr|uniq -c
默认不区分大小写
按照文件大小写来排序
[root@localhost110 ~]# ls -l|sort -t ' ' -k -n
总用量
-rw-r--r--. root root 10月 :
-rw-r--r--. root root 10月 : B.php
-rw-r--r--. root root 10月 : a.php
-rw-r--r--. root root 10月 : A.php
-rw-r--r--. root root 10月 : log
-rw-r--r--. root root 10月 : ab
-rw-r--r--. root root 10月 : b.php
-rwxrwxrwx. root root 1月 mysql_listen.sh
-rw-r--r--. root root 10月 : D.php
-rw-------. root root 1月 anaconda-ks.cfg
drwxr-xr-x. root root 1月 公共的
drwxr-xr-x. root root 1月 模板
drwxr-xr-x. root root 1月 视频
drwxr-xr-x. root root 1月 图片
drwxr-xr-x. root root 1月 文档
drwxr-xr-x. root root 1月 下载
drwxr-xr-x. root root 1月 音乐
drwxr-xr-x. root root 1月 桌面
-rw-r--r--. root root 1月 install.log.syslog
-rw-r--r--. root root 1月 install.log
-rwxr-xr-x. root root 6月 : composer.phar
设置显示方式
export TIME_STYLE='+%Y-%m-%d %H:%M:%S'
[root@localhost110 ~]# ls -l|sort -k
总用量
-rw-r--r--. root root -- :: install.log.syslog
-rw-r--r--. root root -- :: install.log
-rw-------. root root -- :: anaconda-ks.cfg
drwxr-xr-x. root root -- :: 公共的
drwxr-xr-x. root root -- :: 模板
drwxr-xr-x. root root -- :: 视频
drwxr-xr-x. root root -- :: 图片
drwxr-xr-x. root root -- :: 文档
drwxr-xr-x. root root -- :: 下载
drwxr-xr-x. root root -- :: 音乐
drwxr-xr-x. root root -- :: 桌面
-rwxrwxrwx. root root -- :: mysql_listen.sh
-rwxr-xr-x. root root -- :: composer.phar
-rw-r--r--. root root -- :: log
-rw-r--r--. root root -- :: a.php
-rw-r--r--. root root -- :: b.php
-rw-r--r--. root root -- :: ab
-rw-r--r--. root root -- :: A.php
-rw-r--r--. root root -- ::
-rw-r--r--. root root -- :: B.php
-rw-r--r--. root root -- :: D.php
wc指令
wc [-lwm] filename 统计功能
-l 统计行
-w 统计词
-m 统计字符
[root@localhost110 ~]# wc -l log
log
[root@localhost110 ~]# cat log|wc -l [root@localhost110 ~]# cat log|wc -w [root@localhost110 ~]# cat log -n
php
ajax
java
python
nginx mysql
GO p erlang
PHP5 [root@localhost110 ~]# cat log|wc -m [root@localhost110 ~]# cat log1|wc -m [root@localhost110 ~]# cat log1 -n
p h p
[root@bogon sh]# cat .txt
a
b c
[root@bogon sh]# wc .txt
.txt
2行,3个单词,6个字符
[root@bogon sh]# cat -A .txt
a$
b c$
[root@bogon sh]# wc -l .txt|cut -d ' ' -f1 取出行数
结尾算一个字符
tee与>
[root@bogon sh]# cat .txt
a
b c
[root@bogon sh]# cat .txt|tee .txt
a
b c
[root@bogon sh]# cat .txt>.txt
[root@bogon sh]# cat .txt
a
b c
[root@bogon sh]# cat .txt
a
b c
tee重定向并输出
> 重定向 但影响正常输出了
tee到的内容 也是只有正确的内容写入
文件分割 split
[root@bogon ~]# seq [root@bogon test]# for i in `seq `;do cat /etc/passwd >>.log;done;
[root@bogon test]# du -sh .log
11M .log
[root@bogon test]# wc -l .log
.log
按照大小和按照行分割
1.按照行分割
split -l .log
[root@bogon test]# ls |xargs wc -l
.log
xaa
xab
xac
xad
xae
xaf
xag
xah
xai
xaj
xak
xal
xam
xan
xao
xap
xaq
xar
xas
xat
xau
xav
xaw 自定义命名
split -l .log _
[root@bogon test]# ls
.log _aa _ab _ac _ad _ae _af _ag _ah _ai _aj _ak _al _am _an _ao _ap _aq _ar _as _at _au _av _aw
[root@bogon test]# ls _*|xargs -i mv {} {}.txt
[root@bogon test]# ls
.log _ab.txt _ad.txt _af.txt _ah.txt _aj.txt _al.txt _an.txt _ap.txt _ar.txt _at.txt _av.txt
_aa.txt _ac.txt _ae.txt _ag.txt _ai.txt _ak.txt _am.txt _ao.txt _aq.txt _as.txt _au.txt _aw.txt -i 每个参数当一行
按照大小分割
[root@bogon test]# split -b 1M .log
[root@bogon test]# du -sh *
11M .log
1.0M xaa
1.0M xab
1.0M xac
1.0M xad
1.0M xae
1.0M xaf
1.0M xag
1.0M xah
1.0M xai
1.0M xaj
648K xak
字串截取 cut
cut -d ':' -f 1 ./a
cut -d ':' -f 1,3,4 ./a
cut -d ':' -f 1-3 ./a
cut -c 2-5 ./a
cut -c 1 ./a
cut -c 1,3 ./a
[root@bogon ~]# cat a
a:b:c:d:e:f
a1:b1:c1:d1:e1:f1
a2:b2:c2:d2:d2:f2
a3:b3:c3:d3:e3:f3
[root@bogon ~]# cut -d ':' -f ./a
a
a1
a2
a3
[root@bogon ~]# cut -d ':' -f ,, ./a
a:c:d
a1:c1:d1
a2:c2:d2
a3:c3:d3
[root@bogon ~]# cut -d ':' -f - ./a
a:b:c
a1:b1:c1
a2:b2:c2
a3:b3:c3
[root@bogon ~]# cut -c - ./a
:b:c
:b1
:b2
:b3
[root@bogon ~]# cut -c ./a
a
a
a
a
[root@bogon ~]# cut -c , ./a
ab
a:
a:
a:
杀掉所有php的进程
ps -ef|grep php|grep -v grep|cut -c 9-15|xargs kill -9
sleep
Ctrl+z (休眠到后台执行) Ctrl+c(杀死)
jobs 查看 任务列表
fg 编号 调到前台
调到后台后执行完毕在jobs里还有
fg到前台 执行完 jobs里才没有
fg 不加编号 优先回复 jobs里是+的任务
[root@bogon sh]# sleep
^Z
[]+ 已停止 sleep
[root@bogon sh]# sleep
^Z
[]+ 已停止 sleep
[root@bogon sh]# jobs
[]- 已停止 sleep
[]+ 已停止 sleep
[root@bogon sh]# fg
sleep
单引号,双引号,反引号
[root@bogon sh]# echo $a
modify_suffix.sh.tar.gz
[root@bogon sh]# b="echo $a"
[root@bogon sh]# echo $b
echo modify_suffix.sh.tar.gz
[root@bogon sh]# b=`echo $a`
[root@bogon sh]# echo $b
modify_suffix.sh.tar.gz
.=source 加载配置文件
. /etc/profile
source /etc/profile
还有 join/paste等