當前位置:首頁 » 編程軟體 » linux優化腳本

linux優化腳本

發布時間: 2023-02-18 13:11:48

linux運維每天都做什麼工作

Linux運維每天主要負責的工作:
1.每天登陸系統查看系統運行的負荷如何,有無報錯日誌或報警日誌。
2.操作系統故障排除,依據操作系統故障日誌分析出現該報警或報錯的原因,從而解決問題,保證操作系統的高可用性。
3.伺服器狀態確認,伺服器上除了跑著操作系統,必然會安裝一些應用程序或資料庫,運維工程師每天需要查看linux系統上運行著的應用程序或資料庫狀態是否正常。
4.備份,運維工程師的看家本事,資料庫備份和恢復,一般來說只要給資料庫制定了備份策略它會自己備份,你只需要監控備份任務是否執行了就可以。
5.伺服器調優,這個要求就比較高了,linux隨著使用時間的增長,狀態會有所下降,運維工程師有能力的可以對操作系統及資料庫進行性能調優,保證系統處於一個最佳狀態。

㈡ 提高linux腳本cpu和內存使用率

linuxt提供了系統函數sysconf()用來讀取CPU和內存信息,先來了解一下sysconf()函數吧。

頭文件

#include<unistd.h>

函數原型

long sysconf (int name);

說明

sysconf() 返回選項 ( 變數) 的當前值,這個值可配置的但也是受系統限制的。在成功完成的情況下,sysconf() 返回 變數的當前值。該值受到的限制將少於編譯時 <limits.h>, <unistd.h> 或 <time.h> 中可用的對應值。大多數這些 變數的值在調用進程的生存時間內不變。
如果出錯,那麼函數返回 -1 ,並適當地設置 errno 。當沒有錯誤發生時, -1 也是一個合法的返回值。因此,程序要檢查錯誤,應該在調用 sysconf() 之前將 errno 設置為 0 ,然後,如果返回 -1,則檢驗到錯誤。
參數 name 指定我們感興趣的運行時限制的名字,它必須是以值中之一(除非另有說明,否則返回值都是整數):
_SC_2_C_BIND : 一個布爾值,指出是否支持 POSIX C 語言綁定。返回值是 _POSIX2_C_BIND 。
_SC_2_C_DEV : 一個布爾值,指出是否支持 POSIX C 語言開發使用工具選項。返回值是 _POSIX2_C_DEV 。
_SC_2_C_VERSION : 它指出支持哪一個 ISO POSIX.2 標准 (命令) 的版本。返回值是 _POSIX2_C_VERSION 。
_SC_2_CHAR_TERM : 一個布爾值,指出是否至少支持一個 終端。返回值是 _POSIX2_CHAR_TERM 。
_SC_2_FORT_DEV : 一個布爾值,指出是否支持 FORTRAN 開發使用工具選項。返回值是 POSIX2_FORT_DEV 。
注意:1、 CLK_TCK 的值是可變的,因此,不應該假設它是一個 編譯時間 常量。
2、調用 setrlimit 會使 OPEN_MAX 的值發生改變。
3、 通過將 sysconf (_SC_PHYS_PAGES) 和 sysconf (_SC_PAGESIZE) 相乘,來確定 物理內存的總量 (以 位元組為單位) 可以返回一個值,該值超出 32 位進程中 long 或 unsigned long 可表示的最大值。同樣適用於通過將 sysconf (_SC_PAGESIZE) 和 sysconf (_SC_AVPHYS_PAGES) 想乘,來確定未使用的 物理內存的總量 (以 位元組為單位)。這個問題有兩個工作區。第 1 個工作區將程序作為 64 位的進程進行編譯 (從而使 long 足夠大到可以容納乘法運算的結果) ,但是,這樣做的缺點是得到的程序只能在 64 位的內核中運行。第 2 個工作區是用來將得到的乘法運算結果存儲在一個 64 位的量中,如 longlong_t (Solaris OS 類型) 或 long long (linux)。它的有點是可以在 32 位和 64 位的內核中正確工作。

