Linux重定向與管道

mysql

1 信號管理進程    1 linux

1.1 kill命令    1 sql

1.2 killall命令    1 shell

1.3 pkill    1 數據庫

2 後臺進程管理    1 vim

2.1 jobs    1 bash

2.2 bg命令    1 spa

2.3 fg命令    1 .net

2.4 sleep命令    1 插件

3 標準輸入和輸出    1

3.1 標準輸入和輸出    1

4 輸出重定向    1

4.1 重定向:改變標準輸入、標準輸出的方向的就是重定向    1

4.2 標準輸出重定向(覆蓋)    1

4.3 標準輸出重定向(追加)    1

4.4 錯誤輸出重定向    1

4.5 正確錯誤的都輸出到同一個文件中    1

4.6 正確的錯誤的都輸入到相同的位置    1

4.7 重定向到空/dev/null    1

4.8 腳本中使用重定向    1

4.9 腳本中使用重定向    1

5 輸入重定向    1

5.1 郵件服務    1

5.2 輸入重定向給grep 執行查詢操做    1

5.3 dd生成指定大小的文件    1

5.4 mysql導入表結構    1

5.5 利用重定向創建多行文件    1

5.6 利用重定向創建多行文件    1

6 進程管道技術    1

7 tee管道技術    1

 

  1. 信號管理進程

    使用kill命令發送信號和進程通訊

    定義守護進程的角色

    結束用戶會話和進程

  1. kill命令

    kill命令:kill命令用來刪除執行中的程序或工做。kill可將指定的信息送至程序。預設的信息爲SIGTERM(15),可將指定程序終止。若仍沒法終止該程序,可以使用SIGKILL(9)信息嘗試強制刪除程序。程序或工做的編號可利用ps指令或job指令查看。

    kill:後面接進程PID 殺死進程

[root@oldboy ~]# ps aux | grep vim

root 63112 0.0 1.0 151580 5084 pts/0 S+ 17:46 0:00 vim 123.txt

root 63162 0.0 0.2 112720 968 pts/1 R+ 17:47 0:00 grep --color=auto vim

[root@oldboy ~]# kill 63112

        

        -l:列出所有的信息名稱

        -15:TERM:終止進程

        -9:強制終止

        -1:掛起信號,可讓進程從新配置

  1. killall命令

    killall命令使用進程的名稱來殺死進程,使用此指令能夠殺死一組同名進程

root 63747 0.0 1.0 151580 5080 pts/0 S+ 17:59 0:00 vim 123.txt

root 63781 0.0 1.0 151404 5064 pts/1 S+ 17:59 0:00 vim anaconda-ks.cfg

root 63927 0.0 0.2 112720 972 pts/2 R+ 18:02 0:00 grep --color=auto vim

[root@oldboy ~]# killall vim

  1.     pkill

    pkill命令:能夠按照進程名殺死進程。pkill和killall應用方法差很少,也是直接殺死運行中的程序;若是您想殺掉單個進程,請用kill來殺掉。

        -u:後面接用戶名,踢出登陸用戶,關閉終端

[root@oldboy ~]# w

18:06:53 up 23:01, 3 users, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 10.0.0.1 16:51 3:01 0.05s 0.05s -bash

oldboy pts/1 10.0.0.1 18:06 8.00s 0.00s 0.00s -bash

root pts/2 10.0.0.1 17:59 5.00s 0.02s 0.00s w

[root@oldboy ~]# pkill -u oldboy

        -t:終端名,結束終端全部程序

[root@oldboy ~]# pkill -t pts/1

[oldboy@oldboy ~]$ vim 123.txt

Vim: Caught deadly signal TERM

 

Vim: Finished.

 

 

已終止

[oldboy@oldboy ~]$

        -t -9:強制結束指定程序並關閉終端

[root@oldboy ~]# pkill -t -9 pts/1

  1. 後臺進程管理

  2. jobs

    jobs命令用於顯示Linux中的任務列表及任務狀態,包括後臺運行的任務。該命令能夠顯示任務號及其對應的進程號。

    jobs

        -l:顯示進程號

[root@oldboy ~]# jobs -l

[1]+ 62110 中止 vim 123.txt

        -r:僅顯示運行(running)的任務

        -s:僅顯示睡眠狀態(sleeping)的任務

[root@oldboy ~]# jobs -l

[1]+ 62110 中止 vim 123.txt

[2]- 62259 運行中 sleep 1000 &

[root@oldboy ~]# jobs -r

[2]- 運行中 sleep 1000 &

[root@oldboy ~]# jobs -s

[1]+ 已中止 vim 123.txt

    

  1. bg命令

    bg命令用於將做業放到後臺運行,使前臺能夠執行其餘任務。該命令的運行效果與在指令後面添加符號&的效果是相同的,都是將其放到系統後臺執行。

[root@oldboy ~]# jobs

[1]+ 已中止 sleep 20000

[root@oldboy ~]# bg 1

[1]+ sleep 20000 &

