2007/05/15

Linux小筆記



管理常用
vipw:編輯/etc/passwd

adduser (自動建立家目錄及group)
useradd, usermod(modify)
-g:設定主group
-G:設定所屬Group List
-d:設定user的home目錄
-s:設定shell

groupadd

usermod -a -G groupname username:將已存在的user加入已存在的group。
usermod -g groupname username:變更user的主要group
usermod -l new_username username:變更username (不影響owner權限,因為系統用的是uid)
usermod -L username:鎖使用者登錄權限,會在/etc/shadow中為該user的密碼前加上一 ! 符號。
usermod -U username:解除使用者的權限鎖定,即拿掉上述/etc/shadow中的!符號。

id:可查uid, gid, 及所屬的group list

sudo -s:切換成root
su:切換身份
sudo su:切換成root
開sudo權限:在/etc/sudoers裡加入username ALL=(ALL) ALL
or username ALL=(ALL) NOPASSWD: ALL 可以在sudo時不用輸入密碼
(用visudo這隻程式修改,會幫檢查格式,比較安全)

uname:顯示系統資訊
-a:顯示系統核心所有資訊

umask:建立新目錄、檔案時,預設的存取權限。

getent passwd:顯示系統所有使用者,包括LDAP的帳號

finger:查user資訊

locale:秀出系統的語系設定(設定方法:dpkg-reconfigure locales)

ulimit:可用來限制使用者的系統使用資源(如cpu, memory, 及建立檔案的最大限制)
-a:顯示目前的限制資訊

stty:用來設定終端機(tty1~tty6)的環境, 如按鍵內容及萬用字元.

System Status
ps

top
pstree

shell
=:指定變數。

echo:查看shell變數($HOME, $PATH,...或是自訂變數等)。
unset:取消變數內容。
export :將自訂變數變成環境變數,便可供其它的程序使用。(無參數時,便是透出環境變數與env一樣)
`[command]`:‵之內的command會先被執行,而執行的結果將做為外部的輸入資訊。
\:換行。
"....":可含變數,變數會將展開的結果變成字串的一部分。
'...':僅含字元,所以含有變數時,不會展開,當字元用。
evn:顯示環境變數。
set:顯示環境變數及shell的自訂變數。

重要的環境變數:
$PS1:命令提示字元的格式。
$$:本次login取得shell的PID。(查詢方式echo $$)
$?:顯示上一個指令的return value。

bash支援的萬用字元
&:將指令於背景執行
>:stdout,replace
>>:stdout, append
1>:即>
2>:stderr, replace
2>>:stderr, append

所以將正確訊息與錯誤訊息分別寫到不同檔案,方法如下:
find / -name animation >right_list 2> wrong_list

將正確訊息與錯誤訊息寫到同一個檔案,方法如下:
find / -name animation >right_list 2>&1

查詢檔案數量
find <PathToFile> -type f |wc -l

將鍵盤的輸入寫進檔案,使用ctrl+d結束輸入
cat > testfile

同上,但使用eof tag來結束輸入
cat > testfile <<EOFSTRING
<<右側的字串表eof tag,當輸入為eof tag時,便會結束輸入

將testfile2的檔案內容寫入testfile檔案
cat > testfile < testfile2 (replace)
cat >> testfile < testfile2 (append)

<:stdin, replace
<<:stdin, append
' ':不具變數置換
" ":具變數置換
` `:可執行的指令

常見的管線擷取指令
cut:印出行中符合條件的段落,  有點類似java的String.split()。
ex: echo $PATH | cut -d ':' -f 5-7 (-d 後面接分隔符號, -f 後面接第幾段)

grep:印出符合RE的字串所在行。
-i:忽略大小寫.
-v:reverse, 取不符合RE的行.
-n:印出行號.
-c:count符合RE的字串個數.
-E: or egrep,才可以在regex string中使用 | 來找尋. ex. grep -E 'foo|bar'
可與cut連用,如: last | grep 'root' |cut -d ' ' -f 1