㈢ 讓Linux系統保持活力的優化腳本

    筆者從生產系統上和網路資料上總結出幾種優化腳本,腳本從磁碟和內存方面入手,讓Linux系統保持活力。特別是第三種清理緩存釋放內存,可以結合筆者以前的文章-Linux健康檢查腳本health-check-script來做進一步的包裝,特別是在做大量數據備份之後,完成自動檢測和清理工作。

    下面的delete_data函數中的三條命令可以完成目錄下所有文件、log文件和log.gz文件按過期時間清理。

delete_data()

{

    delete_time=$1

    #清理目錄下所有過期文件

    find /home/pi/log/ -mtime +$delete_time -exec rm -r {} \;

    #清理目錄下.log過期文件

    find /home/pi/log/  -mtime +$delete_time -name '*.log' -exec rm -r {} \;

    #清理目錄下.log.gz過期文件

    find /home/pi/log/  -mtime +$delete_time -name '*.log.gz' -exec rm -r {} \;

}

2.1目錄下文件單獨壓縮打包

#將/home/pi/log/目錄下的.log文件打包成.gz文件,

find /home/pi/log/  -name '*.log' -exec gzip -f {} \;

運行測試,默認gzip 會刪除源文件,並生成xx.gz文件。

zcat  filename.gz  可以直接查看文件內容。gunzip –c filename.gz  可以解壓縮並保留源文件,但是解壓後顯示在標准輸出上,沒有解壓後文件。gunzip -cv filename.gz > filename ,可以保留源文件和壓縮後文件,-v是顯示進度。壓縮保留源文件是 gzip  -cv filename > filename.gz 。

2.2目錄下文件以前一起打包壓縮

    gzip無法壓縮文件夾,僅用於壓縮單個文件,要壓縮文件夾,應該使用tar + gzip ,即是tar -z。

#將log目錄下的文件打包並以時間命令,打包後以 gzip 壓縮

tar -zcvf  $(date +%Y%m%d%H%M%S)log.tar.gz log/

tar -ztvf log.tar.gz可以查看包內有哪些文件。

tar -zxvf 20210219143137log.tar.gz         解壓縮到當前目錄

tar  -zxvf  20210219143137log.tar.gz  -C  log2/  將包解壓到log2目錄下。

    頻繁的文件訪問(特別是數據備份後)會導致系統的Cache使用量大增。sysctl命令用於運行時配置內核參數,這些參數位於/proc/sys目錄下。

    這里我們來看一下 buff/cache的作用。

    buffer指Linux內存的 緩沖區緩存 Buffer cache,cache指Linux內存中的 頁面緩存 Page cache。

    Cache(Page cache,頁面緩存): 主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有read/write操作的時候。

    Buffer(Buffer cache,緩沖區緩存): 主要是針對塊設備進行緩存的,比如當我們對一個文件進行寫操作的時候,page cache的內容會被改變,而buffer cache則可以用來將page標記為不同的緩沖區,並記錄是哪一個緩沖區被修改了。這樣,內核在後續執行臟數據的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。

    Linux內核會在內存將要耗盡的時候,觸發內存回收的工作,以便釋放出內存給急需內存的進程使用。怎麼手動清除呢?修改/proc/sys/vm/drop_caches 的值。看看英語說明:

to free pagecache, use echo 1 > /proc/sys/vm/drop_caches;

to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;

to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.

    即3可以釋放所有類型的緩存。

  同時為了防止數據丟失,命令sync 將臟頁的內容寫回硬碟,但可能伴隨著系統磁碟IO飆高。

  運行free -m命令,再運行下面的腳本中的命令,發現 buff/cache減少了21M。

㈣ linuxreboot系統會掉電嗎

linuxreboot系統會掉電的。
1,系統啟動的處理
在系統上電啟動時,會載入/etc/inittab,進行初始化處理,然後執行各個腳本。如S13ntp..類似,分區時將文件系統放在分區1的話,mount時最好read only的方式,否則上下幾次,系統遇到阻塞的情況斷電就很容易損壞該分區。初始化腳本也盡量優化,不要讓系統阻塞。
2,檢測掉電事件
加上一個線程專門用於檢測掉電事件,其他線程通過標志如果知道了掉電事件,也盡快退出。

