一、日常操作
二、數據處理
三、系統調試
四、網絡管理
一、日常操作
日常操作是在使用Linux進行編程開發中常用的命令,工具的總結。
1、ssh
2、熟悉bash中的作業管理
& 命令後面加“&”表示後臺運行
$jobs 查看後臺運行的程序(包括停止的和正在運行的)
$fg %n 讓後臺運行的工作n到前臺運行
$bg %n 讓工作n在後臺運行
其中n代表工作號
Ctrl+z、Ctrl+c、Ctrl+\的區別:
Ctrl+z:發送SIGTSTP信號,掛起前臺所有進程;
Ctrl+c:發送SIGINT信號,結束前臺所有進程;
Ctrl+d:結束輸入或退出shell,相當於EOF;
Ctrl+\:發送SIGQUIT信號,結束前臺進程,並聲稱core文件。
TIP:可以在vi編輯過程中,按Ctrl+z掛起vi編輯,查看文件後(或做其他事),用fg讓vi到前臺運行。
kill在bash工作控制中的使用:
kill -l l位L的小寫,列出kill可使用的信號
kill -2 相當於Ctrl+c
kill -9 強制結束一個進程
kill -15 以正常方式結束掉一個進程
(-9和-15的區別,例如正在編輯的vi,如果以正常方式結束,那麼會刪除.filename.swap文件,如果是強制結束不會刪除掉.filename.swap文件。)
另:kill後面默認跟進程的PID,用在bash工作控制時,要跟%n(n爲工作編號)。
3、文件管理
ls, ls -l, less, more, tail, head, ln, ln -s, chgrp, chown, chmod, du, df, fdisk, mkfs, mount, umount, find
- head
head filename
顯示前面幾行,默認顯示前10行。
head -n 20 filename
用-n指定顯示前多少行。
- tail
tail filename
默認顯示後10行。
tail -n 20 filename
用-n指定顯示後多少行。
tail -f filename
一直偵測filename的內容,直到Ctrl+c爲止,filename一有內容就會輸出。
- ln
ln [-sf] 來源文件 目標文件
如果不加任何參數,就是硬鏈接(hard link),如果加-s就是符號鏈接(symbolic link)。
-f 如果目標文件存在就直接把目標文件刪除後再建立。
- df
列出文件系統磁盤的整體使用量。
-a:列出所有的文件系統,包括系統特有的/proc等文件系統;
-k(-m):以KByte(MByte)的容量顯示各文件系統;
-h:以人們易閱讀的GByte,MByte,KByte等格式自行顯示;
-H:以 M=1000K取代M=1024K 的進位方式;
-T:連同該 partition的filesystem 名稱 (例如 ext3) 也列出;
-i:不用硬盤容量,而以 inode的數量來顯示。
- du
du [-ahskm] 檔案或目錄名稱
選項參數:
-a:列出所有檔案的容量,因爲默認僅統計目錄底下的檔案量而已;
-h:以人們較易讀的容量格式 (G/M) 顯示;
-s:列出總量而已,而不列出每個各別的目錄佔用容量;
-S:不包括子目錄下的總計,與-s有點差別;
-k:以 KBytes 列出容量顯示;
-m:以 MBytes 列出容量顯示;
- chgrp
chgrp [-R] dirname/filename ...
-R:遞歸的意思,目錄下的所有檔案和子目錄都改爲這個羣組。
chgrp qyh filename
要改變爲的羣組必須在/etc/group中存在。
- chown
# chown [-R] 賬號名稱 檔案或目錄
# chown [-R] 賬號名稱:組名 檔案或目錄
- fdisk
先了解一下磁盤的一些知識(主要分三類):
ATA(Advanced Technology Attachment),高技術配置(IDE並行接口),40pin,線多,干擾大,現在已基本不用;
SATA,串行ATA,SATA3.0可達到6Gbit/s;
SCSI(Small Computer System Interface),小型計算機系統接口;
在Linux中,第一個軟盤驅動叫/dev/fd0,第二個叫/dev/fd1;第一個SCSI硬盤叫/dev/sda,第二個叫/dev/sdb;第一個SCSI CD-ROM叫/dev/scd0或者/dev/sr0;在IDE控制器上的主硬盤叫/dev/hda,在IDE控制器上的從硬盤叫/dev/hdb。
在每個磁盤上的分區,用數字來區分,比如在一個SCSI磁盤上的兩個分區命名爲/dev/sda1和/dev/sda2。
fdisk -l 裝置名稱 (磁盤分區)
fdisk -l 列出所有分區信息
sudo fdisk /dev/sda
- mkfs
mkfs [-t 文件系統格式] 裝置文件名
把指定的分區格式化爲指定的文件系統格式。
mkfs[tab][tab] (按兩個tab鍵會出現支持的文件系統格式)
格式化磁盤可以使用支持詳細參數的mke2fs指令。
另外還有兩個磁盤檢驗的命令fsck, badblocks 。
- mount
# mount [-t 文件系統] [-L Label 名] [-o 額外選項] [-n] 裝置文件名 掛載點
單一文件系統不應該被重複掛載在不同的掛載點(目錄)中;
單一目錄不應該重複掛載多個文件系統;
要作爲掛載點的目錄,理論上應該都是空目錄纔是。
選項與參數:
-a :依照配置文件 /etc/fstab 的數據將所有未掛載的磁盤都掛載上來
-l :單純的輸入 mount 會顯示目前掛載的信息。加上 -l 可增列 Label 名稱!
-t :與 mkfs 的選項非常類似的,可以加上文件系統種類來指定欲掛載的類型。
常見的 Linux 支持類型有:ext2, ext3, vfat, reiserfs, iso9660(光盤格式),
nfs, cifs, smbfs(此三種爲網絡文件系統類型)
-n :在默認的情況下,系統會將實際掛載的情況實時寫入 /etc/mtab 中,以利其他程序
的運行。但在某些情況下(例如單人維護模式)爲了避免問題,會刻意不寫入。
此時就得要使用這個 -n 的選項了。
-L :系統除了利用裝置文件名 (例如 /dev/hdc6) 之外,還可以利用文件系統的標頭名稱
(Label)來進行掛載。最好爲你的文件系統取一個獨一無二的名稱吧!
-o :後面可以接一些掛載時額外加上的參數!比方說賬號、密碼、讀寫權限等:
ro, rw: 掛載文件系統成爲只讀(ro) 或可擦寫(rw)
async, sync: 此文件系統是否使用同步寫入 (sync) 或異步 (async) 的
內存機制,請參考文件系統運行方式。默認爲 async。
auto, noauto: 允許此 partition 被以 mount -a 自動掛載(auto)
dev, nodev: 是否允許此 partition 上,可創建裝置文件? dev 爲可允許
suid, nosuid: 是否允許此 partition 含有 suid/sgid 的文件格式?
exec, noexec: 是否允許此 partition 上擁有可運行 binary 文件?
user, nouser: 是否允許此 partition 讓任何使用者運行 mount ?一般來說,
mount 僅有 root 可以進行,但下達 user 參數,則可讓
一般 user 也能夠對此 partition 進行 mount 。
defaults: 默認值爲:rw, suid, dev, exec, auto, nouser, and async
remount: 重新掛載,這在系統出錯,或重新升級參數時,很有用!
mount /dev/sda5/ ./mnt/E (雙系統,在Linux下掛載windows的文件系統)
掛載/dev/sda5到./mnt/E,可以省去參數,linux可以自動識別。
- umount
# umount [-fn] 裝置文件名或掛載點
選項與參數:
-f :強制卸除!可用在類似網絡文件系統 (NFS) 無法讀取到的情況下;
-n :不升級 /etc/mtab 情況下卸除。
另外,我們也可以利用 mount 來將某個目錄掛載到另外一個目錄去喔!這並不是掛載文件系統,而是額外掛載某個目錄的方法! 雖然底下的方法也可以使用 symbolic link 來連結,不過在某些不支持符號鏈接的程序運行中,還是得要透過這樣的方法才行。
$ sudo mount --bind /home/qyh/work ~/mnt/w
$ umount ~/mnt/w
4、Some Tips
a)在bash裏,Ctrl-R可以查找歷史命令,Ctrl-P和Ctrl-N分別用來調出上一條命令和下一條命令。
Ctrl-W用來刪除最後一個單詞,Ctrl-U用來刪除一句。
Alt-.把上一次命令的最後一個參數打出來,Alt-*列出你可以輸出的命令。
cd - 回到上一次工作目錄;cd ~ 回到/home/usr目錄。
如果你有輸了個命令行,但是你改變注意了,但你又不想刪除它,因爲你要在歷史命令中找到它,但你也不想執行它。那麼,你可
以按下 Alt-# ,於是這個命令關就被加了一個#字符,於是就被註釋掉了。
b)pstree -p可以查看進程樹。
c)sudo !!以root來執行上次命令,在忘記打上sudo的時候這條命令比較有用。
d)man ascii 查看ASCII表。
e)> file創建一個空文件。
f)echo “ls -l” | at midnight 在某個時間運行某個命令。
g)xargs的用法:
它的作用是將參數列表轉換成小塊分段傳遞給其他命令,以避免參數列表過長的問題。
$ find /tmp -name core -type f -print | xargs /bin/rm -f
查找/tmp下的core文件並刪除它,但是如果文件名包含空格或換行符就會執行錯誤。
$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
-print0表示輸出以null分隔,-0表示輸入以null分隔
$ find /tmp -depth -name core -type f -delete
比前面的例子更有效率,因爲不需要使用fork和exec去執行rm了
$ cut -d: -f1 < /etc/passwd | sort | xargs echo
輸出所用有用戶
-t:先打印出命令再執行;
-I{}:用“{}”代替輸入參數,執行時”{}“會變成輸入參數,“{}”也可用其他字符串代替
比如ls | xargs -t -Ixx mv xx xx.aa和上面的效果一樣。
二、數據管理
sort, uniq, cut, paste, join, tr, strings, iconv, split
命令的使用及參數見本文檔組下的《linux常用命令總結》。下面介紹一些實例。
- sort
- uniq
注:last命令式列出賬號登陸信息。
- tr
# tr [-ds] SET1 ...
選項與參數:
-d :刪除訊息當中的 SET1 這個字符串;
-s :取代掉重複的字符!
將last輸出的信息當中的小寫字母轉換成大寫字母:
$ last | tr '[a-z]' '[A-Z]'
刪除last輸出的信息中的冒號“:”
$ last | tr -d ':'
- join
# join [-ti12] file1 file2
選項與參數:
-t :join 默認以空格符分隔數據,並且比對『第一個字段』的數據,
如果兩個檔案相同,則將兩筆數據聯成一行,且第一個字段放在第一個!
-i :忽略大小寫的差異;
-1 :這個是數字的 1 ,代表『第一個檔案要用那個字段來分析』的意思;
-2 :代表『第二個檔案要用那個字段來分析』的意思。
實例:
qyh@ubuntu:~/temp$ cat tmpfile
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
qyh@ubuntu:~/temp$ cut -d : -f 1-4 tmpfile > tmpfile_1
qyh@ubuntu:~/temp$ cut -d : -f 5- tmpfile > tmpfile_2
qyh@ubuntu:~/temp$ cat tmpfile_1 tmpfile_2
root:x:0:0
daemon:x:1:1
bin:x:2:2
sys:x:3:3
sync:x:4:65534
root:/root:/bin/bash
daemon:/usr/sbin:/bin/sh
bin:/bin:/bin/sh
sys:/dev:/bin/sh
sync:/bin:/bin/sync
qyh@ubuntu:~/temp$ join -t : tmpfile_1 tmpfile_2
root:x:0:0:/root:/bin/bash
daemon:x:1:1:/usr/sbin:/bin/sh
bin:x:2:2:/bin:/bin/sh
sys:x:3:3:/dev:/bin/sh
sync:x:4:65534:/bin:/bin/sync
qyh@ubuntu:~/temp$ join -t : -1 1 tmpfile_1 -2 1 tmpfile_2
root:x:0:0:/root:/bin/bash
daemon:x:1:1:/usr/sbin:/bin/sh
bin:x:2:2:/bin:/bin/sh
sys:x:3:3:/dev:/bin/sh
sync:x:4:65534:/bin:/bin/sync
- paste
# paste [-d] file1 file2
選項與參數:
-d :後面可以接分隔字符。預設是以 [tab] 來分隔的!
- :如果 file 部分寫成 - ,表示來自 standard input 的資料的意思。
注:paste與join不同之處在於,paste不需要考慮字段的相關性,直接將兩行貼在一起,中間以tab鍵分隔。
qyh@ubuntu:~/temp$ paste tmpfile_1 tmpfile_2
root:x:0:0 root:/root:/bin/bash
daemon:x:1:1 daemon:/usr/sbin:/bin/sh
bin:x:2:2 bin:/bin:/bin/sh
sys:x:3:3 sys:/dev:/bin/sh
sync:x:4:65534 sync:/bin:/bin/sync
cat a b | sort | uniq > c # c is a union b 並集
cat a b | sort | uniq -d > c # c is a intersect b 交集
cat a b b | sort | uniq -u > c # c is set difference a - b 差集
注:uniq -d 僅僅打印重複的行 uniq -u 僅僅打印唯一的行
- strings
Usage: strings [option(s)] [file(s)]
Display printable strings in [file(s)] (stdin by default)
The options are:
-a - --all Scan the entire file, not just the data section
-f --print-file-name Print the name of the file before each string
-n --bytes=[number] Locate & print any NUL-terminated sequence of at
-<number> least [number] characters (default 4).
-t --radix={o,d,x} Print the location of the string in base 8, 10 or 16
-o An alias for --radix=o
-T --target=<BFDNAME> Specify the binary file format
-e --encoding={s,S,b,l,B,L} Select character size and endianness:
s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
- iconv
# iconv --list
# iconv -f 原本編碼 -t 新編碼 filename [-o newfile]
選項與參數:
--list :列出 iconv 支持的語系數據
-f :from ,亦即來源之意,後接原本的編碼格式;
-t :to ,亦即後來的新編碼要是什麼格式;
-o file:如果要保留原本的檔案,那麼使用 -o 新檔名,可以建立新編碼檔案。
- split
# split [-bl] file PREFIX
選項與參數:
-b :後面可接欲分割成的檔案大小,可加單位,例如 b, k, m 等;
-l :以行數來進行分割。
PREFIX :代表前導符的意思,可作爲分割檔案的前導文字。
qyh@ubuntu:~/temp$ ls -lh file
-rw-r--r-- 1 qyh qyh 84K 2014-04-15 18:02 file
qyh@ubuntu:~/temp$ split -b 30K file File
qyh@ubuntu:~/temp$ ls -lh File*
-rw-r--r-- 1 qyh qyh 30K 2014-04-24 18:58 Fileaa
-rw-r--r-- 1 qyh qyh 30K 2014-04-24 18:58 Fileab
-rw-r--r-- 1 qyh qyh 24K 2014-04-24 18:58 Fileac