sort:排序。
-n:對數字做排序
-k:接數字(以第幾個field做排序)
-t:後面接分隔符號
-M:以月份名稱排序
-r:反向排序
-f:忽略大小寫

uniq:重覆的只顥示一次。
-c:秀出重覆幾次


wc:字數統計工具。
-l:僅秀出有幾行
-w:僅秀出有多少個word
-m:僅秀出有多少個character

tee:同時將stream送至檔案及stdout
-a:以append的方式送入檔案


網路

/etc/init.d/networking restart:重新啟動網路卡
/etc/network/interfaces:設定ip, netmask, gateway
/etc/hostname:設定主機名稱
(改完後需執行hostname -F /etc/hostname 才會更新)

/etc/resolv.conf:設定網域名稱, DNS, 搜尋網域
/etc/hosts:設定ip與網址的對應關係, 亦可設定alias, 如: 140.119.xxx.xxx mysite mysite.nccu.edu.tw
/etc/services:設定services的port及protocol

ifconfig:顯示網路卡組態 (類似windows的ipconfig)

tracepath :查詢由本機到對方主機間的router是否通暢,
但有些router會鎖ICMP,所以可能沒有回應

nslookup :反查網址或IP

netstat:查詢主機目前的連線及哪些port正在listenning
常用參數:-ntulp

nmap:用來查詢主機的系統資訊及開放哪的port及services資訊
-A:可以detect目前有的services及OS資訊.
-open:僅detect目前有開放的services資訊

last:會開啟/var/log/wtmp並讀取其中的內容,用來查詢最近login的訊息。

lastlog:會開啟/var/log/lastlog並讀取其中的內容,用來查詢所有user上一次login的訊息。

route:檢視路由表

hostname:查詢系統的hostname
-f:查詢FQDN (網址全名)

wget [url]:抓檔

scp:利用ssh在local host與remote host間copy檔案
scp localfile username@tohostname:/newfilename
scp username@tohostname:/remotefile /newlocalfile

ssh [ip] -l [username]:用ssh連到遠端server.

網路出問題時,以下順序debug,
ping localhost (or ping 127.0.0.1):失敗便是linux網路核心的問題

ping <自己的IP>:若上面沒問題的話,通常也不會有問題,除非網路卡有誤

ping :看看是不是router掛了

ping 168.95.192.1:若不通,代表網路對外路線掛了