㈤ linux下運行腳本時出現killed怎麼解決

原因是由於內存溢出導致的:
當linux出現killed進程的時候,意味著整個系統的內存已經不足,如果不殺死進程的話,就會導致系統的崩潰。
解決辦法:
1.增加系統內存,
2.是優化進程,使其佔用內存降低。
3.是可以使用oom_score_adj參數,這個參數會被計算入oom_score,可以避免進程被殺死(不推薦使用)。

㈥ 新手做linux運維需要學哪些知識

1、Linux系統基礎

嚴格的來講,Linux 不算是一個操作系統,只是一個 Linux 系統中的內核,即計算機軟體與硬體通訊之間的平台;Linux的全稱是GNU/Linux,這才算是一個真正意義上的Linux系統。GNU是Richard Stallman組織的一個項目,世界各地的程序員可以變形GNU程序,同時遵循GPL協議,允許任何人任意改動。但是,修改後的程序必須遵循GPL協議。

Linux 是一個多用戶多任務的操作系統,也是一款自由軟體,完全兼容POSIX標准,擁有良好的用戶界面,支持多種處理器架構,移植方便。

為程序分配系統資源,處理計算機內部細節的軟體叫做操作系統或者內核。如果你希望詳細了解操作系統的概念,請查看操作系統教程。

用戶通過Shell與Linux內核交互。Shell是一個命令行解釋工具(是一個軟體),它將用戶輸入的命令轉換為內核能夠理解的語言(命令)。

2、網路服務

服務有很多種,每間公司都會用到不同的,但基礎的服務肯定要掌握,如ftp, DNS,SAMBA, 郵件, 這幾個大概學一下就行。

其實網路服務方面不用太擔心,一般公司的環境都已經搭建好,就算有新伺服器或讓你整改,公司會有相應的文檔讓你參照來弄,不會讓你亂來的,但至少相關的配置一定要學熟,而且肯定是編譯安裝多,那些模塊要熟悉一下他的作用,特別是PHP那些模塊。

這面2點只是基礎,也是必要條件,不能說是工具,下以才是真正的要掌握的工具。

3、shell腳本和另一個腳本語言

shell是運維人員必須具備的,不懂這個連入職都不行,至少也要寫出一些系統管理腳本,最簡單也得寫個監控CPU,內存比率的腳本吧,這是最最最基本了。別以為會寫那些猜數字和計算什麼數的,這些沒什麼作用,只作學習意義,寫系統腳本才是最有意義。

Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的命令並把它送入內核去執行 。

實際上Shell是一個命令解釋器,它解釋由用戶輸入的命令並且把它們送到內核。不僅如此,Shell有自己的編程語言用於對命令的編輯,它允許用戶編寫由shell命令組成的程序。Shell編程語言具有普通編程語言的很多特點,比如它也有循環結構和分支控制結構等,用這種編程語言編寫的Shell程序與其他應用程序具有同樣的效果。

Linux提供了像MicrosoftWindows那樣的可視的命令輸入界面--X Window的圖形用戶界面(GUI)。它提供了很多桌面環境系統,其操作就像Windows一樣,有窗口、圖標和菜單,所有的管理都是通過滑鼠控制。GNOME。

每個Linux系統的用戶可以擁有他自己的用戶界面或Shell,用以滿足他們自己專門的Shell需要。

