純粹按着鳥哥的書上的基本命令打一遍,不喜勿噴!
Chapter5.首次登錄
一.基礎命令:
1.顯示時間和日期的命令:date
dzhwen@deng:~$ date 2014年 02月 23日 星期日 14:59:20 CST dzhwen@deng:~$ date +%Y/%m/%d 2014/02/23 dzhwen@deng:~$ date +%H:%M 14:59
2.顯示日歷:cal
dzhwen@deng:~$ cal 二月 2014 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
3.計算器:
dzhwen@deng:~$ bc
二.熱鍵:
1.[Tab]按鍵:
a.[Tab] 接在一串命令的第一個命令的后面,則為“命令補全”;
b.[Tab] 接在一串命令的第二個命令以后時,則為“文件補全”;
2.[Ctrl]-c : 中止當前執行的程序
3.[Ctrl]-d:退出字符界面
4.man + 指令 :對於要查找指令的說明
5.數據同步寫入磁盤:sync
二.重啟,關機:
root@deng:~# shutdown -h now 立刻關機,其中now相當於時間為0的狀態 root@deng:~# shutdown -h 17:00 系統在今天的17:00關機,如果在18:00才執行該命令,則隔天才關機 root@deng:~# shutdown -h +10 系統再過10分鍾后自動關機 root@deng:~# shutdown -r now 系統立刻重啟 root@deng:~# shutdown -r +30 'The system will reboot.' 再過30分鍾系統會重啟,並顯示后面的消息給所有在線的用戶
Chapter6.Linux的文件權限與目錄配置
一.Linux文件屬性
1.ls -al

