linux常用命令與shell指令碼編程__區塊鏈

來源:互聯網
上載者:User
匯入公開金鑰到信任認證
keytool -import -file catserver.cer -keystore "$JAVA_HOME/lib/security/cacerts" -alias catserver


刪除公開金鑰別名
keytool -delete -alias catserver -keystore cacerts -storepass changeit


遠端偵錯代碼
export JVM_OPT="$JVM_OPT -Dosgi.console=33801"
export JVM_OPT="$JVM_OPT -Xdebug -Xrunjdwp:transport=dt_socket,address=****:33802,server=y,suspend=y"


偵錯模式運行jar包
java -Dosgi.console=33801 -Xdebug -Xrunjdwp:transport=dt_socket,address=****:33802,server=y,suspend=y -cp *.jar *** 


sed命令替換檔案內容
sed -i 's?securerandom.source=file:/dev/random?securerandom.source=file:/dev/./urandom?g' ***


重啟sshd服務
/etc/init.d/ssh restart
/etc/init.d/sshd restart


jar 檔案打包
jar  -cvf test.jar com/bbb.class aaa.class 




查看連接埠佔用情況:
netstat -npl | grep ***


尋找檔案
find / -name cacerts 2>/dev/null
尋找java路徑
which java


vim 尋找時忽略大小寫

項的影響,當 "\c" 或 "\C" 起作用時,它們設成什麼值無關緊要。

vim 替換
: %s/source/des/g
%表示操作每一行
g表示替換一行中的每個匹配


設定linux機器硬體時間
hwclock --show 顯示時間
hwclock --systohc 將系統時間同步到硬體


ubuntu 安裝和卸載deb包
sudo dpkg -i 軟體包名.deb
sudo apt-get remove 軟體包名


同步時間
用戶端:ntpdate ip
server端:ntp


為機器添加公開金鑰
1.修改/etc/ssh/sshd_config(許可權和公開金鑰路徑)
2.在使用者主目錄下添加 .ssh 檔案夾 許可權600
3.在.ssh檔案夾下添加 authorized_keys 檔案  許可權600






linux曆史命令不可用
vim /etc/profile
設定HISTSIZE=1000


設定連線逾時時間:
vim /etc/profile
設定TMOUT=0


windows下findStr用法(類似linux中的grep)
netstat -na | findstr 12345


輸出重新導向
>>logs/root.log 2>&1  &


查看linux版本資訊
cat /proc/version


eclipse設定main函數參數
右鍵 -> run as -> run configuration




解壓.xz檔案
xz -d linux-3.1-rc4.tar.xz



解壓.tar檔案
tar -xf linux-3.1-rc4.tar



解壓.tar.gz到指定檔案夾
tar -xzf jre-8u144-linux-x64.tar.gz -C /usr/lib/java`


壓縮得到.tar.gz檔案
tar -czf all.tar.gz *.jpg 



註:
解壓檔案的時候,檔案夾是合併作業,檔案是覆蓋操作
得到壓縮檔的時候,是完全的覆蓋操作
cp命令也一樣,檔案夾是合併作業,檔案是覆蓋操作




shell指令碼編程-算術運算
val=`expr 2 + 2`




輸出重新導向
>>logs/root.log 2>&1 &
echo 輸出丟失分行符號
要保留分行符號,使用如下命令 注意雙引號一定不能少
echo "${foo}"




重啟機器:
reboot




退出指令碼運行
exit 0




if else語句用法:
if [ "$yesResult" != "" ];then
break
elif [ "$noResult" != "" ];then
echo "1"
elif [ "$unknownResult" != "" ];then
echo "2"
echo "${unknownResult}"
exit 0
else
echo "4"
echo "${out}"
exit 0
fi


while語句用法:
while "true"
do
........
done




for語句用法 + 按名字尋找進程並關閉所有進程:
processCount=0
for processId in `ps -ef | grep xxx |grep java | awk '{print $2}'`
do
processCount=`expr $processCount + 1`
out=`kill $processId`
done


for遞增迴圈
for((i=0;i<10;i++))
do
        echo "$i"
        sleep 0.1
done




shell命令列按刪除鍵無效
stty erase '^H'




檢查並安裝java環境
#install jre environment
echo -e "\nchecking java environment..."
string=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $2 }'`
version=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $3 }'`
if [ $string == version ] ; then
echo -e "java exist! version--$version\n"
else
echo "java environment not found,installing....."
#make a floder and discard stderr output 
out=`mkdir /usr/lib/java 2>/dev/null`
#unzip the file 
out=`tar -zxf jre-8u144-linux-x64.tar.gz -C /usr/lib/java`


out=`update-alternatives --install /usr/bin/java java /usr/lib/java/jre1.8.0_144/bin/java 300 2>/dev/null 1>/dev/null`
echo -e "install java succeed!\n" 
fi


得到連結檔案指向的位置
readlink -f


awk設定分隔字元
awk -F '/bin/java' '{print $1}'




在指令碼中調用其他指令碼時輸入直接在後面跟參數即可傳進行
被調用的指令碼直接$1 $2 使用即可 超過10 用${10}(從1開始,沒有$0)




指令碼睡眠:
sleep 5(單位是秒,可以有小數點,比如說0.1)


xftp顯示隱藏檔案夾
開啟:工具--》選項--》常規 裡面有一個“顯示隱藏的檔案”的選項,勾上即可。