同Linux本身一樣,Shell也有多種不同的版本。主要有下列版本的Shell:

  • Bourne Shell:是貝爾實驗室開發的。

  • BASH:是GNU的Bourne Again Shell,是GNU操作系統上默認的shell。

  • Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell兼容。

  • C Shell:是SUN公司Shell的BSD版本。

  • Z Shell:The last shell you』ll ever need! Z是最後一個字母,也就是終極Shell。它集成了bash、ksh的重要特性,同時又增加了自己獨有的特性。

  • 而另一個腳本語言是可選的,一般是3P,即python,Perl和PHP,PHP就不需要考慮了,除非你要做開發,我個人建議學Python會比較好,不難實現自動化運維,Perl是文本處理很強大,反正這兩個學一個就行了。

    4、sed和awk工具

    必須要掌握,在掌握這兩個工具同時,還要掌握正則表達式,這個就痛苦了,正則是最難學的表達式,但結合到sed和awk中會很強大,在處理文本內容和過濾WEB內容時十分有用,不過在學shell的同時一般會經常結合用到的,所以學第3點就會順便學第4點。

    5、文本處理命令

    sort , tr , cut, paste, uniq, tee等,必學,也是結合第3點時一並學習的。

    6、資料庫

    首選MySQL,別問我為什麼不學SQL Server和Oracle,因為Linux用得最多絕對是MySQL。增刪改查必學,特別要學熟查,其它方面可能不太需要,因為運維人員使用最多還是查,哪些優化和開發語句不會讓你弄的。

    MySQL是一個關系型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關系型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系資料庫管理系統) 應用軟體。

    MySQL是一種關系資料庫管理系統,關系資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。

    MySQL所使用的 SQL 語言是用於訪問資料庫的最常用標准化語言。MySQL 軟體採用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。

    由於其社區版的性能卓越,搭配 PHP 和 Apache 可組成良好的開發環境。

    7、防火牆

    不學不行,防火牆也算是個難點,說難不難,說易不易,最重要弄懂規則。如果學過CCNA的朋友可能會比較好學,因為iptables也有NAT表,原理是一樣的,而Filter表用得最多,反正不學就肯定不合格。

    8、監控工具

    十分十分重要,我個人建議,最好學這3個,cacti,nagios,zabbix。企業用得最多應該是nagios和zabbix,反正都學吧,但nagios會有點難,因為會涉及到用腳本寫自動監控,那個地方很難。

    Zabbix是一個基於WEB界面的提供分布式系統監視以及網路監視功能的企業級的開源解決方案。

    Zabbix能監視各種網路參數,保證伺服器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。

    Cacti是一套基於PHP,MySQL,SNMP及RRDTool開發的網路流量監測圖形分析工具。

    Cacti是通過 snmpget來獲取數據,使用 RRDtool繪畫圖形,而且你完全可以不需要了解RRDtool復雜的參數。它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、host以及任何一張圖,還可以與LDAP結合進行用戶驗證,同時也能自己增加模板,功能非常強大完善。界面友好。軟體 Cacti 的發展是基於讓 RRDTool 使用者更方便使用該軟體,除了基本的 Snmp 流量跟系統資訊監控外,Cacti 也可外掛 Scripts 及加上 Templates 來作出各式各樣的監控圖。

    9、集群和熱備

    這個很重要,肯定要懂的,但到了公司就不會讓你去弄,因為新手基本不讓你碰。集群工具有很多,最好學是LVS,這是必學,最好也學學nginx集群,反向代理。還有熱備,這個就更多工具能實現了,像我公司是自己開發熱備工具的,MySQL熱備也要學,就是主從復制,這個別告訴我容易,其實不容易的,要學懂整個流程一點也不容易,只照著做根本沒意思。

    10、數據備份

    不學不行,工具有很多,但至少要把RAID的原理弄懂,特別是企業最常用的1+0或0+1,自己做實驗也要弄出來,備份工具有很多,如tar, mp, rsync等,最好多了解一下。

㈦ Linux 下學習哪種腳本語言好

Linux系統下學習shell腳本語言比較好,對於一些常見的系統腳本使用Shell開發會更簡單、更快速,例如:讓軟體一鍵自動化安裝、優化,監控報警腳本,軟體啟動腳本,日誌分析腳本等,雖然PHP/Python語言也能夠做到這些,但是,考慮到掌握難度、開發效率、開發習慣等因素,它們可能就不如Shell腳本語言流行及有優勢了。對於一些常規的業務應用,使用Shell更符合Linux運維簡單、易用、高效的三大基本原則。