root@deng:~# ls -al 總用量 72 drwx------ 12 root root 4096 11月 21 01:00 . drwxr-xr-x 23 root root 4096 10月 23 22:26 .. -rw------- 1 root root 2519 2月 23 15:18 .bash_history -rw-r--r-- 1 root root 3106 4月 19 2012 .bashrc drwx------ 3 root root 4096 10月 23 22:38 .cache drwx------ 5 root root 4096 10月 23 22:39 .config drwx------ 3 root root 4096 10月 23 23:01 .dbus drwx------ 2 root root 4096 11月 21 00:54 .gconf drwx------ 3 root root 4096 11月 21 01:00 .gnome2 drwx------ 2 root root 4096 10月 23 23:01 .gnome2_private drwx------ 2 root root 4096 10月 23 22:39 .gvfs drwxr-xr-x 3 root root 4096 10月 23 22:38 .local -rw-r--r-- 1 root root 140 4月 19 2012 .profile drwx------ 2 root root 4096 2月 23 16:30 .pulse -rw------- 1 root root 256 10月 23 22:28 .pulse-cookie drwxr-xr-x 2 root root 4096 11月 21 00:58 .vim -rw------- 1 root root 4013 11月 21 01:00 .viminfo -rw-r--r-- 1 root root 1265 10月 23 23:04 .vimrc
ls——list,顯示文件的文件名與相關屬性;參數“-al”則表示列出所有的文件詳細的權限與屬性。
r——可讀;w——可寫;x——可執行;
第二列表示有多少文件連接到此節點;第三列表示這個文件(或目錄)的“所有者帳號”;第四列表示這個文件的所屬用戶組;第五列為這個文件的容量大小,單位為B
第六列為這個文件的創建文件愛你日期或最近修改日期;第七列為該文件名
2.修改文件屬性與權限
chgrp:改變文件所屬用戶組
root@deng:~# chgrp 用戶組 文件名
chown:改變文件所有者
root@deng:~# chown 帳號名稱:組名 文件或目錄
應用:當將某個文件復制給別的用戶(同一或不同用戶組)時,單純的cp復制給人家,人家還是沒有權限對其進行修改,這時需要對文件的所有者進行修改。
chmod:改變文件的權限
root@deng:~# chmod 數字(3位) 文件或目錄 root@deng:~# chmod u=rwx,go=rx 文件名 root@deng:~# chmod a-x 文件名 (a——all,'-'指除去)
3.查看Linux版本
dzhwen@deng:~$ uname -r 3.8.0-29-generic #查看實際的內核版本 dzhwen@deng:~$ uname -a Linux deng 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013 i686 i686 i386 GNU/Linux dzhwen@deng:~$ uname -m i686 dzhwen@deng:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.3 LTS Release: 12.04 Codename: precise
Chapter7.Linux文件與目錄管理
1.目錄的相關操作
. 代表此層目錄 .. 代表上一層目錄 - 代表前一個工作目錄 ~ 代表“目前用戶身份”所在的主文件夾
cd:切換目錄 pwd [-p]:顯示當前目錄,加入-p代表顯示正確的完整路徑,不加入代表顯示連接文件的數據顯示 mkdir [-mp]:新建一個新的目錄,加入-p參數,可以自行創建多層目錄
# mkdir -m 711 test2 參數-m強制設置屬性 rmdir [-p] 目錄名稱:刪除一個空的目錄
#rmdir test 若尚有內容,則無法刪除
-p:連同上層“空的”目錄也一起刪除
注意:僅輸入cd時,代表的是cd ~
2.文件和目錄管理
a.查看文件與目錄:ls
常用參數:
-a:全部的文件,連同隱藏文件(開頭為.的文件)一起列出來(常用)
-d : 僅列出目錄本身,而不是列出目錄內的文件數據
-l: 列出長數據串,包含文件的屬性與權限等數據。
b.復制:cp [參數] 源文件 目標文件
常用參數:
-a : 相當於-pdr
-i : 若目標文件已經存在時,在覆蓋時會先詢問操作的進行。
-r : 遞歸持續復制,用於目錄的復制行為。
c.移除文件或目錄:rm [-fir] 文件或目錄
參數:
-f : 就是force的意思,忽略不存在的文件,不會出現警告信息;
-i:互動模式,在刪除前會詢問用戶是否操作;
-r:遞歸刪除,最常用在目錄的刪除了。這是非常危險的操作!!
d.移動文件與目錄,或更名:
mv [-fiu] source destination
或:mv [options] source1 source2 source3 .... directory
參數:
-f:force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;
-i:若目標文件(destination)已經存在時,就會詢問是否覆蓋;
-u:若目標文件已經存在,且source比較新,才會更新。
3.取得路徑的文件名與目錄名稱
dzhwen@deng:~$ basename ./python文件/Homework/Chapter5/5_5.py #文件名 5_5.py dzhwen@deng:~$ dirname ./python文件/Homework/Chapter5/5_5.py #目錄名 ./python文件/Homework/Chapter5
4.文件內容查詢
1 cat:由第一行開始顯示文件內容 2 tac:從最后一行開始顯示,可以看出tac是cat的倒寫形式 3 nl:顯示的時候,順便輸出行號 4 more:一頁一頁地顯示內容 5 less:與more類似,但是比more更好的是,它可以往前翻頁! 6 head:只看頭幾行 7 tail:只看結尾幾行 8 od:以二進制的方式讀取文件內容!
5.修改文件時間或創建新文件:touch [-acdmt] 文件
參數:
-a:僅修改訪問時間;
-c:僅修改文件的時間,若該文件不存在則不創建新文件
-d:后面可以修改的日期而不用目前的時間,也可以使用--date=“日期或時間”;
-m:僅修改mtime;
-t:后面可以接欲修改的時間而不用目前的時間,格式為[YYMMDDhhmm]
6.文件默認權限:umask
注意:umask的分數是指“該默認值需要減掉的權限”
新建文件時:(--rw-rw-rw-) 新建目錄時:(drwxrwxrwx)
dzhwen@deng:~$ umask 0002 dzhwen@deng:~$ sudo -i [sudo] password for dzhwen: root@deng:~# umask 0022
7.設置文件的隱藏屬性:chattr;顯示文件的隱藏屬性:lsattr
Chapter8.Linux磁盤與文件系統管理
· 基本上Linux最主要的文件系統是Ext2,該文件系統內的信息主要有:
1.superblock:記錄此文件系統的整體信息,包括inode/block 的總量,使用量,剩余量,以及文件系統的格式與相關信息等。
2.inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的block號碼。
3.block:實際記錄文件的內容,若文件太大時,會占用多個block。
· Ext2文件系統的數據訪問為索引式文件系統。
· 需要碎片整理的原因就是文件寫入的block太過於離散了,此時文件讀取的性能將會變得很差所致。這個時候可以通過碎片整理將同一個文件所屬的blocks匯集在一起。
· Ext2文件系統主要有boot sector,superblock,inode bitmap,block bitmap,inode table,data block等六大部分。
· data block是用來放置文件內容數據地方,在Ext2文件系統中所支持的block大小有1KB,2KB及4KB三種而已。
· inode記錄文件的屬性/權限等數據,每個inode大小均固定為128bytes;每個文件都僅會占用一個inode而已;因此文件系統能夠新建的文件數量與inode的數量有關。
· 文件的block記錄文件的實際數據,目錄的block則記錄該目錄下面文件名與其inode號碼的對照表。
· 日志文件系統會多出一塊記錄區,隨時記載文件系統的主要活動,可加快系統恢復時間。
· Linux文件系統為增加性能,會讓主存儲器作為大量的磁盤高速緩存;
· 實際連接(硬鏈接)只是多了一個文件名對該inode號碼的連接而已。
· 符號鏈接就類似Windows的快捷方式功能。
· 磁盤的使用必需經過分區,格式化與掛載,分別慣用的命令為fdisk,mkfs和mount;
· 開機自動掛載可參考/etc/fstab的設置,設置完畢務必使用mount -a 測試語法正確否。
Chapter9.Linux磁盤與文件系統管理
· 壓縮命令為通過一些運算方法去將原本的文件進行壓縮,以減少文件所占用的磁盤空間。壓縮前與壓縮后的文件所占用的磁盤空間比值,就可以稱為“壓縮比”。
· 壓縮的好處是可以減少磁盤空間的浪費,在www網站也可以利用文件壓縮技術進行數據的傳送,好讓網站帶寬的可利用率上升。
· 壓縮文件的擴展名大多是.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2。
· 常見的壓縮命令有gzip與bzip2,其中bzip2壓縮比gzip還要更好,建議使用bzip2。
· tar可以用來進行文件打包,並可支持gzip或bzip2的壓縮。
· 壓 縮:tar -jcv -f filename.tar.bz2 被壓縮的文件或目錄名稱。
· 查 詢:tar -jtv -f filename.tar.bz2 。
· 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲被解壓縮的目錄。
· dump 命令可備份文件系統或單一目錄。
· dump 的備份若針對文件系統時,可進行0~9的level差異備份。其中level 0 為完整備份。
· restore 命令可還原被dump構建的備份文件。
· 要新建光盤刻錄數據時,可通過mkisofs命令來構建。
· 可通過cdrecord 來寫入CD或DVD刻錄機。
· dd可備份完整的分區或磁盤,因為dd可讀取磁盤的扇區表面數據。
· cpio 為相當優秀的備份命令,不過必須要搭配類似find命令來讀入欲備份的文件名數據,才可進行備份操作。
Chapter10.vim程序編輯器
vim不用說了吧,功能強大的編輯器。問題還是要記的命令特別多,沒辦法,好好學。
Chapter11.認識與學習bash
1.由於內核在內存中受保護的塊,因此我們必須要通過“Shell”將我們輸入的命令與Kernel通信,好讓Kernel可以控制硬件來正確無誤地工作。
2.學習shell的原因主要有:命令行界面的shell在各大distribution都一樣;遠程管理時命令行界面速度較快;shell是管理Linux系統非常重要的一環,因為Linux內很多控制都是以shell編寫的。
3.系統合法的shell均寫在/etc/shells 文件中。
4.用戶默認登錄取得的shell記錄於/etc/passwd 的最后一個字段。
5.type可以用來找到執行命令為何種類型。其中各種含義:file : 表示為外部命令;alias : 表示該命令為命令別名所設置的名稱;builtin : 表示該命令為bash 內置的命令功能。
1 dzhwen@deng:~$ type ls 2 ls 是 `ls --color=auto' 的別名 3 dzhwen@deng:~$ type -t ls 4 alias 5 dzhwen@deng:~$ type -a ls 6 ls 是 `ls --color=auto' 的別名 7 ls 是 /bin/ls 8 dzhwen@deng:~$ type cd 9 cd 是 shell 內嵌
6.變量就是以一組文字或符號等來替換一些設置或者是一串保留的數據。變量主要有環境變量與自定義變量,或稱為全局變量與局部變量。
7.用env查看環境變量與常見環境變量說明