檔案搜尋與查詢
which:從PATH的環境變數中找執行檔(如果有多個同名的程式,which只顯示第一個。故which常用來檢查shell執行的程式,是否符合預期的版本。

whereis:找系統中的檔案位址(search by index)

locate:找系統中包含關鍵字的檔案位址(search by index in /var/lib/mlocate)
  • updatedb (會根據 /etc/updatedb.conf 的設定去搜尋系統硬碟內的檔名,並更新 /var/lib/mlocate 內的資料庫檔案)
  • OSX 下的指令: sudo /usr/libexec/locate.updatedb


find [PATH] [option] [action]:找系統中的檔案位址,支援萬用字元,有很多方便的參數,但是針對硬碟做search,速度較慢。
(如: find / -name Animation)
-type:針對檔案類型
-exec:對出來的檔案做處理
e.g. find . -name 'mail.info.*' -exec rm -f '{}' \;
( '{}'會被代換成找到的files, ;是終結符號, \是escape符號)

find . -exec grep -H "search_text" {} \;
* 找尋目前目錄下所有含有search_text的file and location

xargs [command]:用stdin裡的資料當作 command執行時的input.
(e.g. find [path] -type d -name ".svn"|xargs rm -rf  移除[path]下所有.svn的子目錄)

stat:查詢檔案的資訊(有atime, ctime, mtime, inode, block....)
wc:列出文字檔的列數、單字數、字元數

file:查看檔案的type,也可查看文字檔的編碼

type:查看指令屬於bash或外部指令(會列出執行檔的位置, 如:/usr/bin/erl,類似which指令)

常用指令
pwd -P:顯示真實目錄所在位置,而非link的位置
source或.:將設定檔的內容載入shell,這樣就無須重新login.

ls
-h:以KB,MB…顯示檔案大小
–time=atime:顯示上次檔案被access的時間
–time=ctime:顯示上次檔案屬性被改變的時間
(ls預設顯示mtime,即上次檔案內容被modification的時間)
ls -d */:僅顯示目前位置的所有目錄。

touch:更改檔案atime及mtime,或開新空白檔
-a: 改atime
-m: 改mtime

mkdir -p:直接建立多層目錄,原不存在之目錄皆會自動建立
mkdir -m:創建目錄同時設置目錄權限

cp
-a:檔案屬性一起複製,不使用預設屬性,若是目錄亦copy整個目錄結構
-s:複製成捷徑
-u:目標檔與來源檔有差異時,才複製,適合用在備份

mv:搬移檔案

rm:移除檔案

rename:更名

alias:顯示alias 的command, 也可以為指令取別名,如: alias lm='ls -l|more'。
unalias:拿掉別名。

cat:concatenate
-n:印出行號 (等於nl指令)
-A:顯示所有內容,包含特殊字元

less:同more,但比more好用,可以用pageup向回捲,也可用?向前搜尋string
tail:Display the last part of a file
tail -f filename:用來持續監看log,超酷!!

head:顯示檔案前十行
-n:可設定顯示的行數

tial:顯示檔案最後十行,-n參數同head用法

cal:日曆

bc:小計算機
quit (離開)
scale = n (顯示小數點位數)

ctrl+c:結束process
ctrl+d:EOF, exit
ctrl+l:clear

$PATH:執行檔path變數
PATH = 「$PATH」:/root :在$PATH append /root 這個path.
基於安全性的理由,PATH不加.(目前目錄),所以要執行目前目錄下的指令要加prefix 『./』

LANG="en" :切換系統語係為英文

man page中的指令:
/:向下搜尋string
?:向上搜尋string
n:找下一個字串目標
N:找上一個字串目標
q:結束man page

man man:可以查到 man page中指令後方括號數字的意義

man -f [command]:簡單顯示該command的用途(equal 「whatis」指令)

man -k [string]:印出指令介紹中含有該string的指令

history:查看.bash_history
-c:清除history

![之前輸入過的command prefix]:重覆之前做過的command
!!:重覆上一個指令

關機
sync:將記憶體中的資料寫入硬碟(常在關機前用)
shutdown -r now:將系統服務關掉後更立即重新開機 (equal 「reboot」)
shutdown -r +30 『 The system will reboot 『:30分鍾後重新關機,並告知所有使用者
shutdown -h +10:十分鍾後關機
shutdown -h 12:10:12:10關機
shutdown -h now:立即關機
shutdown -k 『 The system will reboot 『:告知所有使用者要關機,但並不真執行

目錄配置
/:根目錄
/bin:存放可執行的系統執行檔
/boot:存放kernel
/dev:裝置或周邊設備
/etc:系統各種設定檔,如密碼,服務啟始檔 (最好常備份)
/home:users的家目錄 (最好獨立partition)
/lib:library
/lost+found:存放系統不正常錯誤時所產生的遺失片段
/mnt or /media:光碟機, 軟碟機, USB隨身碟..
/proc:虛擬檔案系統,存放記憶體中的重要資料
/root:root的家目錄
/sbin:存放系統管理員專用的系統執行檔
/srv:服務啟動後,服務所需取用的目錄常放置於此
/tmp:暫存檔存放處 (最好獨立partition)
/usr:雷同windows的Program files目錄 (最好獨立partition)
/usr/bin:一般使用者可使用的程式
/usr/sbin:系統管理員專用的程式
/usr/include/:c/c++ header files放置處
/usr/local/:本機端自行安裝軟體的預設目錄
/usr/share:共享文件放置目錄
/usr/share/doc:存放說明文件
/usr/src:Linux的開放源碼
/var:系統中常態性變動的檔案,如log,cache (最好獨立partition)
/var/cache:程式運作過程中的暫存檔
/var/lib:程式執行中所需的library
/var/log:log檔放置區,/var/log/messages總管所有登錄資訊 (常檢查)
/var/lock:被鎖住的資源(有些資源不允許同時使用,如印表機)
/var/run:有些程式啟動後,PID會放置在此目錄下
/var/spool:佇列資料存放處

套件管理
dpkg -l <套件名稱> 查詢套件的安裝資訊

dpkg -l|grep <套件名稱>:查詢包含關鍵字的套件名資訊

dpkg -L <套件名稱>:查詢套件包含的所有已安裝的檔案

apt-get remove <套件名稱> :
刪除套件但不刪除設定檔(並remove不再使用的相依packages)

apt-get –purge remove <套件名稱>:
刪除套件亦刪除設定檔(並remove不再使用的相依packages)

dpkg -r <套件名稱> :刪除套件但不刪除設定檔(不會自動處理相依packages)

dpkg -P <套件名稱>: 刪除套件亦刪除設定檔 (不會自動處理相依packages)

dpkg -c <.deb檔案名稱>:查詢deb套件檔包含的所有檔案

dpkg -I <.deb檔案名稱>:查詢deb套件檔的詳細資訊

dpkg -i <.deb檔案名稱>:安裝deb套件

dpkg -S <欲查詢的檔案名稱>:查詢該檔案有哪些套件提供

dpkg -s <套件名稱>:查詢已安裝套件的詳細資訊

dpkg –configure -a:重新設定之前因中斷等還沒安裝好的套件

dpkg-checkbuilddeps:檢查需要的函式庫

dpkg-buildpackage:編譯套件 (需在原始碼的目錄下執行)

dpkg-reconfigure <套件名稱>:修改套件設定檔

dpkg --get-selections:列出已安裝套件

dpkg --get-selections > installed-software 把所有已經安裝的套件匯出到清單

dpkg --set-selections < installed-software 將套件清單匯入

apt-get install <套件名稱>:安裝套件

apt-reconfigure <套件名稱>:重新設定已安裝的套件

apt-get update:
此指令會依照/ect/apt/sources.list裡的套件源去抓套件庫,
並把相關資訊存在/var/lib/apt/lists/下。
所以更改過/etc/apt/sources.list後,要記得執行此指令才能更新本地端的套件庫)

