1、Linux 安裝
準備工作
Vmware
RHEL 5.5
Vmware基本配置
Linux安裝及一般配置
磁盤的分區與目錄掛載
硬盤零磁道位置的分區表記錄爲64B,因此一共可以創建4個主分區
實例:對30G硬盤,1G內存進行分區
/ 10G 強制爲主分區
/home 5G
/usr 5G強制爲主分區
/boot 500M
/var 8G
/swap 使用全部可用空間 交換空間的大小一般是物理內存的兩倍
最後有一個100M多的空閒空間不需要理睬
2、Linux介紹
Unix
GNU – GNU is Not Unix
GCC
GPL – General Public License,通用公共許可證
Free software – 自由軟件
Linux
Linux主要版本
Ubuntu – 用戶桌面
RedHat – 使用最廣,性能穩定,商業版,服務器
CentOS – RedHat的克隆版,免費
Linux的優點
性能穩定
較高的安全性和Bug的快速修復
支持多用戶多任務
完善的用戶和羣組策略
資源耗費低
適合嵌入式應用
免費或費用低廉
Linux的缺點
專業軟件支持不夠
廠商支持度不夠
標準化不足
使用不方便
3、Linux 桌面系統
圖形界面登錄
常用桌面系統 – GNOME、KDE(模仿windows桌面)
GNOME桌面系統演示
Nautilus使用 – 文件資源管理器
KDE桌面系統演示
Konqueror的使用
遠程登錄 - 一般將Linux作爲服務器用
SSH – Secure Shell, 安全外殼協議
應用層和傳輸層上的協議
支持多種系統
加密且壓縮傳輸
SecureCRT – 收費 – 破解,不安全
選中文本 -> 右擊
會話選項 -> 外觀
腳本 -> 開始錄製腳本
右擊 -> 克隆會話
右擊 -> 鎖定會話
Xshell – 免費 – 推薦使用
外觀
中擊 - 複製
文件屬性 -> 終端 -> 編碼 - UTF-8,可支持中文
4、Linux 文件和目錄管理
文件系統架構
Linux文件系統具有層級性
1)文件或者目錄起始於根目錄“/”成爲樹狀結構
2)最頂層由/開始
文件和目錄名區分大小寫
區分大小寫,而windows不區分大小寫
路徑通過“/”分隔開
“..”表示上層目錄
“.”表示當前目錄
隱藏目錄或者文件名以“.”開始
ls –l
ls –la
重要目錄說明
home目錄
1)root用戶的home目錄是/root
2)普通用戶的目錄是/home/user
3)su – xiang
bin目錄
1)常用的可執行文件
2)/bin、/usr/bin、/sbin等
3)/sbin 存放的是隻有root用戶權限執行的指令
外部設備mountpoint
1)/media、/mnt
2)當檢測到設備接入會自動產生掛載點
/etc,系統的配置文件 - 只有root用戶可以修改
/tmp,臨時文件
/boot,系統內核和開機必要文件
/dev,系統所有的設備文件
/usr
1)unix system resource
2)保存程序的相關文件
/lost+found
1)每個分區都會自動創建
/var、/srv
- /var存放數據庫文件,程序執行過程中所使用的數據
/proc 虛擬文件系統,數據在內存中,如:系統內核、程序運行進程信息、網絡狀態
/lib、/usr/lib、/usr/local/lib - 存放一些可複用的函數或庫
目錄以及文件的命名規則
不超過255個字符
區分大小寫
1)file、File、fILE表示不同的文件
除了/外,所有的字符都合法
1)避免文件名首字符使用+-.等
2)避免使用空格、製表符和@#$%[]()等
最好使用有意義的名稱來命名
ls指令操作
ls,ls[options][file_or_dirs]
1)ls,列出當前目錄內容
2)ls / ,顯示根目錄的內容
3)ls –a,顯示隱藏文件
4)ls –l,顯示詳細內容
5)ls –ld,顯示目錄本身的屬性
ls –l 相當於 ll
ls –a
ls –la
ls –ld
ls -lh
文件和目錄操作
相對路徑和絕對路徑
1)絕對路徑必須是/開頭
2)相對路徑一般比較短
切換目錄
1)cd、pwd
2)cd ..,cd ~,cd –
3)su – 表示切換到root
複製文件和目錄,cp
1)cp [options] file destination –p的參數不改變時間戳
2)cp [options] file1 file2 destination
3)cp -r dir1 dir2,複製目錄
移動和重命名文件和目錄,mv
1)移動操作類似於cp
刪除文件和目錄,rm
1)rm [options] filenames
2)-i,交互式
3)-r,遞歸刪除
4)-f,force
新建文件和目錄,touch,mkdir
1)cd、pwd
2)cd ..,cd ~,cd -
確定文件的格式
1)打開文件前確定格式使用不用的程序打開
2)file [options] filenames
cat – 打開一些小文件
- cat [options] filenames
- cat –b test.txt 顯示帶行號的文件內容
分頁查看文本文件,less – 打開一些內容比較多的文本文件(大文件)
1)less [options] [filename]
2)使用pgUp、pgDown翻頁
3)g 到最頂端 G 到最低端
4)/search 進行搜索 n N
5)q
5、Linux用戶、羣組和權限
Linux安全性模型
Linux使用User和Group控制使用者對文件的存取權限
用戶使用賬號和口令登錄Linux
每個文件都有owner,並且owner屬於某個Group
每個程序都有owner和Group
用戶概述
每個用戶都有一個唯一的User ID
User的信息存儲在/etc/passwd中
1)存儲用戶名和home目錄等信息
如:less /etc/passwd
xiang:x:500:500:xiang.yu:/home/xiang:/bin/bash
x意味着要有密碼纔可以登錄
第一個500表示UID
第二個500表示GID
2)/etc/shadow – 存儲當前用戶的密碼
如:less /etc/shadow
root:$1$H7TmDsKo$O8fYNYKC7YOpLZEcPCg4u0:16890:0:99999:7:::
採用MD5的加密算法 – 單向的哈希算法
每個User都有一個home目錄
User未經授權將禁止讀寫或執行其他User的文件
root用戶解讀
1)超級管理員賬號,具有至高無上的權限
2)一般不要隨便用root登錄並操作系統
用戶羣組概述
每個User都屬於一個Group,具有唯一的標識符gid
Group信息存儲於/etc/group中
1)gid、成員等
2)/etc/gshadow 保存密碼
系統會爲每個User關聯一個和User同名的Group
1)每個User至少存在於自己同名的Group中
2)User也可以加入其他的Group
在同一個Group中的成員可以共享其他成員的文件
權限的種類
只讀權限,用r表示(read)
可以讀取文件或者列出目錄的內容(ls)
可寫權限,用w表示(write)
可以寫、刪除文件或者目錄
可執行權限,用x表示(execute)
1)可以執行可執行文件
2)可以進入目錄並使用cd切換進入目錄
沒有任何權限,用-表示
注:當給某個用戶授予讀權限時,不要忘記授予執行權限
Linux文件和目錄權限解讀
d rwx-w----
1)目錄
2)owner權限爲可讀寫可執行
3)group權限爲可寫
4)others沒有任何權限
- rwxrwxr-x
1)文件
2)owner權限爲可讀寫可執行
3)group權限爲可讀寫可執行
4)others權限爲可讀可執行
Linux權限驗證流程
# whoami 顯示當前用戶
如何設置Linux文件和目錄的權限
a) 字符表示法
1)chmod [-R] mode file
2)模式類別
chmod a= perm 去除所有權限,不影響子目錄
chmod –R a= perm 影響子目錄
b) 數字表示法
1)使用一組三位數字來表示
2)第一組代表owner的權限
3)第二組代表group的權限
4)第三組代表others的權限
c) 如何使用Nautilus或Konqueror設置權限
6、Linux 用戶和羣組進階學習
用戶的主要羣組和次要羣組
1)主要羣組
每個文件必須有一個組所有者,因此必須有一個與每個用戶相關的默認組,這個默認組成爲新建文件的組所有者,被稱作用戶的主要羣組。用戶的主要羣組在passwd文件中的第四個字段中定義。
2)次要羣組
除了主要羣組,用戶也可以根據需要再隸屬於其他羣組,這些組被稱爲次要羣組,在group文件中的第四個字段中定義
# groups 查看當前用戶的所有羣組,第一個是主要羣組
用戶的管理
1)useradd [-u UID] [-g 初始羣組] [-G 次要羣組] [-mM] [-c 說明] [-d 家目錄] [-s shell]
-u:制定一個特殊的UID給該賬號
-g:指定一個主要羣組的名稱,會修改passwd文件
-G:指定次要羣組的名稱,會修改group文件
-M:強制不要創建用戶家目錄,系統賬號默認
-m:強制建立用戶家目錄,一般賬號默認
-c:passwd文件的第五個字段的說明文字
-d:指定用戶的家目錄位置,不要使用默認的值
-s:指定默認的shell,如果沒有指定則默認是/bin/bash
2)usermod [-cdegGlsuLU] username
-c:該賬號的說明文字
-d:賬號的家目錄
-e:指定用戶帳號禁用的日期,格式YY-MM-DD
-G:修改次要羣組的名稱,會修改group文件
-g:修改主要羣組名稱
-a:與-G合用,可增加次要羣組
-l:將當前賬號的名稱重命名爲指定的名稱
-u:修改UID
-L:暫時將用戶的密碼凍結無法登錄
-U:解凍賬號,其實是刪除shadow的!字符
實例:給用戶xiang增加次要羣組user1
# useradd user1
# usermod –aG user1 xiang
3)userdel [-r] username
-r:連同用戶的家目錄一起刪除
4)passwd,修改密碼
用戶信息的檢查
1)finger [-s] username:查閱用戶相關的信息
-s:僅僅列出用戶的賬號、全名、登錄時間等
2)id,可以查閱某人或者自己相關的UID、GID信息
3)whoami
4)who&w
5)users
6)groups
用戶羣組的管理
1)groupadd [-g gid] [-r] 組名
-g:後面接特定的GID,用來指定GID,從500開始
-r:建立系統羣組,小於500
2)groupmod [-g gid] [-n group_name] 羣組名
-g:修改既有的GID數字
-n:修改既有的組名
3)groupdel [groupname]
刪除特定的羣組
默認權限的控制
1)內核級別,文件的默認權限是666
2)內核級別,目錄的默認權限是777
3)通過umask來阻止一些權限,從而產生最終的權限
4)非管理賬號的umask爲0002
5)root的umask爲0022
6)umask作用原理
在root用戶下,新建文件後默認權限是644
在root用戶下,新建目錄後默認權限是755
# umask 002 //可以進行修改
7)使用減法計算是錯誤的,應該理解爲遮蓋
7、文件的壓縮與打包
7-1關於文件壓縮和打包
1)文件壓縮
通過壓縮算法將文件的體積縮小,同時會將多個文件合併至一起方便交換、傳輸。
2)文件打包
將多個文件或者整個目錄合併成一個文件,用來進行文件的備份、分發、傳輸等。
3)Linux支持的壓縮格式
1)*.Z ,compress程序壓縮文件
2)*.gz ,gzip程序壓縮文件
3)*.bz2,bzip2程序壓縮文件
4)*.tar,tar程序打包文件,並未壓縮
5)*.tar.gz,tar打包的檔案,使用gzip壓縮
6)*.tar.bz2,tar打包的文件,使用bzip2壓縮
Linux文件壓縮指令
1)gzip [-cdtv#] 文件名稱
1)擴展名爲*.gz
2)-c:將壓縮的數據輸出到屏幕上
3)-d:解壓縮的參數
4)-t:進行文件的一致性校驗看是否損壞
5)-v:顯示和原文件相比的壓縮比
6)-#:壓縮等級,-1最快,-9最慢,默認是-6
實例:
gzip –c list >list.gz 進行重定向,會保留源文件,默認使用gzip壓縮時會刪除源文件
gzip –v1 list
2)bzip2 [-cdkzv#] 文件名稱
1)擴展名爲*.bz2
2)-c:將壓縮的數據輸出到屏幕上
3)-d:解壓縮的參數,該參數代表執行解壓縮操作
4)-k:保留原文件並不刪除原始文件
5)-z:壓縮的參數,該參數代表是執行壓縮操作
6)-v:顯示和原文件對比的壓縮比
7)-#:壓縮等級,-1最快,-9最慢,默認是-6
Linux文件打包指令
1)tar [-jcv] –f finaname.tar.bz2 待壓縮的檔案或者目錄名
將某個文件或者目錄打包並使用bzip2壓縮成一個文件
2)tar [-jxv] –f filename.tar.bz2 –C 解壓縮的目錄
將壓縮文件解壓縮至特定的目錄
3)參數解釋
1)-c:建立打包檔案
2)-t:查看打包的文件都有哪些文件名
3)-x:解壓縮或者解打包文件,和-C搭配使用解壓縮至特定目錄
4)-j:通過bz2支持進行壓縮或者解壓縮
5)-z:使用gzip進行壓縮或者解壓縮
6)-v:將正在處理的文件名顯示出來
7)-f:緊跟要被處理的文件名,建議單獨寫一個選項
實例:
# tar –jcvf test.tar.bz2 test
# tar –jxvf test.tar.bz2 –C dir
# tar –zcvf test.tar.gz test
# tar –zxvf test.tar.gz –C dir
8、Linux 軟件的安裝
8-1 如何通過源碼安裝
什麼是源碼包:
附帶有程序的源代碼、configure文件、說明文檔的安裝包
一般先以tar打包,再以壓縮軟件壓縮,如tar.gz或 tar.bz2
需要自定義參數進行編譯安裝
使用wget進行下載,支持多線程,斷點
如:wget http://~
configure – 實際上是shell腳本
自定義參數
配置安裝環境,必要性檢查
生成makefile文件
make&install
編譯生成二進制文件
執行安裝
使用源碼包進行安裝的過程
- 獲取源碼安裝包,如去官網下載
- 解壓縮,閱讀install或readme文件,獲取安裝說明
- 根據安裝說明安裝好該軟件依賴的其他軟件
- 建立makefile文件(通過configure檢測安裝環境,定義必要的參數)
- 根據生成的makefile文件,執行make指令進行編譯操作
- 根據makefile中要install的內容,將上步驟中編譯好的二進制文件安裝到系統中
常用指令:
1)./configure –help,查看參數信息,建立makefile文件
2)make clean,讀取makefile中關於clean的內容執行clean操作(非必需)
3)make,根據makefile中的設置執行編譯操作
4)make install,將編譯的二進制文件安裝到系統中
實例:memcached和libevent兩個有依賴的包進行演示
# tar -zxvf *.tar.gz
# ./configure --prefix=/root/local/libevent //來指定安裝目錄,默認是/usr/local下
# make
# make install
# tar –zxvf *.tar.gz
# ./configure --prefix=/root/local/memcached --with-libevent=/root/local/libevent //依賴包
# make
# make install
指定安裝目錄的好處是如果要安裝出錯或重裝,直接刪除
8-2 RPM、YUM簡介
RPM
- RedHat Package Manager的簡稱,RedHat包管理器
- 以數據庫的記錄方式將軟件安裝到Linux
- 軟件包事先編譯好並且打包成RPM機制的文件,類似於Windows的安裝程序
- 軟件信息記錄在本地數據庫,方便查詢、升級、卸載
- 不允許自定義參數和設置,限制較多
SRPM
- Source RPM,附帶源代碼的RPM 包,擴展名以src.rpm命名
- 不可以直接安裝,需要通過編譯後再安裝
- 可以修改參數文件自定義配置項
- 和RPM比較類似
YUM
- Yellow dog Update, Modified的簡稱,基於RPM包管理
- 能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟件包,無需繁瑣地一次次下載、安裝
- 使用簡單、方便
8-3 RPM的使用
默認安裝路徑
1)/etc : 配置文件所在目錄,如/etc/my.cnf、/etc/crontab等
2)/usr/bin : 一些可執行文件
3)/usr/lib : 程序使用的函數庫(連接庫),.so像windows中的C:\Windows\System32
4)/usr/share/doc : 軟件使用手冊與說明
5)/usr/share/man : man page文件
RPM安裝
- rpm [-ivh] rpm1 rpm2 : 安裝rpm1/rpm2並顯示進度和詳情
- --nodeps : 忽略依賴問題執意安裝
- --replacefiles : 對於已經安裝過的某個文件覆蓋安裝
- --replacepkgs : 已經安裝過的軟件重新安裝
- --force : --replacefiles 和 –replacepkgs
- --test : 測試軟件能否被正確安裝,rpm –ivh *** --test
- --justdb : RPM數據庫損壞或者產生錯誤時更新數據庫信息
- --nosignature : 忽略數字簽名的檢查
- --prefix : 改變軟件的默認安裝路徑
- --noscripts : 禁止RPM執行一些後置指令,如一些初始化的指令
實例:
http://www.rpmfind.net/中,使用wget
在安裝光盤中,使用cp
# rpm -ivh python-*.rpm
RPM升級
1)–Uvh : 如果軟件安裝過則更新,若沒安裝過直接安裝
2)-Fvh : 只有該軟件安裝過纔會升級,否則不予升級
實例:
# rpm –qa python 查看當前軟件的版本
# rpm –Uvh python-*.rpm 升級
RPM查詢
1)-q : 只查詢軟件是否安裝
2)-qa : 列出本機安裝的所有的軟件名稱,可以通過 | grep來過濾
3)-qi : 列出軟件的詳細信息,如開發商、版本、說明等
4)-ql : 列出該軟件所有的文件、所在目錄完整名(list)
5)-qc : 列出該軟件所有的配置文件
6)-qR : 列出該軟件依賴的其他軟件的文件
7)-qf : 查詢某個文件屬於哪個軟件所有
8)--noscripts:禁止RPM執行一些後置指令,如一些初始化的指令
實例:
# rpm –qa python
RPM驗證
1)-V : 查詢軟件所有被修改過的文件
2)-Va : 不接文件名,列出本機所有可能被修改過的程序文件
3)-Vp : 接文件名,列出該軟件中可能被修改的文件
RPM卸載與數據庫重建
- 注意要從上往下依次卸載,先卸載不被任何其他軟件依賴的軟件
- -e : 卸載軟件
- --rebuilddb 重建RPM數據庫
8-4 YUM的使用
YUM的安裝:執行下面腳本
#!/bin/bash
rpm -qa|grep yum|xargs rpm -e --nodeps
wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-3.2.22-40.el5.centos.noarch.rpm
wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-4.el5.i386.rpm
rpm -ivh yum-*
cd /etc/yum.repos.d/
mv rhel-debuginfo.repo rhel-debuginfo.repo.bakup
mv rhel-source.repo rhel-source.repo.bakup
wget http://www.linuxidc.com/files/2011/05/06/CentOS-Base.repo
yum makecache
查詢,yum [list|info|search|provides|whatprovides] 參數
- search : 查詢某個程序的名稱或者是描述 ( yum search mysql)
- list : 列出目前yum所管理的所有軟件以及版本 (rpm -qa)
- info : 類似list,查詢軟件的功能、版本說明 (rpm -qai)
- provides : 通過文件查詢所屬軟件 (rpm -qf)
實例:
yum list >list 新創建一個,覆蓋
yum list >>list 將內容追加到list後面,如果沒有則新建
安裝、升級,yum [install | update] 程序名稱
- install : 安裝軟件
- update : 升級軟件,不指定名稱則升級整個系統
卸載,yum [remove] 程序名稱
- remove : 卸載
yum的配置
- /etc/yum.repos.d/CentOS-Base.repo
- yum clean [package | headers | all]
- /var/cache/yum
9、vi編輯器的使用
9-1 vi vim
9-2 vi的三種模式
- 命令模式
- 插入模式,通過aio進入
- 擴展模式,通過:進入
9-3 移動光標
- hjkl -> 左下上右
- w下一個字符,b上一個字符
- (上一個句子,)下一個句子,{上一個段落,}下一個段落
9-4 命令模式下修改、複製、刪除等操作
9-5 撤銷操作
a)u,撤銷最近一次的修改,undo
b)ctrl – r,取消最後一次的撤銷,redo
c)U,撤銷所有修改
9-6 查找操作
a)/text, 向後搜索
b)?text,向前搜索
c)n,搜索下一個同樣的內容
d)N,搜索上一個同樣的內容
9-7 粘貼操作
a)用p粘貼複製、修改或者刪除的數據
b)對於行,p粘貼在行上,P粘貼在行下
c)對於字符,p粘貼在字符右側,P粘貼在字符左側
9-8 命令模式下的一些技巧
a)dtc,刪除從光標到c之間的所有字符
b)rc,將光標下的字符替換爲c
c)dw,刪除遊標處所在的字符
d)5dd,刪除5行數據
e)5yy,複製5行數據
f)5x,刪除5個字符
g)R,進入替換狀態,Esc退出
9-9 保存、退出,進入擴展模式
a):w,保存
b):q,退出
c):wq,保存並退出
d):w!,強制保存
e):q!,強制退出
f):wq!,強制保存退出
9-10 文件內定位
1)G,跳轉到文件最後一行
2)1G,跳轉到文件第一行
3)ctrl d,往下滾動半屏
4)ctrl u,往下滾動半屏
9-11 屏幕定位相關
1)H,跳轉到本屏顯示的第一行
2)M,跳轉到本屏顯示的中間一行
3)L,跳轉到本屏顯示的最後一行
4)z Enter,使當前的行成爲屏幕顯示的第一行
5)z -,使當前行成爲屏幕的最後一行
9-12 查找並批量替換 – 通過sed來查找
實例:
:s/i/- 將本行中i替換爲-
:s/i/-/g 將本行中所有的i替換爲-
:1,10s/i/-/g 將1到10行中的所有的i替換爲-
:1,$s/i/-/g 將文件中所有的i替換爲-
9-13 讀取和保存
實例:
:r test.txt 將test.txt的內容讀入到當前文件
:1,3 w newfile.txt 將1-3行的內容寫入到newfile.txt中
:1,$ w newfile.txt 將整個文件寫入到newfile.txt中
:1,3 w >>oldfile.txt 將1-3行數據追加到oldfile.txt中
9-14 設置
1):set,顯示常用的配置選項
2):set all,顯示所有的配置選項
3):set number,設置行號
10、bash shell 的學習
10-1 bash shell 的概述
Bash是Bourne Again Shell的簡稱,是從Unix系統中的sh發展而來,是用戶和Linux內核交互的工具,用戶通過bash操作內核完成系統的使用和管理
Shell的種類
/bin/sh – 已經被/bin/bash替代
/bin/bash – 默認的shell
/bin/ksh – 源自貝爾實驗室,兼容bash
/bin/tcsh – 整合C shell,功能更爲強大
/bin/csh – 已經被tcsh取代
/bin/zsh – 源自ksh功能更爲強大
10-2 bash shell 的配置
變量概述
變量是代表一些值得符號:
可以通過變量來設置shell或者其他程序
變量存在於內存中
Linux有自定義變量(local)和環境變量(environment)
自定義變量和環境變量作用範圍不同
可以使用以下指令查看所有變量:
set可以查看所有變量
env只能查看環境變量
unset刪除變量
bash shell有以下幾種設置方式:
通過自定義變量設置
- VARIABLE=value來設置
- echo $VARIABLE獲取變量值
- 變量名不能以數字或特殊字符開頭
實例:
# mysql=/root/dirs/mysql/bin
# echo $mysql
# cd $mysql
常見的變量
1)HISTFILESIZE: 記錄歷史指令保存的最大值
2)COLUMNS: 終端窗口顯示的寬度
3)LINES: 終端窗口顯示的高度
4)PS1: 設置提示符號前面的內容樣式(\d, \h, \t, \u, \w, \!, \$, \l, \#等)
實例:
# set |grep PS1
# PS1=‘[\u@\h \w \t]\$’
通過別名設置
# type ll
# alias cls=’clear’
# alias //查看所有別名
# alias cls //查看別名值
# type –a cls
# unalias cls //刪除別名定義
通過set指令設置
set自身查看所有變量值
設置shell內部的屬性值(set –o noclobber, set –o vi)
通過環境變量設置
- 自定義變量只能在當前的shell環境中有效
- 環境變量會在整個主機下的shell環境中生效
- 使用$或export [variable name]來設置
常用變量介紹:
HOME:指向當前用戶的家目錄
LANG:應用程序使用何種語言顯示界面
PWD:指向用戶當前的工作目錄路徑
PATH變量:
系統預設的環境變量
執行一些沒有指定路徑的指令時會去該路徑中找
PATH=$PATH.: 將隱藏路徑設置到PATH中,會帶來安全性問題
可以使用which指令來找到某個指令所在的位置
10-3 shell startup scripts的原理和功能
概述
用戶登錄或其他非登錄動作時會自動執行的一些shell腳本:
- 建立自定義變量或者執行set指令設置shell
- 建立環境變量,設置其他程序
- 使用alias,簡化後續的操作
- 登錄的時候執行哪些程序
- 分爲login和non-login腳本
login shell:
- 通過完整的登錄流程時運行的shell
- 首先會讀取/etc/profile(PATH/USER/HOSTNAME/HISTSIZE等)
- 讀取/etc/profile.d/*.sh(顏色、語言、指令別名等)
- ~/.bash_profile、~/.bash_login、~/profile(只依次讀取其中一個)
- ~/.bash_rc、/etc/bashrc
- source指令加載腳本的變更
non-login shell: - 即在終端中輸入bash時
- 不需要登錄即可運行的shell,如su和原bash下的新bash動作
- ~.bash_rc、/etc/bashrc
- 讀取/etc/profile.d/*.sh (顏色、語言、指令別名等)
~/.bash_logout:
- 在註銷用戶時會運行該腳本
- 可以執行備份、緩存和臨時文件清理等任務
10-4 數據流重定向和管道命令
標準輸入輸出和錯誤輸出概述
概念:
stdin是指令數據的輸入,代碼爲0,使用<或者<<,默認是鍵盤
stdout是指令執行成功返回的結果,代碼爲1,使用>或者>>,默認由屏幕顯示
stderr是指令執行失敗返回的錯誤信息,代碼爲2,使用2>或2>>,默認是屏幕
實例:
# ls -al /dev/std*
數據流重定向的使用
- <: 指定輸入的數據媒介來源
- 1>: 將正確的內容覆蓋輸出到指定的媒介
- 1>>: 將正確的內容追加到指定的媒介
- 2>: 將錯誤信息覆蓋輸出到指定的媒介
- 2>>: 將錯誤信息追加到輸出指定的媒介
實例:
# find /root ins 1>success 2>failed
# find /root ins >all 或者 # find /root ins &>all 其中&就是表示0、1、2
# tr ‘a-z’ ‘A-Z’ <hello.c //將hello.c的小寫轉換爲大寫
多個指令執行的判斷方法
實例:
# mkdir test&&cd test&&touch conf.txt //前者執行成功纔會執行後者
# mkdir test||mkdir test1 //將第一個執行失敗,纔會去執行第二個,若第一個執行成功,不會執行第二個
管道命令概述
- 命令通過管道符|連接
- 能夠接受標準輸入(stdin),如tail/more/grep等
- 能夠接受來自前一個指令的正確的數據作爲stdin進行處理
實例:
# ls –la |more //通過翻頁的形式
# ls –la |more |grep hostname
grep指令,grep [-cinv] ‘key’ filename,支持正則
1)-c, 計算字符出現的個數
2)-i, 忽略大小寫進行查找
3)-n, 輸出行號
4)-v, 顯示沒有該字符的行
實例:
# grep –in ‘[a-z]the’ test.txt //顯示行號並忽略大小寫顯示‘the’
# grep –ic ‘the’ test.txt //統計並忽略大小寫‘the’出現的次數
# grep –icv ‘the’ test.txt //統計出‘the’沒有出現的行
# grep –in –-color=auto ‘the’ content.txt //顯示‘the’的行號,標紅,忽略大小寫
# grep –in –-color=auto ‘the’ content.txt |grep –-color=auto take //繼續過濾
sort指令,sort [-fbknrtu] filename
1)-f, 忽略大小寫
2)-b, 忽略最前面的空格
3)-m, 以月份英文名字排序
4)-n, 使用數字排序
5)-r, 逆向排序
6)-t, 分隔符,默認是tab分割
7)-k, 以第幾列來排序
實例:
# cd /root/usr/bin
# ls –l
# ls –l |sort –t ‘ ’ –k 5 –n //按照第五列以空格分開從小到大排序
wc指令,wc[-lwm] filename,統計功能
1)-i, 統計行
2)-w, 統計詞
3)-m, 統計字符
實例:
# cat content.txt |wc –l
# cat content.txt |wc –w
# cat content.txt |wc –m
除此之外還有很多管道命令:tr cut join paste等