dzhwen@deng:~$ env SSH_AGENT_PID=1973 GLADE_PIXMAP_PATH=: TERM=xterm SHELL=/bin/bash XDG_MENU_PREFIX=xfce- XDG_SESSION_COOKIE=bd0043ad08cbeac04bd685950000000a-1393769511.366101-937543318 WINDOWID=69206020 GNOME_KEYRING_CONTROL=/tmp/keyring-oOOnHB USER=dzhwen LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36: XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0 GLADE_MODULE_PATH=: XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 SSH_AUTH_SOCK=/tmp/ssh-gYTDUbyf1934/agent.1934 SESSION_MANAGER=local/deng:@/tmp/.ICE-unix/1992,unix/deng:/tmp/.ICE-unix/1992 DEFAULTS_PATH=/usr/share/gconf/xubuntu.default.path XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/etc/xdg:/etc/xdg PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games DESKTOP_SESSION=xubuntu QT_IM_MODULE=xim PWD=/home/dzhwen XMODIFIERS=@im=ibus GNOME_KEYRING_PID=1923 LANG=zh_CN.UTF-8 MANDATORY_PATH=/usr/share/gconf/xubuntu.mandatory.path UBUNTU_MENUPROXY=libappmenu.so GDMSESSION=xubuntu SHLVL=1 HOME=/home/dzhwen LANGUAGE=zh_CN:zh LOGNAME=dzhwen XDG_DATA_DIRS=/usr/share/xubuntu:/usr/local/share/:/usr/share/:/usr/share DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-E2PvMmVd6n,guid=3b8bc3a0f6b5a2e9db80a81200000047 LESSOPEN=| /usr/bin/lesspipe %s DISPLAY=:0.0 GLADE_CATALOG_PATH=: LIBGLADE_MODULE_PATH=: XDG_CURRENT_DESKTOP=XFCE GTK_IM_MODULE=ibus LESSCLOSE=/usr/bin/lesspipe %s %s COLORTERM=Terminal XAUTHORITY=/home/dzhwen/.Xauthority _=/usr/bin/env
8.僅用export 也會將所有的“環境變量”顯示出來。