apt-get upgrade:僅更新沒有相依性問題的套件(安全更新,用在常規更新)
apt-get dist-upgrade:更新所有系統套件,若有相依性問題則會自動解決
(有風險的更新,因為系統會自動移除衝突的套件)
-f -y:遇到錯誤也強迫繼續 (高危險)
-s:只模擬安裝,不實際安裝到系統上

apt-get clean:(清除/var/cache/apt/archives的套件暫存檔)

apt-get -b source <套件名稱>:下載原始檔
[包含原始碼(orig.tar.gz), 修正檔(diff.gz), 描述檔及前兩者的MD5 hash值(dsc) ]

apt-get build-dep <套件名稱>:安裝編譯此套件所需要的套件

apt-build install <套件名稱>:最佳化安裝套件 (先apt-build update 更新套件list)

apt-build –reinstall install <套件名稱>:重新最佳化編譯已安裝過的套件

apt-cache search <關鍵字>:可以針對尚未安裝的套件作查詢

apt-cache search <關鍵字1>|grep <關鍵字2>:
找尋套件資訊中含有關鍵字2的關鍵字1套件

apt-cache -n search <關鍵字>:找尋套件名稱含有關鍵字的套件

apt-cache show <套件名稱>:顯示套件詳細資訊及介紹

apt-cache showpkg <套件名稱>:顯示套件相依性及反相依性等資訊

