L井腳本
ls只顯示前10個文件命令語句:ls -l | head -n 10。
ls 指令是Linux下最常用的指令之一,將每個由 Directory 參數指定的目錄或者每個由 File 參數指定的名稱寫到標准輸出,以及所仔悄要求的和標志一起的其它信息。
(1)L井腳本擴展閱讀
當 ls 命令顯示目錄內容時,它不顯示名稱以 .(點)開頭的文件項,除非使用了 -a 或者 -A 標志。如念茄渣果命令由 root 用戶執行,它預設使用 -A 標志。
通過指定 -C 或 -x 標志以多列列出各項。當向 tty 輸出時,-C 標志是預設格式。如果文件或目錄名太長,ls 命令顯示單列輸出。
通過指定 -m 標志可以以逗號分隔系列列出項。
Ⅱ linux 遠程主機後台運行任務 掛起腳本
背景 :工作需要,需要遠程式控制制主機使其斷開Xshell後也能一直運行。
關鍵字 :& ,nohup,腳本掛起。
在應用Unix/Linux時,我們一般想讓某個程序在後台運行,於是我們將常會用 & 在程序結尾來讓程序自動運行。
鍵入Ctrl + C,發出SIGINT信號,程序會繼續運行
方法一、輸入命令:jobs
方法二:輸入命令:ps
fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令
加在一個命令的最後,可以把這個命令放到後台執行,如
可以將一個正在前台執行的命令放到後台,並且處於暫停狀態。
查看當前有多少在後台運行的命令
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。
將後台中的命令調至前台繼續運行。如果後台中有多個命令,可以用fg %jobnumber(是命令編號,不是進程號)將選中的命令調出。
將一個在後台暫停的命令,變成在後台繼續執行。如果後台中有多個命令,可以用bg %jobnumber將選中的命令調出。
法子1:通過jobs命令查看job號(假設為num),然後執行kill %num
法子2:通過ps命令查看job的進程號(PID,假設為pid),然後執行kill pid
前台進程的終止:Ctrl+c
如果讓程序始終在後台執行,即使關閉當前的終端也執行(之前的&做不到),這時候需要nohup。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。
關閉中斷後,在另一個終端jobs已經無法看到後台跑得程序了,此時利用ps(進程查看命令)
如上所示:
nohup 和 & 組合了後台運行程序。
可以輸出到 out.log保存程序輸出,也可以輸出到/dev/null 即空設備,不保存輸出。
上面三種方式無論在nohup.out 或test.out都看不到數據結果,這是因為python執行有緩存輸出
解決
新的介面接入查看程序
使用&後台運行程序:
結果會輸出到終端
使用Ctrl + C發送SIGINT信號, 程序免疫
關閉session發送SIGHUP信號, 程序關閉
使用nohup運行程序:
結果默認會輸出到nohup.out
使用Ctrl + C發送SIGINT信號, 程序關閉
關閉session發送SIGHUP信號, 程序免疫
平日線上經常使用nohup和&配合來啟動程序:
同時免疫SIGINT和SIGHUP信號
同時,還有一個最佳實踐:
不要將信息輸出到終端標准輸出,標准錯誤輸出,而要用日誌組件將信息記錄到日誌里
nohup和&究竟有啥區別
Ⅲ 手機按鍵精靈編寫了一個腳本,想讓這個腳本在每天8點自動運行。 請問哪位大神給指導一下
先來說一下,你想要的效果其實不是腳本每天8點自動運行,而是腳本一直是運行的,只是每天8點開始做有效的運行工作,其他時間點一直處於「待命狀態」。
如果你認同我上面所說的內容,那麼就繼續往下看吧。
解決這個問題有兩種方法:
第一種:先計算你腳本有效的運行時間,比如1個小時,那麼剩下的「待命狀態」的時間就是23個小時,換句話說就是你的腳本執行完一次以後,要等待23個小時,在按鍵精靈里等待時間的命令就是delay,不過要換算,因為它的單位毫秒,你要把23小時等於多少毫秒算出來,建議用計算器算一下。
這種方法有一個缺點,就是你必須要在8點執行首次操作,它是24小時完成一個運行周期,並不會真的在8點執行,而是每天在某一個固定的時間執行,這個時間點取決於你首次運行的開始時間。
第二種方法:
原理是獲取當前系統時間,然後判斷獲取的時間是不是8點,如果是8點就開始執行有效腳本,如果不是8點,那麼重新獲取系統時間,再次判斷,這個過程重復進行,直到8點為止。
缺點是腳本比較累一直在做判斷,優點是能夠精準判斷。
代碼如下:
Do
Dim t
t = Now()
TracePrint t
Dim r
r = UTF8.Right(t, 13)
TracePrint r
Dim l
l = UTF8.Left(r, 5)
TracePrint l
If l = "08:00" Then
TracePrint "調試成功,用你的腳本替換本行"
Exit Do
Elseif l = "08:01" Then
TracePrint "調試成功,用你的腳本替換本行"
Exit Do
Else
TracePrint "調試失敗"
End If
Delay 60000
Loop
稍微解釋一下,
為了看著方便,變數我沒有合並,
由於7個「星期」的英文所寫長度不一樣,所以導致日期的長度也是不一樣的,那麼在獲取8點的方法上,我選擇了從後往前找的辦法。
在判斷的時候為了防止腳本由於卡頓錯過了8點而無法有效運行,所以追加了一個判斷,就是在8點01分也是可以執行腳本。當然這是在8點沒有開始腳本,如果開始了,就不會在繼續判斷8點01分了。
如果有啥問題可以追問,或者關注我的公眾號:3分鍾學堂。
這個代碼我在自己電腦上做了測試,附上一個我運行的截圖:
Ⅳ linux下shell腳本命令
Shell腳本基本知識
概述:shell其實是內核與用戶之間的一個介面,
shell腳本
如果有一系列經常使用的linux命令,你可以把它們存儲在一個文件腫。shenll可以讀取這個文件,並執行其中的命令。這樣的文件成為腳本文件。
執行shell腳本
要創建一個shell腳本,你要使用任何編輯器比如vi在文本文件中編寫他。
為了使用bash shell賴執行腳本magic,其命令是:bash magic或者./magic
echo命令:
echo 「this is an example of the echo command!」
屏幕上就會回顯「this is an example of the echo command!」
#符號
用於在shell腳本腫可以包含註解入口
echo 「hello」
#this is a comment line. this would not proce any output!
echo 「world!」
第二行是一個註解的例子。它將被shell忽略,而且不產生任何消息
變數:
可以在任何時間通過簡單的賦值來創建。
語法:
<variable name>-<value>
Linux 中的所有變數都被當作字元串
引用變數:
$符號用於引用一個變數的內容
variable1 = ${variable2}
讀入值給變數
在執行shell腳本時,shell還允許用戶直接從鍵盤讀入一個值給變數,還可以使用read命令來作。
$read fname
本地和全局shell變數
局部變數
當引用shell時,只有創建它的shell能夠知道變數的存在
全局變數
稱為子shell
shell中創建的變數局部於創建它的shell,除非使用export命令特別指出是全局的。
環境變數:
通過改變這些變數的值,用戶能夠定製此環境
一些環境變數的例子是HOME,PATH,PS1,PS2,LOGNAME,SHLVL,及SHELL
HOME變數
Linux系統中的每個用戶都有一個相關的稱作HOME的目錄
當一個用戶登錄後,進入相應的HOME的目錄
$ echo $HOME
PATH變數
包含一列用冒號定界的目錄的路徑名字,便於可執行程序的搜索。
PS1變數
PS1(Prompt String 1)變數包含了shell提示符,$符號
$ PS1 = 「HELLO>」
HELLO>
PS2變數
是為第二個提示符設置值的環境變數
LOGNAME變數
包含用戶的注冊名字
$echo 「${LOGNAME}」
SHLVL 變數
該變數包含當前工作的shell level
SHELL變數
環境變數存儲了用戶預設的shell
env命令
可用來查看所有的已移出的環境變數表和它們各自的值!
命令替換
在單個命令行中使用多個命令的另外一種方法(非Pipes)是通過命令替換
echo 「the data is `date`」
expr命令
用於求之算術表達式。該命令的輸出被送到標准輸出
$ expr 4 + 5
將在屏幕上顯示9
算術展開:
你可以在$((…)) 中括一個表達式,用下面的命令來計算它的值;
$((expression))
example1
編寫一個shell腳本用於計算呼叫中心未應答的詢問的數量。該腳本應該接受一天那所報告的詢問的總數和應答的詢問的數量,以便計算未應答的詢問的數量。
所有未應答的詢問總數=所有詢問的總數-應答的詢問的數量
<!--[if !supportLists]-->※ <!--[endif]-->※※※※※※※※※※※※※※※※※※※※※※※
條件執行
test和[]
求值表達式,並返回true(0)或false()
數值測試:
-eq 等於則為真
-ne 不等於則為真
-gt 大於則為真
-ge 大於等於則為真
-lt 小於則為真
-le 小於等於則為真
if構造
Linux shell提供了循環和判定的構造,可以在shell腳本中使用
算術測試
結合if構造,它可以用於測試變數的數字值
串測試
test命令也可以用於字元串
= 等於則為真
!= 不相等則為真
-z 字元串 長度為零則為真
-n 字元串 長度不為零則為真
文件測試
test命令也可以用於檢查文件的狀態
-e 文件存在則為真
-r 文件存在並且可讀則為真
-w 文件存在並且可寫則為真
-x 文件存在並且可執行則為真
-s 文件存在並且至少有一個字元則為真
-d 文件存在並且為目錄則為真
-f 文件存在並且為普通文件則為真
-c 文件存在並且為字元型文件則為真
-b 文件存在並且為塊特殊文件則為真
-a並且 -o或者 !非
exit命令
用於終止shell腳本的執行並返回到$提示符下
case 。。。esac
shell腳本中使用的這個構造依據變數的值而執行一組特定指令
當變數的值和其中的一個值匹配的時候,就執行寫在該值下的一組命令。
example3
迭代
while構造
while <條件>
do
<命令(s)>
done
只有條件為真的時候,才能執行do與done之間的命令
until構造
until循環構造的求值模式於while循環相反
until循環將繼續執行直到求值的條件為真的時候
for構造
for variable_name in <list_of_values>
do
…
done
for循環取一列值作為輸入並對循環中每個值執行循環
break和contineu命令
同其他語言中的用法
example4
控制進程的執行
請求後台處理
用於請求後台進程的符號是 (&)
$ wc tempfile &
[1] 2082
$ vi newfile
檢查後台進程
ps(進程狀態)命令為每個當前的活動的每個進程產生一行入口。
終止後台進程
可用kill,如下所示
kill 278
查看完成一個命令所花的時間
你可以使用time命令來查看一個命令從開始到結束所花的時間
time fine /etc –name 「passwd」 2> /dev/null /dev/null表明忽略錯誤信息。
管道的介紹
垂直條(|)是管道字元
它只是shell:「|」前面命令的輸出作為「|」之後命令的輸入發送
ls –l | more
用管道組合命令,功能強大
Ⅳ linux下通過腳本實現自動重啟程序
自動重啟故障相信大家都遇到過,原因也有很多,跟系統,硬體或者外界因素都有關,但是在Linux中可沒有那麼簡單。這里集中討論linux實現自動重啟程序的方法。下面一起看看!
自動重啟腳本
假定需要實現重啟的程序名為 test ,我們這里通過判斷進程數目來判斷程序是否正常。
ps -ef | grep "$1" | grep -v "grep" | wc –l 是獲取$1(本例中為test)的進程數,腳本根據進程數來決定下一步的操作。通過一個死循環,每隔1秒檢查一次系統中的指定程序的進程數。
代碼如下:
腳本check
#!/bin/sh
#-----------------------------------# 函數: CheckProcess# 功能: 檢查一個進程是否存在# 參數: $1 --- 要檢查的進程名稱# 返回: 如果存在返回0, 否則返回1.#---------------------------------------CheckProcess(){ # 檢查輸入的參數是否有效 if [ "$1" = "" ]; then return 1 fi #$PROCESS_NUM獲取指定進程名的數目,為1返回0,表示正常,不為1返回1,表示有錯誤,需要重新啟動 PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l` if [ $PROCESS_NUM -eq 1 ]; then return 0 else return 1 fi}
# 檢查test實例是否已經存在while [ 1 ] ; do CheckProcess "test" CheckQQ_RET=$? if [ $CheckQQ_RET -eq 1 ]; then# 殺死所有test進程,可換任意你需要執行的操作 killall -9 test exec ./test & fi sleep 1done
腳本start:
加入limit corempsize 102400,設置core file的大小,一旦程序Core Dump,有跡可尋。在該腳本中後台執行check腳本,可以省去很多麻煩,
#!/bin/cshlimit corempsize 102400
./check &
補充:電腦總是自動重啟怎麼辦
1、右擊“我的電腦”,選擇“屬性”項。
2、在打開的系統屬性窗口中選擇“高級系統設置”項進入。
3、在打開的“系統屬性”窗口中,切換至“高級”選擇卡,然後點擊“系統和故障恢復 設置”按鈕。
4、在打開的窗口中取消勾選“自動重啟啟動”項並按確認即可。
5、當電腦在使用的過程中產生藍屏時,我們就可以進入“系統日誌”管理器中查看產生系統失敗的根源啦。打開“運行”對話框,輸入命令“eventvwr.msc”即可查看日誌信息,從中定位系統產生失敗的原因。
6、當然,我們也可以通過禁用某些開機項來嘗試修復系統。打開“運行”對話框,輸入命令“msconfig”進入“系統配置實用程序”界面,勾選“常規”選項卡下的“診斷啟動”選項。
7、還有一種修復計算機藍屏或重啟故障的方法,就是在電腦啟動時按“F8”進入系統故障菜單,從中選擇“安全模式”進入或“最後一次正確的配置”項進入系統,將及有可能修復系統。
8、當然,如果以上方法均不能解決問題,那麼建議您還是重新安裝一下系統,畢竟安裝系統所耗費的時間相對修復所用時間要少許多。一勞永逸之事才是王道。
相關閱讀:電腦自動重啟方法
方法一:
1、打開控制面板-管理工具-計劃任務程序
2、創建基本任務,名稱欄目,輸入“定時重啟”,下一步;
3、在窗口裡,有每天、每周、每月、一次各種選擇,這里小誠選擇一次,這次執行完就失效,您可以根據自己的情況進行選擇哈,點擊下一步;
4、設置重啟的日期、時間點,下一步;
5、選擇啟動程序,下一步;
6、在打開頁面里,點擊瀏覽,找到C;WindowsSystem32Shutdown.exe,點擊打開;
7、在添加參數欄目里輸入“-r”(重啟),進行下一步
8、點擊完成,即可實現自動重啟了
方法二:
Ⅵ linux中運行一個腳本,用戶不需要什麼樣的許可權
linux中運行一個腳本,用戶不需要W許可權。
執行:1。
寫入:2。
讀取:4。
其他許可權分別是
-rw------- (600) -- 只有讀寫許可權。
-rw-r--r-- (644) -- 只有有讀寫許可權;而屬組用戶和其他用戶只有讀許可權。
-rwx------ (700) -- 只有有讀、寫、執行許可權。
-rwxr-xr-x (755) -- 有讀、寫、執行許可權;而屬組用戶和其他用戶只有讀、執行許可權。
-rwx--x--x (711) -- 有讀、寫、執行許可權;而屬組用戶和其他用戶只有執行許可權。
(6)L井腳本擴展閱讀:
sed = filename | sed 'N;s/\n/\t/'
# 對文件中的所有行編號(行號在左,文字右端對齊)。
sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'
# 對文件中的所有行編號,但只顯示非空白行的行號。
sed '/./=' filename | sed '/./N; s/\n/ /'
# 計算行數 (模擬 "wc -l")
Ⅶ 求一個耗盡cup耗盡內存資源的linux腳本,為了學習vmstat監控變化用的
1.無限遞歸調用自身
比如腳本的名字是 exhaustResources.sh,那麼就這樣寫:
#!/bin/sh
echo "unlimited recursive call..."
./exhaustResources.sh #call self
在我的UBUNTU上測試了下效果:CPU立刻跳到90%以上,並且以每秒100MB的速度吞噬內存。
注意:運行這個腳本很可能讓電腦失去響應(因為是以大量讀入數據的方式消耗內存)!測試時,可以按Ctrl+C中止腳本運行。
2.空循環
#!/bin/sh
#echo "unlimited cycle"
while [ 1 ]
do
echo "unlimited cycle"
done
這個腳本只能消耗一個CPU的全部資源。多核CPU的其他核心佔用率不會升高。
Ⅷ 幾個常用的Linux監控腳本
是需要inotify? 還是incrontab