dzhwen@deng:~$ export declare -x COLORTERM="Terminal" declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-E2PvMmVd6n,guid=3b8bc3a0f6b5a2e9db80a81200000047" declare -x DEFAULTS_PATH="/usr/share/gconf/xubuntu.default.path" declare -x DESKTOP_SESSION="xubuntu" declare -x DISPLAY=":0.0" declare -x GDMSESSION="xubuntu" declare -x GLADE_CATALOG_PATH=":" declare -x GLADE_MODULE_PATH=":" declare -x GLADE_PIXMAP_PATH=":" declare -x GNOME_KEYRING_CONTROL="/tmp/keyring-oOOnHB" declare -x GNOME_KEYRING_PID="1923" declare -x GTK_IM_MODULE="ibus" declare -x HOME="/home/dzhwen" declare -x LANG="zh_CN.UTF-8" declare -x LANGUAGE="zh_CN:zh" declare -x LESSCLOSE="/usr/bin/lesspipe %s %s" declare -x LESSOPEN="| /usr/bin/lesspipe %s" declare -x LIBGLADE_MODULE_PATH=":" declare -x LOGNAME="dzhwen" declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:" declare -x MANDATORY_PATH="/usr/share/gconf/xubuntu.mandatory.path" declare -x OLDPWD declare -x PATH="/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" declare -x PWD="/home/dzhwen" declare -x QT_IM_MODULE="xim" declare -x SESSION_MANAGER="local/deng:@/tmp/.ICE-unix/1992,unix/deng:/tmp/.ICE-unix/1992" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_AGENT_PID="1973" declare -x SSH_AUTH_SOCK="/tmp/ssh-gYTDUbyf1934/agent.1934" declare -x TERM="xterm" declare -x UBUNTU_MENUPROXY="libappmenu.so" declare -x USER="dzhwen" declare -x WINDOWID="69206020" declare -x XAUTHORITY="/home/dzhwen/.Xauthority" declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-xubuntu:/etc/xdg:/etc/xdg" declare -x XDG_CURRENT_DESKTOP="XFCE" declare -x XDG_DATA_DIRS="/usr/share/xubuntu:/usr/local/share/:/usr/share/:/usr/share" declare -x XDG_MENU_PREFIX="xfce-" declare -x XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0" declare -x XDG_SESSION_COOKIE="bd0043ad08cbeac04bd685950000000a-1393769511.366101-937543318" declare -x XDG_SESSION_PATH="/org/freedesktop/DisplayManager/Session0" declare -x XMODIFIERS="@im=ibus"
9.set可以查看目前bash環境下的所有輸入變量。
10.$?也為變量,是前一個命令執行完畢后的回傳碼。在Linux回傳碼為0代表執行成功。
11.locale可用於查看語系數據。