㈧ Linux裡面set -e命令作用是什麼

Linux裡面set -e命令作用是,如果一個命令返回一個非0退出狀態值(失敗),就退出.

這個命令-e參數企業應用極少

set的「+」 ,"-" 分別用於關閉或者打開某些特性;具體的特性有很多,這里介紹 -e 特性:

set -e ; 表示後續所有的bash 命令的返回code 如果不是0,那麼腳本立即退出,後續的腳本將不會得到執行的機會;

set +e ; 這個是默認的狀態,表示就算後續的命令如果返回值不是0,那麼腳本依然向下執行;

所以 set -e其實就是從設置的位置起,給腳本的每一條命令加上了同一個退出條件;而set +e 則是取消這種設置;

看下面的例子:

[root@oldboy ~]# cat test.sh

#!/bin/bash

function lookupstr(){

grep "sles" /etc/os-release >/dev/null 2>&1

if [ "$?" -ne 0 ];then

echo -e "Can not find the 'sles' string in file. "

fi

}

echo "Below results based on: set +e"

set +e

lookupstr

echo "Below results based on: set -e"

set -e

lookupstr

[root@oldboy ~]# ./test.sh

Below results based on: set +e

Can not find the 'sles' string in file.

Below results based on: set -e

[root@oldboy ~]#

set -e option 可以幫助優化腳本

㈨ linux 腳本代碼出現問題

[ $count -gt 0 ] 這個[]內部的兩端都需要空格

㈩ 如何學習linux

第一階段:初級入門
初級階段需要把linux運維學習路線搞清楚,任何學習都是循序漸進的,所以學linux運維也是需要有一定的路線。
1、Linux基礎知識、基本命令(起源、組成、常用命令如cp、ls、file、mkdir等常見操作命令)
2、Linux用戶及許可權基礎
3、Linux系統進程管理進階
4、linux高效文本、文件處理命令(vim、grep、sed、awk、find等命令)
5、shell腳本入門(可邊練習邊學習)
第二階段:中級進階
中級進階需要在充分了解linux原理和基礎知識之後,對上層的應用和服務進行深入學習,其中說到服務肯定涉及到網路的相關知識,是需要花時間學習的。
1、TCP/IP網路基礎(差不多CCNA、NP的知識就夠用)
2、Linux企業常用服務(如dns、http、ftp、mail、nfs等)
3、Linux企業級安全原理和防範技巧(系統性能/安全、安全威脅模型和保護方法
4、加密/解密原理及數據安全、系統服務訪問控制及服務安全基礎
5、iptables安全策略構建
6、shell腳本進階(主要是結合一些應用,寫一些案例)
7、MySQL應用原理及管理入門(能管理和搭建一個個人博客站點)
第三階段:高級提升
1、http服務代理緩存加速(其中主要學習varnish、nginx緩存系統,要對CDN的知識有所了解。)
2、企業級負載集群(其中主要學習nginx、haproxy、lvs要對主要知識熟練掌握,對負載均衡演算法有清晰認識)
3、企業級高可用集群 (其中需要對keepalived,heartbeat等進行深入講解)
4、運維監控zabbix詳解(主要是zabbix、cacti、nagios等監控系統,現在用的比較多的是zabbix)
5、運維自動化學習(需要學一些開源運維自動化工具的使用如ansible、puppet、cobbler等運維自動化工具)
第四階段:資深方向進階
1、 大數據方向(需要對hadoop、storm等常見開源大數據系統需要深入了解)
2、 雲計算方向(主要是openstack這套東西,當然像一些kvm等虛擬化技術,也是需要掌握的,現在docker也比較流行)
3、 運維開發(主要是python運維開發)
4、 自動化運維(在之前自動化基礎上做深入)
5、 運維架構師(主要需要廣度,差不多5年左右以上經驗,可以擔當此職位)

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:748
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1010
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:718
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:878
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1124
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:349
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:227
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:911
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:875