Linux

解決Cannot stat() mounted device /dev/root: No such file or directory 錯誤

當我們利用quotacheck -avugm時,出現以下錯誤訊息時:

quotacheck: Cannot stat() mounted device /dev/root: No such file or directory

可以用以下指令檢查一下根目錄所在位置:

df -h

會出現類似下面的訊息:

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda        47G  5.5G   41G  12% /

其中/dev/xvda就是根目錄實際位置,此時只要做個softlink即可

ln -s /dev/xvda /dev/root

接著再重新quotacheck一次,並重新啟用quota就可以了。

 

新增及擴展現有swap(虛擬記憶體)

如果現有的swap不太夠用,可以透過以下步驟快速擴展swap空間

指令如下:

  1. 首先在根目錄建立一個檔名為 swapfile 的 1GB 空檔案
    sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
     
  2. 接下來把這個檔案格式化成swap格式
    sudo mkswap /swapfile
     
  3. 然後啟用這個swap
    swapon /swapfile
     
  4. 檢查記憶體及swap的總容量及使用狀況
    free -m
     
  5. 設定開機自動掛載,編輯/etc/fstab
    vim /etc/fstab
     
  6. 在最後一行加入以下內容
    /swapfile none swap sw 0 0

就這麼簡單!

[Linux] 計算目錄底下的檔案數

要統計某目錄底下的檔案數或目錄數,需要結合兩個指令 - find 及 wc

指令格式

find [obj_directory] [-type f] [-name filename] |wc [-l]

 

find參數說明:

obj_directory:要搜尋的目錄名稱
-type:要搜尋的類型,f=檔案,d=目錄
-name:後面接檔名,可加萬用字元(*),搜尋類似檔名的檔案

 

wc參數說明:

-c: 統計位元組數
-l:統計行數
-m:統計字元數。不能與 -c 一起使用。
-w 統計字數。一個字被定義為由空白、跳格或換行字元分隔的字串。
-L 列印最長行的長度。
-help 顯示説明資訊。

 

統計目前目錄底下所有的檔案總數:

 find ./ -type f -name *.*| wc -l

[Postfix] 將郵件自動密件副本(BCC)到指定郵箱

Postfix 的設定檔(main.cf)中有三個參數,可讓我們設定自動密件副本(BCC)郵件,這三個參數分別是

  1. recipient_bcc_maps
    針對收件者BCC
  2. sender_bcc_maps
    針對寄件者BCC
  3. always_bcc
    不管收發都進行BCC

前兩個參數需要設定「目標Email」及「目的地Email」,參數設定格式範例如下:

  • 使用db檔(需用postmap 編譯名單檔):
    hash:/etc/postfix/rec_bcc_maps
  • 使用regexp文字檔
    regexp:/etc/postfix/sender_bcc_maps

若要使用db檔,格式如下:

Postfix 建置郵件伺服器 ─ main.cf 設定參數說明

本文轉自這裡-2003/03/21 作者李忠憲,因為是很久的文章了,怕不見備份於此。以下僅節錄main.cf的參數設定部分。

postfix 最被人稱道的地方在於設定檔的可讀性很高(當然是跟 sendmail 比),而在主要設定檔 main.cf 中,需要自行定義的東西並不多,而且這些參數就算不去定義,依照預設值也可以運作:

由本機寄出的郵件要使用哪個網域名稱

在 sendmail 中,這個功能稱為網域偽裝,也就是說可以和主機名稱不同,例如:本機名稱為 mail.spps.tp.edu.tw,而寄出的郵件其寄信人欄位則可以使用 spps.tp.edu.tw。(須配合 DNS MX 紀錄使用)

myorigin=spps.tp.edu.tw

不使用簡略名稱時,設定如下:

myorigin=mail.spps.tp.edu.tw

由於主機名稱與網域名稱會被反覆引用在不同設定值,為了簡化設定,通常是定義成變數:

磁碟備份及測試工具 ─ dd指令

本篇參考自鳥哥