dzhwen@deng:~$ locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=
12.可用read 讓用戶由鍵盤輸入變量的值。
dzhwen@deng:~$ read var Hello Bash! dzhwen@deng:~$ echo $var Hello Bash! dzhwen@deng:~$ read -p "Please input your name:" -t 30 named Please input your name:Deng Zhuowen dzhwen@deng:~$ echo $named Deng Zhuowen
13.ulimit 可用以限制用戶使用系統的資源情況。
14.通配符及其含義:
* —— 代表0個到無窮多個任意字符。
?—— 代表一定有一個任意字符
[ ]——同樣代表一定有一個在中括號內的字符(非任意字符)。例如[abcd]代表一定有一個字符,可能是a,b,c,d這四個任何一個。
[-]——若有減號在中括號內時,代表在編碼順序內的所有字符。例如[0-9]代表0到9之間的所有數字,因為數字的語系編碼是連續的。
[^]——若中括號內的第一個字符為指數符號(^),那表示原向選擇,例如[^abc]代表一定有一個字符,只要是非a,b,c的其他字符就接受的意思。
15.數據流重定向通過>,2>,<之類的符號將輸出的信息轉到其他文件或設備去。
16.連續命令的執行可通過;&& || 等符號來處理。
17.管道命令的重點是它僅會處理standard output,對於standard error output會予以忽略。管道命令必須要能夠接收來自前一個命令的數據成為standard input 繼續處理才行。
18.重點運用的管道命令,例子比較多的主要有:cut,grep,sort,wc,uniq,tee,tr,col,join,paste,expand,split,xargs等。
Chapter12.正則表達式與文件格式化處理
1.不隨語系改變的特殊符號:
[:alnum:] —— 0-9,A-Z,a-z
[:alpha:] —— A-Z,a-z
[:blank:] —— 代表空格鍵與[Tab]按鍵
[:cntrl:] —— 代表鍵盤上面的控制按鍵,即包括CR,LF,Tab,Del 等。
[:digit:] —— 0-9
[:graph:] —— 除了空格符(空格鍵和[Tab]按鍵)外的其他所有按鍵
[:lower:] —— a-z
[:print:] —— 代表所有可以被打印出來的字符
[:punct:] —— 代表標點符號,即"'?!;:#$
[:upper:] —— A-Z
[:space:] —— 任何會產生空白的字符
[:xdigit:] —— 代表十六進制的數字類型,因此包括0-9,A-F,a-f的數字與字符。
2.grep與基礎正則表達式
#以grep找出內含eth的那行 dzhwen@deng:~$ dmesg | grep 'eth' #要將找到的關鍵字顯色,且加上行號來表示 dzhwen@deng:~$ dmesg | grep -n --color=auto 'eth' #在關鍵字所在行的前兩行與后三行也一起找出來顯示。 dzhwen@deng:~$ dmesg | grep -n -A3 -B2 --color=auto 'eth'
查找加顯示行號:
dzhwen@deng:~$ grep -n 'the' regular_express.txt
反向選擇:
dzhwen@deng:~$ grep -vn 'the' regular_express.txt
忽略大小寫:
dzhwen@deng:~$ grep -in 'the' regular_express.txt
[ ]里面不論有幾個字符,它都只代表某“一個”字符,如查找test或taste
dzhwen@deng:~$ grep -n 't[ae]st' regular_express.txt 8:I can't finish the test. 9:Oh! The soup taste good.
反向選擇,比如不想oo前面不是小寫字母
dzhwen@deng:~$ grep -n '[^a-z]oo' regular_express.txt 3:Football game is not use feet only.
dzhwen@deng:~$ grep -n '[0-9]' regular_express.txt 5:However, this dress is about $ 3183 dollars. 15:You are the best is mean you are the no. 1.
dzhwen@deng:~$ grep -n '[[:digit:]]' regular_express.txt 5:However, this dress is about $ 3183 dollars. 15:You are the best is mean you are the no. 1.
行首與行尾字符:^$
dzhwen@deng:~$ grep -n '^[[:lower:]]' regular_express.txt 2:apple is my favorite food. 4:this dress doesn't fit me. 10:motorcycle is cheap than car. 12:the symbol '*' is represented as start. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go. dzhwen@deng:~$ grep -n '\.$' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food. 3:Football game is not use feet only. 4:this dress doesn't fit me. 10:motorcycle is cheap than car. 11:This window is clear. 12:the symbol '*' is represented as start. 15:You are the best is mean you are the no. 1. 16:The world <Happy> is the same with "glad". 17:I like dog. 18:google is the best tools for search keyword. 20:go! go! Let's go.
#不要空白行和以#開頭的行 dzhwen@deng:~$ grep -v '^$' regular_express.txt | grep -v '^#' "Open Source" is a good mechanism to develop programs. apple is my favorite food. Football game is not use feet only. this dress doesn't fit me. However, this dress is about $ 3183 dollars. GNU is free air not free beer. Her hair is very beauty. I can't finish the test. Oh! The soup taste good. motorcycle is cheap than car. This window is clear. the symbol '*' is represented as start. Oh! My god! The gd software is a library for drafting programs. You are the best is mean you are the no. 1. The world <Happy> is the same with "glad". I like dog. google is the best tools for search keyword. goooooogle yes! go! go! Let's go.
注意: “.* ” 就代表零個或多個任意字符的意思
dzhwen@deng:~$ grep -n 'g.*g' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 14:The gd software is a library for drafting programs. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go.
dzhwen@deng:~$ grep -n 'g*g' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 3:Football game is not use feet only. 9:Oh! The soup taste good. 13:Oh! My god! 14:The gd software is a library for drafting programs. 16:The world <Happy> is the same with "glad". 17:I like dog. 18:google is the best tools for search keyword. 19:goooooogle yes! 20:go! go! Let's go.
限定連續RE字符范圍{}
因為{與}的符號在shell是有特殊意義的,因此,我們必須要使用轉義字符\來讓它失去特殊意義才行。例子:我們要找出g后面接2到5個o,然后再接一個g的字符串。
dzhwen@deng:~$ grep -n 'go\{2,5\}g' regular_express.txt 18:google is the best tools for search keyword.
3.sed工具
d:刪除,將第2-5行刪除

