0、命令連線符
1);
2)&
3)&&
4)|
5)||
1、系統資源監控命令
1)檔案系統檢視命令df


2)統計目錄或檔案大小du
du -sh * | sort -nr

檢視tomcat目錄下佔用空間最大的前6的目錄(du -h |sort -hr|head -n 6 不包括檔案)、檔案(du -ha|sort -hr |head -n 6 包括目錄):


[publisher@shfttppfbdb ~]$ ps -ef|grep sync
publish+ 15990 1 97 Jun30 ? 33-12:38:36 python3.6 -u sync_bmcapp_newversion.py
publish+ 40899 1 99 Jun29 ? 34-16:32:24 python3.6 -u sync_hxapp_newversion.py
publish+ 129897 129351 0 15:16 pts/1 00:00:00 grep --color=auto sync
[publisher@shfttppfbdb ~]$ ps -ef|grep sync |awk $'{print $2}'
15990
40899
129914
[publisher@shfttppfbdb ~]$
app_name="manage"#應用名
app_path="/app/Assistant"#應用位置
pid=''#應用執行的pid
MAX_TIMEOUT=10 #最大等待次數
#重啟方法
functionstop(){
echo"開始停止${app_name}"
pid=`ps aux|grep ${app_name}|grep -v grep|awk '{print $2}'` #獲取jar包執行的pid
echo$pid
if [ -z $pid ] ;then#如果pid的長度為空,說明沒有在執行
echo"${app_name}未執行,直接啟動"
else
echo"${app_name}正在執行中,程序號:"${pid}
kill -15 $pid
fi
#等待60S進行強殺
for((i=0;i<$MAX_TIMEOUT;i++))
do
pid=`ps aux|grep ${app_name}|grep -v grep|awk '{print $2}'`
if [ -z $pid ]; then
break
else
echo"${app_name}停止中..."
fi
sleep 6
done
if [ -z $pid ] ;then
echo"${app_name}已停止"
else
kill -9 $pid
echo"${app_name}已停止"
fi
}
stop
2、編輯命令vi
1)命令列模式 (command mode/一般模式)
如:G跳到文字末尾,gg跳到文字開頭
2)文字輸入模式 (input mode/編輯模式)
如,i,a,o,c等命令
3)末行模式 (last line mode/指令列命令模式)
如:(shift+:鍵,進入此模式)q!強制退出,wq儲存退出等命令。
4)Vim 字串替換
:<range> s/<search_string>/<replace_string>/<modifier>
% – 對整個檔案執行< start _line > < end_line > – 在一組特定的行上面執行操作
g – 全域性替換gc – 在每次更換之前要求確認gn – 忽略替換功能並突出顯示查詢結果。
:%s/python/Python3/g
接下來,我們來試試範圍這一個域。其實,我們在前面的例子裡,已經使用了 % 範圍(對整個檔案範圍)。
如果我們不想在整個檔案範圍進行查詢替換,如果我們只想在某幾個特定行進行這種操作,需要怎麼做?我們可以採用類似於以下命令格式:
:200,250 s/python/Python3/g
執行完以上操作,Vim 會將第 200 行開始並在第 250 行結束的所有 python 替換為 Python3 。
此功能不僅限於一個詞,還可以完成對多個關鍵詞的替換。它的命令格式如下:
:%s/<search_term_1>\|<search_term_2>\|<search_term_3>/<replace_string>/g
比如,讓我們想要將文字中所有 python 和 py 更改為 Python3 。
:%s/python\|py/Python3/g
區分大小寫
本文前面提到的所有替換操作都是區分大小寫的。例如,Python,python ,PYTHON 等都是不同的。如果你要忽略大小寫,可以在搜尋字串後面加上一個 \c ,如下:
/<search_term>\c
:%s/<search_term>\c/<replace_term>/g
3、檔案搜尋命令
1)字串搜尋命令-grep
#
查詢指定字串string
grep 'string' filename
#
若需要在資料夾下所有檔案查詢
grep 'string' dirPath/*
補充:若目錄下含有多級子目錄,則用 grep -r "string" ./
2)檔案搜尋命令find
#
搜尋檔案
find [搜尋範圍] [搜尋條件]
find / -name install.log
#
避免大範圍搜尋,會非常消耗系統資源
#
查詢10天前修改的檔案
find . -mtime +10
#
atime 檔案訪問時間
#
ctime 改變檔案屬性
#
mtime 修改檔案內容
#
查詢檔案大小是25KB的檔案
find . -size 25k
#
查詢i節點是262422的檔案
find . -inum 262422
#
查詢/etc目錄下,大於20KB且小於50KB的檔案
find /etc -size +20KB -a -size -50KB
#
-a and 邏輯與,兩個條件都滿足
#
-o or 邏輯或,兩個條件滿足一個即可
#
查詢/etc目錄下,大於20KB且小於50KB的檔案,並顯示詳細資訊
find /etc -size +20k -a -size -50k -exec ls -lh {}\;
#
-
exec
/-ok命令{}\; 對搜尋結果執行操作
萬用字元:
*匹配任意內容
?匹配任意一個字元
[]匹配任意一箇中括號內的字元
3)命令搜尋命令whereis與which
#
搜尋命令所在路徑及幫助文件所在位置
whereis 命令名
-b:只查詢可執行檔案
-m:只查詢幫助檔案
4)檔案搜尋命令locate
#
在後臺數據庫中按檔名搜尋,搜尋速度更快
locate 檔名
/var/lib/mlocate :locate命令所搜尋的後臺資料庫updatedb:更新資料庫

4、檔案傳輸命令
-
前提條件:
伺服器要開啟寫入許可權;本地和伺服器都要安裝有 scp 包;
-
如何傳輸:利用 scp、rsync、rz傳輸檔案
1) 從伺服器上下載檔案
2)從伺服器上下載目錄
3)上傳本地檔案到目標伺服器
4)上傳本地目錄到目標伺服器
5)rsync從遠端獲取目錄
rsync -azh -ssh --exclude 'l_temp' --exclude 'l_tmp/claimImageList' [email protected]:/t/system_temp /t/system_temp
排除複製l_temp 和l_tmp/claimImageList目錄結構:/t/system_temp/t/system_temp/l_temp/t/system_temp/l_tmp/claimImageList
rsync -az /tpsys/applications/oceanbase_check /tpsys/applications/ --log-file=./rsync_oceanbase_check.log --exclude=
'oceanbase-client-1.1.10.jar'
--delete
rsync -az /tpsys/applications/oceanbase_check [email protected]:/tpsys/applications --log-file=./rsync_oceanbase_check.log --exclude-from /tpsys/applications/conf/sync_exclude.conf --delete
6)使用rz從本地電腦傳輸檔案

7)使用sftp傳輸
sftp username@ip
put [本地檔案的地址] [伺服器上檔案儲存的位置]
get [伺服器上檔案儲存的位置] [本地要儲存的位置]
#
當前本地的目錄就是登陸時的目錄
5、linux文字操作
1)linux三劍客-grep、sed、awk
6、其他常用命令
1)排序命令sort

2)linux下打檔案分割命令split
split -b 1024M bkce_src-5.1.28.tar.gz bkce_
cat bkce_* >bkce_src-5.1.28.tar.gz
md5sum bkce_src-5.1.28.tar.gz
3)掛載命令mount
(1)查詢與自動掛載
#
查詢系統中已經掛載的裝置
mount
#
依據配置檔案/etc/fstab的內容,自動掛載
mount -a
#
檢視192.168.161.128掛載
showmount -e 192.168.161.128
(2)掛載命令格式
mount [-t 檔案系統] [-o 特殊選項] 裝置檔名 掛載點
-t 檔案系統:加入檔案系統型別來指定掛載的型別,可以ext3、ext4、iso9660等檔案系統-o特殊選項:可以指定掛載的額外選項
(3)解除安裝命令
unmount 裝置檔名或掛載點
(4)centos安裝nfs-server
sudo yum
install
nfs-utils
sudo systemctl start rpcbind
sudo systemctl start nfs-server
sudo systemctl start nfs-lock
sudo systemctl start nfs-idmap
sudo systemctl
enable
rpcbind
sudo systemctl
enable
nfs-server
sudo systemctl
enable
nfs-lock
sudo systemctl
enable
nfs-idmap
/etc/exports
新增如下內容(假設您想要共享的目錄是/data,並且允許所有主機訪問)
/nfs/
data
*(
rw
,
sync
,
no_root_squash
,
no_all_squash
)
sudo exportfs -rav
sudo systemctl restart nfs-server
# systemctl daemon-reload重新載入服務資源
sudo firewall-cmd --permanent --zone=
public
--
add
-service=nfs
sudo firewall-cmd --permanent --zone=
public
--
add
-service=mountd
sudo firewall-cmd --permanent --zone=
public
--
add
-service=rpc-bind
sudo firewall-cmd --reload
sudo mount <nfs-server-ip>
:/nfs/data
/nfs/data
# 替換<nfs-server-ip>為NFS伺服器的IP地址,/data是客戶端上用於掛載共享的目錄
192.168
.
44.132:/nfs/data
/nfs/data nfs defaults
00
(5)Ubuntu安裝nfs-server
sudo apt
update
#建立要共享的目錄:
sudo
mkdir
-p /srv/nfs/share
sudo vi /etc/exports
新增以下行到檔案中(將<client_IP>替換為客戶端IP地址或子網):
/srv/nfs/share <client_IP>(rw,
sync
,no_subtree_check)
sudo exportfs -
ra
sudo systemctl
start
nfs
-
kernel
-
server
sudo systemctl
enable
nfs-kernel-server
sudo
apt install nfs-
common
#替換 <nfs_server_ip> 為NFS伺服器的IP地址
sudo mount <nfs_server_ip>
:/srv/nfs/share
/mnt
192.168.44.132:/applications /applications/nfs nfs defaults 0 0
4)expect命令
yum install -y expect
-
expect基礎在使用expect時,基本上都是和以下四個命令打交道:
命令 作用spawn 啟動新的程序expect 從程序接收字串send 用於向程序傳送字串interact 允許使用者互動
#!/usr/bin/expect
# 啟動 ssh 程序,連線到遠端伺服器
spawn ssh [email protected]
# 期望伺服器傳送包含 "password" 的提示
expect
"password:"
# 傳送密碼
send
"mypassword\r"
# 期望看到命令列提示符
expect
"$ "
# 傳送命令
send
"ls -l\r"
# 期望命令執行結果
expect eof
5)openssl加解密
tar -zcf - host.conf | openssl des3 -salt -k ZYProduct@2022 | dd of=host.des dd if=host.des | openssl des3 -d -k "ZYProduct@2022" | tar zxf -
6)eval命令
語法:eval [argument]
7)轉化引數命令xargs
-
引數:-n:指定一次傳遞多少個引數(預設根據空格或者換行拆分,進行一次傳遞)-d:指定拆分的字元-p:顯示要執行的命令,需要確認執行-t:顯示要執行的命令,直接執行-I:指定佔位符,通常為{}-r:如果傳遞引數為空,則不執行
-
操作:多行處理成一行
-
找出含有“password”的txt檔案
#find . -name "*.txt" -exec grep "password" {} \;
#find . -name "*.txt" |xargs grep "password"
-
指定一次傳遞一個引數
# echo "hello world" |xargs -n 1
-
根據“#”進行拆分
# echo "hello#world" |xargs -d "#"
-
佔位符
#echo "hello#world" |xargs -I {} echo {}
#echo |xargs -r echo
8)echo輸出命令
echo [選項] [輸出內容]
選項:-e:支援反斜線控制字元轉換

-
設定顯示顏色
#
\e[1開啟 、\e[0關閉
echo -e "\e[1;33m test \e[0m"
7、linux使用者管理
1)linux使用者型別

2)linux使用者

3)groupadd/useradd
groupadd mysql
useradd -u 544 -d /home/mysql -g mysql -m mysql
4)chown 改變使用者和所屬組命令
chown zhuo:zhuogroup test.php
chown -R zhuo:zhuogroup testfile
7、linux檔案管理
1)linux檔案型別

2)
9、其他常用功能
1)不知道分類,可以解決ssh遠端登入shell問題
ssh -tt [email protected] << EOF
sh $proddomaindir/stopappserver1.sh
sh $proddomaindir/startappserver1.sh
exit
EOF
ssh [email protected] "rm -rf /tsys/applications/nginx/log/*"
2)伺服器上近一分鐘檔案變動監控
if [ -e "/tsys/applications//web" ];then
for i in `find /tsys/applications//web -type f -cmin 1 ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz"`
do
echo `date +%F%t%T`" "$i >>/tsys/applications/showChangeFile.log;
done
fi
3)檔案防篡改監控
original_publish_dir='/tsys/applications//web'
current_publish_dir='/tsys/applications//web'
original_MD5='original_MD5.txt'
current_MD5='current_MD5.txt'
if [ "$1" == "original" ];then
cd /tsys/applications && rm -rf ./$original_MD5
find $original_publish_dir -type f ! -name "*.rdb*" ! -name "*.zip*" ! -name "*.xls*" ! -name "*.rar*" ! -name "*.txt*" ! -name "*.pdf*" ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz" -exec md5sum {} \;| sort >/tsys/applications/$original_MD5
fi
if [ "$1" == "current" ];then
cd /tpsys/applications && rm -rf ./$current_MD5
find $current_publish_dir -type f ! -name "*.rdb*" ! -name "*.zip*" ! -name "*.xls*" ! -name "*.rar*" ! -name "*.txt*" ! -name "*.pdf*" ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz" -exec md5sum {} \;| sort >/tsys/applications/$current_MD5
backcode=`diff -q $original_MD5$current_MD5 | awk '{print $1}'`
fi
if [ "$backcode" != "" -a "$1" == "current" ];then
echo `date +%F%t%T`" " `diff $original_MD5$current_MD5 |awk '{print $3}'|xargs` >/tsys/applications/showDiffFile.log
fi
4)讀取csv檔案,根據條件建立目錄並複製檔案
tr -d '\r' < "pensionmain.csv" > "output.csv"
csv_file="./output.csv"
while IFS=, read -r column1 column2
do
dir_name="$column1"
if [ ! -d "$dir_name" ];then
echo"mkdir $dir_name"
mkdir "$dir_name"
echo"./$dir_name/ $column2"
cp $column2 ./$dir_name/
else
echo"./$dir_name/ $column2"
cp $column2 ./$dir_name/
fi
done < "$csv_file"
10、使用semanage管理SELinux安全策略
1)常用引數
2)檢查semanage是否有安裝
[root@localhost ~]# yum install policycoreutils-python -y
3)Selinux是否開啟
[root@localhost ~]# egrep -i selinux /etc/sysconfig/selinux | egrep -v "#"
SELINUX=enforcing
SELINUXTYPE=targeted
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing
[root@localhost ~]# reboot
4)檢視服務使用埠號
egrep -i listen /etc/httpd/conf/httpd.conf | egrep -v "#"
5)列出所有定義的埠
semanage port -l
6)列出指定的埠型別的埠
semanage port -l | grep -w http_port_t
semanage port -l | grep -w 443
7)建立、新增、刪除埠
#
add
semanage port -a -t http_port_t -p tcp 8081
#
del
semanage port -d -t http_port_t -p tcp 8081