linux顯示隱藏檔案夾
ctrl + h


遞迴修改使用者和使用者組
chown -R ossuser:ossgroup ./


vim 修改檔案格式:
:set ff=unix


shell grep 使用的是Regex
如grep ".*aaa" 表示以a結束的字元


每隔1s迴圈向檔案中輸入內容 大於100自動停止
count=1
while "true"
do
count=`expr $count + 1`
echo "$count" >> test____^_^____.txt
sleep 1
done




設定xftp預設覆蓋
工具->選項->傳輸->進階選項->覆蓋檔案 將上傳下載都改為overwrite



nohup ./test.sh & 解決問題 不管原來的進程(指令碼,或是java程式,或是其他)是否還在執行,指令碼都會繼續執行
如果不用(nohup ./test.sh &)這種寫法,如果之前的進程正常執行結束,進程開啟的指令碼可以正常執行,但是如果進程是kill掉的,那麼啟動的指令碼也會被結束
比如說用了process.waitFor();等待結束的進程被kill掉了。


在java代碼中調用UP指令碼去執行另一個ST指令碼的時候
ST 中有echo -e這種文法的時候 後面的列印日誌的語句無法正常輸出到log檔案
在UP.sh中沒有用out=`./ST.sh `這種寫法的時候 ST.sh一直無法執行成功,不知道原因


ubuntu設定軟體開機自動運行jar包


有兩個rc.local檔案。/etc/init.d/rc.local檔案會在系統啟動的時候調用/etc/rc.local檔案。一般將啟動內容放在/etc/rc.local檔案中


指令碼rc.local中執行其他目錄中的指令檔時並不知道目錄相關資訊,但是指令碼執行的時候可能需要使用相對路徑。可以這樣操作,以調用/home/copbint/Test/start.sh為例:


sed -i '/sleep 10 && /d' /etc/rc.local
hasExit=`cat /etc/rc.local | grep "^exit 0$"`
if [ "$hasExit" = "" ];then
  echo "sleep 10 && /bin/bash /home/copbint/Test/start.sh" >> /etc/rc.local
else
  sed -i '\#^exit 0$#i sleep 10 && /bin/bash /home/copbint/Test/start.sh' /etc/rc.local
fi
以行為單位進行解釋:
1.執行前先刪除,防止此命令多次重複執行的時候重複添加
2.確認指令碼中是否有^exit 0$,^表示行起始符,$表示行結束符,過濾掉注釋中的exit 0。
4.如果指令碼中沒有^exit 0$。直接在指令碼追加內容即可。
6.如果指令碼中有^exit 0$。在此行前面插入一行。這是sed命令的用法。不熟悉的可以參考: linux sed命令用法舉例




另,注意下面這兩種錯誤的寫法:|
#i 後面不能跟#,會當成一般字元一起輸入:
sed -i '\#^exit 0$#i#sleep 10 && /bin/bash /home/copbint/Test/start.sh' /etc/rc.local
命令最後面也不能跟#,會當成一般字元一起輸入:
sed -i '\#^exit 0$#i sleep 10 && /bin/bash /home/copbint/Test/start.sh#' /etc/rc.local



使用expect自動進行遠程登陸並執行命令(需要先執行 sudo  apt-get install 命令進行安裝


#!/usr/bin/expect
set timeout 5
#set username [lindex $argv 0]  //儲存指令碼參數到變數中  
#set password [lindex $argv 1]    
#set hostname [lindex $argv 2]
spawn ssh xxxx@127.0.0.1
expect {
   "(yes/no)?"
   {
       send "yes\n"
       expect "password:"
       send "xxxxx\n"
    }


   "password:"
   {
         send "xxxxx\n"
   }
}


expect "~"
#sleep 0.5
send "cd /home/xxxx/Test\n"
expect "~"
#sleep 0.5
send "echo `date` >> haha.txt\n"


interact

遇到一個大坑就是,最外層的expect的大括弧我換行了,導致一直不能自動輸入密碼。一直找不到原因,最後對照著別人的指令碼試著修改才找到此處不對,不知道這背後有什麼規則。但是裡層的expect 又可以換行。
一點心得:
其實expect的工作原理就是監測伺服器發送回來的報文,或者說發給shell的內容,雖然不知道具體在哪個層次做的捕獲。螢幕上的提示資訊,比如“xxx@ubuntu:~/Test$”,都是從伺服器端返回的。所以說,如果expect捕獲到期望的內容,就知道可以繼續用send命令發送下一個命令讓伺服器執行了。
所以說還有一種暴力的方法,直接每條要send的命令後面進行一定時間的睡眠,而不用expect,一般來說,伺服器都能夠正常將命令執行完。當然,暴力而不夠優雅,而且可能不能保證準確。
interact的作用是將互動許可權交給使用者進行操作。如果指令碼結尾不加 interact,串連就會被關閉,而關閉串連相比於命令執行的優先順序可能更高,這有可能導致最後的某些命令不被執行,所以說可能在最後一個命令後進行一定時候的睡眠,從而保證所有的命令都被正常執行。



查看檔案或檔案夾大小

du -sh


字串轉ascii碼
printf "%d\n" "'A'"


構造一個ascii碼對照表
echo "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZaccdefghijklmnopqrstuvwxyz">a.txt;od -t d1c a.txt















相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.