dzhwen@deng:~$ nl /etc/passwd | sed '2,5d' 1 root:x:0:0:root:/root:/bin/bash 6 games:x:5:60:games:/usr/games:/bin/sh 7 man:x:6:12:man:/var/cache/man:/bin/sh 8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh 9 mail:x:8:8:mail:/var/mail:/bin/sh 10 news:x:9:9:news:/var/spool/news:/bin/sh 11 uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh 12 proxy:x:13:13:proxy:/bin:/bin/sh 13 www-data:x:33:33:www-data:/var/www:/bin/sh 14 backup:x:34:34:backup:/var/backups:/bin/sh 15 list:x:38:38:Mailing List Manager:/var/list:/bin/sh 16 irc:x:39:39:ircd:/var/run/ircd:/bin/sh 17 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh 18 nobody:x:65534:65534:nobody:/nonexistent:/bin/sh 19 libuuid:x:100:101::/var/lib/libuuid:/bin/sh 20 syslog:x:101:103::/home/syslog:/bin/false 21 messagebus:x:102:105::/var/run/dbus:/bin/false 22 colord:x:103:108:colord colour management daemon,,,:/var/lib/colord:/bin/false 23 lightdm:x:104:111:Light Display Manager:/var/lib/lightdm:/bin/false 24 whoopsie:x:105:114::/nonexistent:/bin/false 25 avahi-autoipd:x:106:117:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false 26 avahi:x:107:118:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false 27 usbmux:x:108:46:usbmux daemon,,,:/home/usbmux:/bin/false 28 kernoops:x:109:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false 29 pulse:x:110:119:PulseAudio daemon,,,:/var/run/pulse:/bin/false 30 rtkit:x:111:122:RealtimeKit,,,:/proc:/bin/false 31 speech-dispatcher:x:112:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh 32 hplip:x:113:7:HPLIP system user,,,:/var/run/hplip:/bin/false 33 saned:x:114:123::/home/saned:/bin/false 34 dzhwen:x:1000:1000:Deng:/home/dzhwen:/bin/bash 35 guest-SgMGr3:x:115:125:Guest,,,:/tmp/guest-SgMGr3:/bin/bash 36 mysql:x:116:126:MySQL Server,,,:/nonexistent:/bin/false
a:新增。在第2行末尾添加“drink tea?”
dzhwen@deng:~$ nl /etc/passwd | sed '2a drink tea?' 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh drink tea? 3 bin:x:2:2:bin:/bin:/bin/sh 4 sys:x:3:3:sys:/dev:/bin/sh 5 sync:x:4:65534:sync:/bin:/bin/sync
p:打印,也就是將某個選擇的數據打印出來。通常p會與參數 sed -n 一起運行。
dzhwen@deng:~$ nl /etc/passwd | sed -n '5,7p' 5 sync:x:4:65534:sync:/bin:/bin/sync 6 games:x:5:60:games:/usr/games:/bin/sh 7 man:x:6:12:man:/var/cache/man:/bin/sh
c:替換,c的后面可以接字符串,這些字符串可以替換n1,n2之間的行。
dzhwen@deng:~$ nl /etc/passwd | sed '2,5c No 2-5 number' 1 root:x:0:0:root:/root:/bin/bash No 2-5 number 6 games:x:5:60:games:/usr/games:/bin/sh 7 man:x:6:12:man:/var/cache/man:/bin/sh 8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh 9 mail:x:8:8:mail:/var/mail:/bin/sh 10 news:x:9:9:news:/var/spool/news:/bin/sh 11 uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh 12 proxy:x:13:13:proxy:/bin:/bin/sh 13 www-data:x:33:33:www-data:/var/www:/bin/sh 14 backup:x:34:34:backup:/var/backups:/bin/sh 15 list:x:38:38:Mailing List Manager:/var/list:/bin/sh 16 irc:x:39:39:ircd:/var/run/ircd:/bin/sh 17 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh 18 nobody:x:65534:65534:nobody:/nonexistent:/bin/sh 19 libuuid:x:100:101::/var/lib/libuuid:/bin/sh 20 syslog:x:101:103::/home/syslog:/bin/false 21 messagebus:x:102:105::/var/run/dbus:/bin/false 22 colord:x:103:108:colord colour management daemon,,,:/var/lib/colord:/bin/false 23 lightdm:x:104:111:Light Display Manager:/var/lib/lightdm:/bin/false 24 whoopsie:x:105:114::/nonexistent:/bin/false 25 avahi-autoipd:x:106:117:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false 26 avahi:x:107:118:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false 27 usbmux:x:108:46:usbmux daemon,,,:/home/usbmux:/bin/false 28 kernoops:x:109:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false 29 pulse:x:110:119:PulseAudio daemon,,,:/var/run/pulse:/bin/false 30 rtkit:x:111:122:RealtimeKit,,,:/proc:/bin/false 31 speech-dispatcher:x:112:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh 32 hplip:x:113:7:HPLIP system user,,,:/var/run/hplip:/bin/false 33 saned:x:114:123::/home/saned:/bin/false 34 dzhwen:x:1000:1000:Deng:/home/dzhwen:/bin/bash 35 guest-SgMGr3:x:115:125:Guest,,,:/tmp/guest-SgMGr3:/bin/bash 36 mysql:x:116:126:MySQL Server,,,:/nonexistent:/bin/false
s:替換,可以直接進行替換的工作。
sed 's/要被替換的字符串/新的字符串/g'
i:插入,i的后面可以接字符串,而這些字符串會在新的一行出現(目前的上一行)
4.擴展正則表達式
+ —— 意義:重復一個或一個以上的前一個RE字符
dzhwen@deng:~$ egrep -n 'go+d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 13:Oh! My god!
? —— 意義:零個或一個的前一個RE字符
dzhwen@deng:~$ egrep -n 'go?d' regular_express.txt 13:Oh! My god! 14:The gd software is a library for drafting programs.
| —— 意義:用或(or)的方式找出數個字符串。
dzhwen@deng:~$ egrep -n 'gd|good|dog' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 14:The gd software is a library for drafting programs. 17:I like dog.
( ) —— 意義:找出“組”字符串
dzhwen@deng:~$ egrep -n 'g(la|oo)d' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 9:Oh! The soup taste good. 16:The world <Happy> is the same with "glad".
( ) —— 意義:多個重復組的判別
dzhwen@deng:~$ echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C' AxyzxyzxyzxyzC
5.printf可以通過一些特殊符號來將數據進行格式化輸出。
6.awk可以使用“字段”為依據,進行數據的重新整理與輸出。
7.文件的比較中,可利用diff及cmp進行比較,其中diff主要用在純文本文件方面的新舊版本比較。
8.patch命令可以將舊版數據更新到新版(主要由diff創建patch的補丁來源文件)。
Chapter13.學習shell script
1. shell script 程序的組成成分
(1).第一行#!/bin/bash 聲明這個script使用的shell名稱。
(2). 程序內容的說明
(3). 主要環境變量的聲明
(4). 主要程序部分
(5).告知執行結果
2.關於輸入輸出:echo,read(后接 -p 代表后接提示字)
3.利用test命令的測試功能:
dzhwen@deng:~/scripts$ test -e /scripts && echo "exist" || echo "Not exist" Not exist dzhwen@deng:~/scripts$ test -e ~/scripts && echo "exist" || echo "Not exist" exist
4.利用判斷符號[ ]
注意:在中括號[ ]內的每個組件都需要有空格鍵來分隔;在中括號內的變量,最好以雙括號括號起來;在中括號內的常量,最好都以單或雙引號括號起來。
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH read -p "Please input(Y/N) : " yn [ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0 [ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh, interrupt!" && exit 0 echo "I don't know what your choice is" && exit 0
5.shell script 的默認變量
$# : 代表后接的參數“個數”;
$@:代表“$1","$2","$3","$4"之意,每個變量都是獨立的(用雙引號括起來);
$*:代表”$1c$2c$3c$4",其中c為分隔字符,默認為空格鍵。
6.shift:造成參數變量號碼偏移
7.利用 if……then 的條件判斷式
# 多個條件判斷(if ... elif ... else)分多種不同情況執行 if [ 條件判斷式一 ]; then 當條件判斷式一成立時,可以進行的命令工作內容; elif [ 條件判斷式二 ]; then 當條件判斷式二成立時,可以進行的命令工作內容; else 當條件判斷式一與二均不成立時,可以進行的命令工作內容; fi #提示判斷結構的結束
8.利用case...esac 判斷
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo "This program will print your selection !" case $1 in "one") echo "Your choice is ONE" ;; "two") echo "Your choice is TWO" ;; "three") echo "Your choice is THREE" ;; *) echo "Usage $0 {one|two|three}" ;; esac
dzhwen@deng:~/scripts$ sh sh12.sh two This program will print your selection ! Your choice is TWO dzhwen@deng:~/scripts$ sh sh12.sh three This program will print your selection ! Your choice is THREE dzhwen@deng:~/scripts$ sh sh12.sh four This program will print your selection ! Usage sh12.sh {one|two|three}
9.利用function功能
注意function的內置變量的意義。
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH function printit( ){ echo "Your choice is $1" #注意內置變量 } echo "This program will print your selection !" case $1 in "one") printit 1 ;; "two") printit 2 ;; "three") printit 3 ;; *) echo "Usage $0 {one|two|three}" ;; esac
10.循環
while [ condition ] <==中括號內的狀態就是判斷式 do <==do 是循環的開始 程序段落 done <==done 是循環的結束
until [ condition ] do 程序段落 done
for var in con1 con2 con3 ... do 程序段 done
for ( ( 初始值; 限制值; 執行步長 ) ) do 程序段 done
11.shell script 的追蹤與調試
sh [-nvx] script.sh 參數: -n : 不要執行 script,僅查詢語法的問題。 -v : 在執行 script 前,先將 script 的內容輸出到屏幕上; -x : 將使用到的 script 內容顯示到屏幕上,這是很有用的參數。
后面的暫時不寫了,根本就沒有機會用到。。。。。。