將一個程序放在後臺運行 的另外一種方法

[root@oldboy ~]# sleep 2000 &

[1] 62626

  1. fg命令

    fg命令用於將後臺做業(在後臺運行的或者在後臺掛起的做業)放到前臺終端運行。與bg命令同樣,若後臺任務中只有一個,則使用該命令時,能夠省略任務號

[root@oldboy ~]# jobs

[1]+ 運行中 sleep 20000 &

[root@oldboy ~]# fg 1

sleep 20000

  1. sleep命令

    sleep命令

    時間:指定要暫停時間的長度。

    時間長度,後面可接 s、m、h 或 d,其中 s 爲秒,m 爲 分鐘,h 爲小時,d 爲日數。

暫停5秒鐘

[root@oldboy ~]# sleep 5

[root@oldboy ~]#

 

這是一個在腳本中控制時間的重要命令 例如每隔3面輸出一行hello would!

while true

do

    echo "hello would!"

    sleep 3

done

 

  1. 標準輸入和輸出

  2. 標準輸入和輸出

執行一個shell程序時一般會自動打開三個標準文件

[root@oldboy ~]# vim 123.txt

 

[1]+ 已中止 vim 123.txt

[root@oldboy ~]# jobs -l

[1]+ 64561 中止 vim 123.txt

[root@oldboy ~]# ll /proc/64561/fd

總用量 0

lrwx------ 1 root root 64 8月 22 18:13 0 -> /dev/pts/2

lrwx------ 1 root root 64 8月 22 18:13 1 -> /dev/pts/2

lrwx------ 1 root root 64 8月 22 18:13 2 -> /dev/pts/2

lrwx------ 1 root root 64 8月 22 18:13 4 -> /root/.123.txt.swp

 

[root@oldboy ~]# ll /dev/std*

lrwxrwxrwx 1 root root 15 8月 20 14:49 /dev/stderr -> /proc/self/fd/2

lrwxrwxrwx 1 root root 15 8月 20 14:49 /dev/stdin -> /proc/self/fd/0

lrwxrwxrwx 1 root root 15 8月 20 14:49 /dev/stdout -> /proc/self/fd/1

標準輸入(STDIN,文件描述符爲0):一般對應終端的鍵盤,也可從其餘文件或命令或者文件內容中輸入。

標準輸出(STDOUT,文件描述符爲1):默認輸出到屏幕。

錯誤輸出(STDERR,文件描述符爲2):默認輸出到屏幕。

文件名稱(filename,文件描述符爲3+)

 

進程將從標準輸入文件中獲得輸入數據,將正常輸出數據輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。

進程使用文件描述符(file descriptors)來管理打開的文件

 

  1. 輸出重定向

1.當屏幕輸出的信息很重要,並且咱們須要將他存下來的時候;
2.後臺執行中的程序,不但願他干擾屏幕正常的輸出結果時;
3.系統的執行命令, 例如定時任務的執行結果,但願他能夠存下來時;
4.一些執行命令,咱們已經知道他可能出現錯誤信息, 想將他直接丟棄時;
5.錯誤信息與正確信息須要分別輸出時;

  1. 重定向:改變標準輸入、標準輸出的方向的就是重定向

標準覆蓋輸出重定向
標準追加輸出重定向 >> 
錯誤覆蓋輸出重定向 2> 
錯誤追加輸出重定向 2>> 
輸入重定向 <

 

類型

操做符

用途

標準覆蓋輸出重定向

>

將命令的執行結果輸出到文件中,而不是直接顯示在屏幕上

標準追加輸出重定向

>>

將命令執行的結果追加輸出到指定的文件

標準輸入定向

<

將命令中接受輸入的途徑由默認的鍵盤更改成指定的文件

 

  1. 標準輸出重定向(覆蓋)

標準輸出重定向,先清空,後寫入,若是文件不存在則建立

[root@oldboy ~]# echo hello > 123.txt

  1. 標準輸出重定向(追加)

標準輸出重定向,在源文件基礎上追加新的內容

[root@oldboy ~]# echo word >> 123.txt

  1. 錯誤輸出重定向

正確輸出以及錯誤輸出重定向到指定的文件內

查詢/etc目錄下的以.conf結尾的文件,查詢成功的輸出到1.txt中,失敗的保存到2.txt中

[oldboy@oldboy ~]$ find /etc/ *.conf 1>1.txt 2>2.txt

 

  1. 正確錯誤的都輸出到同一個文件中

查詢/etc目錄下的全部以.conf結尾的文件將成功和失敗的結果都保存到一個文件中

[oldboy@oldboy ~]$ find /etc *.conf &>1.txt

  1. 正確的錯誤的都輸入到相同的位置

重定向到相同的位置

[root@oldboy pubilc]# ls /root /error >ab 2>&1

  1. 重定向到空/dev/null

空設備,即將產生的輸出丟掉

[root@oldboy ~]# ls /root /error >ab 2>/dev/null