dd指令可以用來讀取磁碟的內容,也可以製作指定大小的空檔案,指令範例如下:

dd if="input_file" of="output_file" bs="block_size" count="number"

參數說明:

if表輸入裝置或檔案
of表輸出裝置或檔案
bs表磁區大小,預設512bytes
count表磁區數量

應用1 ─ 備份整個硬碟

dd if=/dev/hdc1 of=/tmp/boot.whole.disk

應用2 ─ 測試磁碟i/o速度

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync

其他應用 ─ 特殊磁碟分割

測試伺服器的網路連線速度 - speedtest-cli

一般我們測試自己電腦的上下載速度時,可能會直接透過瀏覽器連到如speedtest.net之類的網站。但如果伺服器的話,如果只有終端機介面,這個方法可能就不太適合。好在有個用python寫成的好工具 - speedtest-cli。這個工具可以幫助我們讓伺服器連線到speedtest.net並測試上下載速度。安裝步驟如下:(以ubuntu為例)

  1. 安裝 python-pip 套件
    sudo apt-get install python-pip
  2. 利用pip安裝speedtest-cli
    sudo pip install speedtest-cli

如果不想多安裝python-pip,或者上述方法無法執行,就手動來吧

在Linux快速找到檔案的指令

在Linux有幾個找檔案的指令:find, whereis, locate

find跟windows裡面的搜尋功能有點像,是整個目錄逐一去找,所以效能可能會"稍微"慢一點,語法如下:

find -name 檔名

whereis 則是直接尋找已經找過的檔案來找,所以速度很快,不過如果沒有找過的檔案,就會找不到,但事實上用whereis找不到,並不表示檔案不存在,語法如下:

whereis 檔名

locate則是透過索引的方式去找檔案,速度也滿快的,不過新檔案可能會找不到,需要另外透過指令建立索引。語法如下

locate 檔名
#更新索引
sudo updatedb
#如果找不到locate這個指令,先進行安裝
sudo apt-get install locate

利用Cron讓Linux定期執行程序(工作排程)

在Microsoft Windows底下,我們可以透過工作排程來定期執行特定程序。而在Linux,則是透過crontab來進行。

一般來說有下指令編輯設定檔兩個方式可以設定。

下指令設定

語法:crontab [-u username] [-l|-e|-r]
說明:

  1. 這個指令預設只有root可以使用,加上-u 參數以指定特定帳號為該工作的執行者
  2. -e:編輯工作排程
  3. -l:檢視工作排程
  4. -r: 刪除所有工作排程

編輯設定檔

一般crontab的設定檔會位在 /etc/crontab,所以直接編輯這個檔案就行了,ubuntu系統要記得用sudo
指令:vim /etc/crontab

工作排程的設定格式如下:

格式:分(0-59) 時(0-23) 日(1-31) 月(1-12) 週(0-7) 要執行的指令串
說明:

Linux 查詢第一階子目錄所佔硬碟容量大小

很多人都知道要查詢硬碟空間的使用狀況,可以用 df -h 來檢視

也知道要查詢目前所在目錄的大小,可以用 du -sh

而目前所在目錄下所有的檔案,包含子目錄、子子目錄...所佔的大小,則可以用 du -h

不過如果要知道目前目錄底下所有的子目錄,分別佔多少空間,就不知道該怎麼處理了

圖示說明一下:

current_dir
-sub_dir1
-sub_dir2
-sub_dir3

如果任何一個子目錄底下有許多子目錄、孫目錄...的話, du -h 就會全部都顯示出來,得出的資料就沒什麼幫助。這時候就需要一個比較少看到的指令 ─ xargs

這個指令的作用在於把前一個指令的輸出,轉為後面指令的參數

所以查詢所有第一階的子目錄的指令如下:

ls | xargs du -sh

解說:ls先輸出目前目錄下的所有目錄及檔案,再將這些目錄及檔案傳給du 作為參數,就可以取的所有子目錄及檔案的大小了。