目 錄
4.1 重定向:改變標准輸入、標准輸出的方向的就是重定向 1
信號管理進程
使用kill命令發送信號和進程通信
定義守護進程的角色
結束用戶會話和進程
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:掛起信號,可以讓進程重新配置
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
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
后台進程管理
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
bg命令
bg命令用於將作業放到后台運行,使前台可以執行其他任務。該命令的運行效果與在指令后面添加符號&的效果是相同的,都是將其放到系統后台執行。
[root@oldboy ~]# jobs
[1]+ 已停止 sleep 20000
[root@oldboy ~]# bg 1
[1]+ sleep 20000 &
將一個程序放在后台運行 的另一種方法
[root@oldboy ~]# sleep 2000 &
[1] 62626
fg命令
fg命令用於將后台作業(在后台運行的或者在后台掛起的作業)放到前台終端運行。與bg命令一樣,若后台任務中只有一個,則使用該命令時,可以省略任務號
[root@oldboy ~]# jobs
[1]+ 運行中 sleep 20000 &
[root@oldboy ~]# fg 1
sleep 20000
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
標准輸入和輸出
標准輸入和輸出
執行一個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.當屏幕輸出的信息很重要,而且我們需要將他存下來的時候;
2.后台執行中的程序,不希望他干擾屏幕正常的輸出結果時;
3.系統的執行命令, 例如定時任務的執行結果,希望他可以存下來時;
4.一些執行命令,我們已經知道他可能出現錯誤信息, 想將他直接丟棄時;
5.錯誤信息與正確信息需要分別輸出時;
重定向:改變標准輸入、標准輸出的方向的就是重定向
標准覆蓋輸出重定向 >
標准追加輸出重定向 >>
錯誤覆蓋輸出重定向 2>
錯誤追加輸出重定向 2>>
輸入重定向 <
類型 |
操作符 |
用途 |
標准覆蓋輸出重定向 |
> |
將命令的執行結果輸出到文件中,而不是直接顯示在屏幕上 |
標准追加輸出重定向 |
>> |
將命令執行的結果追加輸出到指定的文件 |
標准輸入定向 |
< |
將命令中接受輸入的途徑由默認的鍵盤更改為指定的文件 |
標准輸出重定向(覆蓋)
標准輸出重定向,先清空,后寫入,如果文件不存在則創建
[root@oldboy ~]# echo hello > 123.txt
標准輸出重定向(追加)
標准輸出重定向,在源文件基礎上追加新的內容
[root@oldboy ~]# echo word >> 123.txt
錯誤輸出重定向
正確輸出以及錯誤輸出重定向到指定的文件內
查詢/etc目錄下的以.conf結尾的文件,查詢成功的輸出到1.txt中,失敗的保存到2.txt中
[oldboy@oldboy ~]$ find /etc/ *.conf 1>1.txt 2>2.txt
正確錯誤的都輸出到同一個文件中
查詢/etc目錄下的所有以.conf結尾的文件將成功和失敗的結果都保存到一個文件中
[oldboy@oldboy ~]$ find /etc *.conf &>1.txt
正確的錯誤的都輸入到相同的位置
重定向到相同的位置
[root@oldboy pubilc]# ls /root /error >ab 2>&1
重定向到空/dev/null
空設備,即將產生的輸出丟掉
[root@oldboy ~]# ls /root /error >ab 2>/dev/null
[root@oldboy ~]# ls /root /error >ab &>/dev/null
腳本中使用重定向
[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
腳本中使用重定向
[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
輸入重定向
表中輸入:<等價於0<
郵件服務
安裝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
輸入重定向給grep 執行查詢操作
[root@oldboy ~]# grep 'root' < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
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
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
利用重定向建立多行文件
[root@oldboy ~]# cat >> file.txt
12334
124
2134
[root@oldboy ~]# cat file.txt
12334
124
2134
利用重定向建立多行文件
[root@oldboy ~]# cat > file.txt <<a
> sdf
> sdfg
> df
> a
[root@oldboy ~]# cat file.txt
sdf
sdfg
df
進程管道技術
管道操作符號"|"連接兩個命令,將左側的標准輸出,交給右側的標准輸入
格式: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
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