[root@oldboy ~]# ls /root /error >ab &>/dev/null

  1. 腳本中使用重定向

[root@oldboy ~]# vim ping.sh

ping -c1 10.0.0.200

if [ $? -eq 0 ];then

echo "10.0.0.200 is up."

else

echo "10.0.0.200 is down."

fi

[root@oldboy ~]# chmod +x ping.sh

[root@oldboy ~]# ./ping.sh

//改進後版

[root@oldboy ~]# vim ping.sh

ping -c1 10.0.0.200 &>/dev/null

if [ $? -eq 0 ];then

echo "10.0.0.200 is up."

else

echo "10.0.0.200 is down."

fi

 

  1. 腳本中使用重定向

[root@oldboy ~]# vim ping2.sh

ping -c1 10.0.0.200 &>/dev/null

if [ $? -eq 0 ];then

echo "10.0.0.200 is up." >>up.txt

else

echo "10.0.0.200 is down." >>down.txt

fi

[root@oldboy ~]# chmod +x ping2.sh

[root@oldboy ~]# ./ping2.sh

 

  1. 輸入重定向

表中輸入:<等價於0<

  1. 郵件服務

安裝sendmail和xmail

[root@oldboy ~]# yum install -y sendmail mailx

已加載插件:fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.aliyun.com

* extras: mirrors.aliyun.com

* updates: mirrors.aliyun.com

base | 3.6 kB 00:00:00

extras | 3.4 kB 00:00:00

updates | 3.4 kB 00:00:00

修改主機解析:在hosts文件中加入本機的主機名和ip地址

[root@oldboy ~]# vim /etc/hosts

10.0.0.100 oldboy

重啓服務

[root@oldboy ~]# systemctl restart sendmail

發郵件 mail 郵箱地址 ; subject:主題 ; 郵件內容 ; .號結束郵件;

[root@oldboy ~]# mail 228361008@qq.com

Subject: 123

12345

123345

.

EOT

檢測是否收到郵件

[root@oldboy ~]# su - oldboy

[oldboy@oldboy ~]$ mail

Heirloom Mail version 12.5 7/5/10. Type ? for help.

"/var/spool/mail/oldboy": 2 messages

> 1 root Wed Aug 22 11:25 21/651 "asd"

發郵件時將指定文件內容發送

[root@oldboy ~]# mail -s "test" oldboy < /etc/hosts

  1. 輸入重定向給grep 執行查詢操做

[root@oldboy ~]# grep 'root' < /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

  1. dd生成指定大小的文件

if=/dev/zero if是源

of=file.txt 是目標

bs 是單個大小

count是文件數量

最後要生成的文件大小等於bs乘以count

[root@oldboy ~]# dd if=/dev/zero of=file.txt bs=5M count=4

記錄了4+0 的讀入

記錄了4+0 的寫出

20971520字節(21 MB)已複製,0.022939 秒,914 MB/秒

[root@oldboy ~]# ll file.txt -h

-rw-r--r-- 1 root root 20M 8月 22 22:03 file.txt

 

  1. mysql導入表結構

安裝mariadb數據庫

[root@oldboy ~]# yum install -y mariadb

已加載插件:fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.aliyun.com

* extras: mirrors.aliyun.com

* updates: mirrors.aliyun.com

表結構導入

[root@oldboy ~]# mysql -uroot -p123 <bbs.sql    

  1. 利用重定向創建多行文件

[root@oldboy ~]# cat >> file.txt

12334

124

2134

 

[root@oldboy ~]# cat file.txt

12334

124

2134

  1. 利用重定向創建多行文件

[root@oldboy ~]# cat > file.txt <<a

> sdf

> sdfg

> df

> a

[root@oldboy ~]# cat file.txt

sdf

sdfg

df

 

  1. 進程管道技術

管道操做符號"|"鏈接兩個命令,將左側的標準輸出,交給右側的標準輸入

格式:cmd1 | cmd2 [...| cmdn]

示例:使用管道和cut截取passwd中的用戶名使用的shell 的數量,排序

[root@oldboy ~]# cut -d":" -f7 /etc/passwd | sort | uniq -c | sort -nr

18 /sbin/nologin

3 /bin/bash

1 /sbin/shutdown

1 /sbin/halt

1 /bin/sync

示例:打印根分區已用空間的百分比(只打印數字)

[root@oldboy ~]# df | grep /$| awk '{print $5}' | awk -F% '{print $1}'

8

  1. tee管道技術

 

找IP地址,而且保存tee

[root@oldboy ~]# ip a | grep "inet "| awk '{print $2}'| tee 1.txt | awk -F\/ '{print $1}'

127.0.0.1

10.0.0.100

[root@oldboy ~]# cat 1.txt

127.0.0.1/8

10.0.0.100/24

 

[root@oldboy ~]# ifconfig | sed -nr 2's#^.*inet (.*) netmask.*$#\1#gp'| tee 2.txt

10.0.0.100

相關文章
相關標籤/搜索