apt-cache showsrc <套件名稱>:取得編譯所需的套件名稱

apt-cache depends <套件名稱>:顯示套件相依性等資訊

apt-cache rdepends <套件名稱>:顯示套件反相依性等資訊

apt-file search :透過已知檔名,來找歸屬之套件

auto-apt run ./configure:若configure遇到缺少的套件,會自動詢問是否安裝

檔案系統

fdisk [/dev/hda or /dev/sda]:磁碟分割 (編輯partition table)
常用指令:sudo fdisk -l (顯示系統所有的partition, 沒有加sudo只看的到windows partition唷~)

mke2fs [option] [device]:格式化ex2/ex3 (同Dos下的format)
-j:加入journal (日誌),即以ex3方式格式化

mkfs [option [device:可選擇以特定檔案格式做格式化
-t:選擇特定檔案格式
常用指令:以ls -l /sbin/mkfs* 可以查看系統有的、可以支援的檔案格式

dumpe2fs:印出ex2/ex3檔案系統的資訊

e2fsck:主機突然當機時,用來檢查metadata與實際資料是否一致 (同windows的scandisk)

fsck:檢查並修復檔案系統,通常用在主機不正常關機或切割新partition時,用來檢metadata與實際資料是否一致。fsck處理完 後,有任何錯誤的檔案都會丟到/lost+found目錄下。執行fsck的partition,切記不可掛載在系統上,否則會有磁碟資料毀損的風險。

tune2fs:調整ex2/ex3檔案系統的參數

df [option]..[File]:顯示磁碟使用資訊
-h:較易閱讀的格式
-T:顯示該partition的file system格式
-i:顯示inode數量

du:估計檔案佔用的空間
-h:較易閱讀的格式
-s:僅顯示總量(不細列子目錄下的每個檔案)
--max-depth=x:僅列出x層.
常用指令:
sudo du -sh /* (顯示根目錄下每個目錄佔用的磁碟大小)
du -sh [path] | sort -n -r | more

mount :顯示系統所有分割區相關的filesystem及掛載點。
-t:指定掛載的檔案格式
--bind:目錄掛載目錄(remount a subtree)
-o:帳號、密碼、讀取權限
-o loop:掛載檔案(虛擬磁碟機)
-a:mount fstab中的file system (通常改完fstab, 都用此指令來測試是否正確)

umount:卸載裝置檔案

開機自動mount
sudo vim /etc/fstab (file system table)
(實際會更新/etc/mtab 及 /proc/mounts)

壓縮zcat:查看.gz壓縮檔的內容.
gzip:解or壓.gz檔
-d:解壓縮gz檔
tar -zxvf XXX.tar.gz:解tar.gz
tar -zcvf destinationFile(.tar.gz) SourceFile:打包成tar.gz
tar -ztvf XXX.tar.gz:查看tar.gz的內容
dd:可備份整顆partition或disk
cpio:可備份(包括/dev)所有的檔案

密碼
/etc/passed
/etc/shadow

其它設定
/etc/issue:終端機介面(tt1~tt6)的提示字串。
/etc/motd:使用者登錄後,系統顯示的訊息。
/etc/manpath.config:man搜尋man page的路徑。

log
清除log檔:
先sudo su,轉成root, 再用cat /dev/null > xxx.log 來將之清空。

logrotate:設定 /etc/logrotate.conf 及 /etc/logrotate.d/下的組態檔。

Editor
vimtutor:查閱vim 手冊

(X Window下)
[Ctrl] + [Alt] + [F1] ~ [F6] :文字介面登入 tty1 ~ tty6 終端機

[Ctrl] + [Alt] + [F7] :圖形介面桌面。



No comments:

Post a Comment