1.
scp 文件遷移
Remote Server --> Local file
scp -p port user@remoteserverip:/home/user/filename /home/user/filename
各部分含義:
p 爲端口參數;
port爲具體端口號;
user 爲ssh user;
remoteserverip爲遠程服務器ip或者映射後的域名;
/home/user/filename 爲遠程服務器的文件名;
/home/user/filename 爲本地服務服務器的文件名。
該命令的作用就是將遠程的filename複製到本地對應的目錄下面。
如果報錯:not a regular file,請加上-r參數。
options
-r 遞歸複製
-l user 指定用戶名
-pw 顯示的輸入用戶密碼
Local file --> Remote Server
用法:
scp local_file remote_username@remote_ip(or domain name):remote_folder
使用域名的例子如下:
scp /home/root/davidTmp/output2.csv root@vm008:/root
2.
tail 文件查看
從指定點開始將文件寫到標準輸出。
使用tail命令的-f選項可以方便的查閱正在改變的日誌文件,
tail -f filename會把filename裏最尾部的內容顯示在屏幕上,並且不但刷新,使你看到最新的文件內容。
tail -n 20 test.log //查看倒數20行的信息
tail -n +20 test.log //查看20行以後的信息
tail -f test.log //刷新文件尾部內容
3.
ps aux | grep some_process_name
查看目前運行的所有進程。
1)ps a 顯示現行終端機下的所有程序,包括其他用戶的程序。
2)ps -A 顯示所有程序。
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。
4)ps -e 此參數的效果和指定"A"參數相同。
5)ps e 列出程序時,顯示每個程序所使用的環境變量。
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。
7)ps -H 顯示樹狀結構,表示程序間的相互關係。
8)ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。
9)ps s 採用程序信號的格式顯示程序狀況。
10)ps S 列出程序時,包括已中斷的子程序資料。
11)ps -t 指定終端機編號,並列出屬於該終端機的程序的狀況。
12)ps u 以用戶爲主的格式來顯示程序狀況。
13)ps x 顯示所有程序,不以終端機來區分。
找到進程:
ps aux | grep java
殺死進程:
kill -9 pid
4.
lsof
[轉] http://blog.csdn.net/wyzxg/article/details/4971843 --linux刪除文件後沒有釋放空間
lsof全名list opened files,也就是列舉系統中已經被打開的文件。我們都知道,linux環境中,任何事物都是文件,
設備是文件,目錄是文件,甚至sockets也是文件。所以,用好lsof命令,對日常的linux管理非常有幫助。
5.
chown、chgrp
修改文件或目錄所屬用戶、所屬組
使用chown命令可以修改文件或目錄所屬的用戶:
命令:chown 用戶 目錄或文件名
例如:chown david /home/liuwei (把home目錄下的liuwei目錄的擁有者改爲david用戶)
使用chgrp命令可以修改文件或目錄所屬的組:
命令:chgrp 組 目錄或文件名
例如:chgrp superuser /home/liuwei (把home目錄下的liuwei目錄的所屬組改爲superuser組)
6.
xargs與管道符綜合實例
A) 刪除除指定文件之外的所有其他文件(含文件/目錄)
ls|grep -v cep_compute.tar.gz|xargs rm -rf
B) 殺掉Hello java進程
jps -l|grep HelloExecutor|awk '{print $1}'|xargs kill -9
C) 殺掉運行中的sh腳步
#匹配任意空格: \ *
#匹配任意字符: .*
kill -9 $(ps -ef|grep "sh\ *.*start_new.sh\ *main"|grep -v grep|awk '{print $2}')
7.
-e -f -d ne lt
文件比較運算符
-e filename 如果 filename存在,則爲真 [ -e /var/log/syslog ]
-d filename 如果 filename爲目錄,則爲真 [ -d /tmp/mydir ]
-f filename 如果 filename爲常規文件,則爲真 [ -f /usr/bin/grep ]
-L filename 如果 filename爲符號鏈接,則爲真 [ -L /usr/bin/grep ]
-r filename 如果 filename可讀,則爲真 [ -r /var/log/syslog ]
-w filename 如果 filename可寫,則爲真 [ -w /var/mytmp.txt ]
-x filename 如果 filename可執行,則爲真 [ -L /usr/bin/grep ]
filename1-nt filename2 如果 filename1比 filename2新,則爲真 [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 如果 filename1比 filename2舊,則爲真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比較運算符 (請注意引號的使用,這是防止空格擾亂代碼的好方法)
-z string 如果 string長度爲零,則爲真 [ -z "$myvar" ]
-n string 如果 string長度非零,則爲真 [ -n "$myvar" ]
string1= string2 如果 string1與 string2相同,則爲真 [ "$myvar" = "one two three" ]
string1!= string2 如果 string1與 string2不同,則爲真 [ "$myvar" != "one two three" ]
算術比較運算符
num1-eq num2 等於 [ 3 -eq $mynum ]
num1-ne num2 不等於 [ 3 -ne $mynum ]
num1-lt num2 小於 [ 3 -lt $mynum ]
num1-le num2 小於或等於 [ 3 -le $mynum ]
num1-gt num2 大於 [ 3 -gt $mynum ]
num1-ge num2 大於或等於 [ 3 -ge $mynum ]
8.
獲取隨機數
function rand(){
min=$1
((max=$2-$1))
num=$(date +%s%N)
retnum=$(($num%$max + $min))
echo $retnum
}
9.
隨機獲取文本中一行
process_to_be_kill=`shuf -n1 pid`
kill -9 $process_to_be_kill
10.
刪除文本中指定的一行
sed -i "/${process_to_be_kill}/d" pid
11.
變量賦值
let mod_number=random_number%2
retnum=$(($num%$max + $min))
12.
綜合案例
如果進程數大於某個預設值,則隨機將一個進程殺死,如果小於該值,則啓動java進程
function start_process(){
process_cnt=`cat pid | wc -l`
echo 'process_cnt='$process_cnt
if [ $process_cnt -ge $concurrent_cnt ];then
process_to_be_kill=`shuf -n1 pid`
echo 'process_to_be_kill='$process_to_be_kill
kill -9 $process_to_be_kill
sed -i "/${process_to_be_kill}/d" pid
else
random_number=$(rand 1 100)
echo 'random_number=============='$random_number
let mod_number=random_number%2
echo 'mod_number='$mod_number
if [ $mod_number -eq 1 ];then
echo 'Random number is odd, will start new handler.'
nohup java -Xms70g -Xmx120g -XX:-UseGCOverheadLimit -Dproject.configuration=$dir/app.properties -Dlog4j.configuration=file:$dir/log4j.properties -cp /opt/spark-2.4.0-cdh6.1.0/conf/:/opt/spark-2.4.0-cdh6.1.0/jars/*:/opt/spark-2.4.0-cdh6.1.0/jars/../hive/*:$dir/cep-order-1.0-SNAPSHOT-jar-with-dependencies.jar org.apache.spark.executor.HelloExecutor $dir/meta/data > /dev/null 2>&1 &
echo $! >> pid
else
echo 'Random number is even, will kill one handler randomly'
process_to_be_kill=`shuf -n1 pid`
kill -9 $process_to_be_kill
sed -i "/${process_to_be_kill}/d" pid
fi
fi
}
13.
循環執行某項操作
function main_process(){
while true
do
start_process
random_number=$(rand $run_min $run_max)
echo 'Current time is '$(date '+%Y-%m-%d %H:%M:%S')', System will sleep for '${random_number}' seconds'
sleep $random_number
done
}
14.
在多個文件中查找符合某個特徵的文件
ls lib/* | while read line; do jar -tf $line|grep ${SPECIFIC_FEATURE}; echo $line; done
#查找並判斷文件類型是否爲文件,是則清空:
ls|while read l;do if [ -f $l ];then cat /dev/null > $l;fi done
15.
獲取文件當前路徑
curr_dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
16.
從文件中循環讀取一行文本
while read line; do done; < file
案例:
讀取文件中server中ip地址,批量將jar包上傳上去:
while read IP; do scp -P 22 /home/david/deploy/file_transfer_station/* david@$IP:~ ; done < dw_servers
17.
清空文件
方法1:cat /dev/null > ${FILE_NAME}
方法2:> ${FILE_NAME}
18.
sed替換指定string內容
場景1:替換不帶路徑的字符串
sed -i "s/address:.*/address: $ip/g" ${SPRINGBOOT_APP_PATH}/config/application-peer1.yml (將address: 後的ip替換爲新的ip)
場景2:替換帶路徑的字符串
sed -i "s:/aaa/bbb:${NEW_PATH}:" test.yml
注意:
a)、":"爲新的分隔符,爲非默認的"/";
b)、當替換的字符串爲使用"$"符號的變量時,-i後的參數需整體用 雙引號(" ~ ") 包起來,如果使用單引號(' ~ '),則變量不會被替換。
場景3:爲第n行插入指定String
語法:
sed -i "第幾行i\需要添加的內容" $RawFileName
樣例,在文件f的第一行插入指定的文件內容:
sed -i "1i\\$(cat user_header.txt)" $f
檢查是否插入:
sed -n '1,1p' yourfile
19.
vim s替換指令
:s/helllo/sky/ 替換當前行第一個hello爲sky
:s/helllo/sky/g 替換當前行的所有hello爲sky
:n,$s/hello/sky 替換第n行開始到最後一行的第一個hello爲sky
:n,$s/hello/sky/g 替換第n行開始到最後一行的所有hello爲sky
:%s/hello/sky 替換每一行的第一個hello爲sky
:%s/hello/sky/g 替換每一行的所有hello爲sky
20.
vim 中【將第3~最後一行】的空格(包括空格,\t,^M)替換爲空
:3,$s/[[:space:]]*//g