linux使用進階(一)

    本文根據《應該知道的Linux技巧》coolshell上的一篇文章提到的Linux技巧,結合自己掌握的情況進行擴展和總結得來。主要包括以下內容:
    一、日常操作
    二、數據處理
    三、系統調試
    四、網絡管理

一、日常操作
日常操作是在使用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章