linux中管道符「|」的做用node
命令格式:命令A|命令B,即命令1的正確輸出做爲命令B的操做對象(下圖應用別人的圖片)linux
1. 例如: ps aux | grep "test" 在 ps aux中的結果中查找test。shell
2. 例如: find . -name "*.txt" | xargs grep "good" -n --color=auto 把find的結果當成參數傳入到grep中,即在那些文件內部查找good關鍵字。編程
注:本例中xargs將find產生的長串文件列表拆散成多個子串,windows
如「」find /path -type f -print0 | xargs -0 rm數組
2.1 Linux的文件系統緩存
Linux將全部的事物都當作文件,這一點人盡皆知。我想說的是,除了傳統的ext文件系統,Linux在抽象不一樣的資源的時候其實有各類不一樣的文件系統,都是從需求和使用出發,怎麼方便怎麼來,好比proc文件系統就是針對進程的抽象,使得修改對應進程的值就能夠直接改變進程的行爲。再好比,對於遠程ssh登陸的pts設備,Linux有對應的devpts文件系統。安全
2.2 Linux的權限管理bash
Linux的-rwxrwxrwx權限管理也可謂人盡皆知,其實Linux本身也意識到了這樣的權限管理所帶來的一些侷限性。首先rwx的權限管理是基於用戶和組的,而且只是大體的分爲owner|group|other這三類,沒法再做更加細粒度的劃分。有鑑於此,Linux目前默認是有ACL(Access Control List)管理的,所謂ACL就是可以提供更加細粒度的用戶和組管理,好比能夠明確哪一個user能夠有什麼樣的權限。以下示例網絡
1
2
3
4
5
6
7
8
9
|
getfacl abc
# file: abc
# owner: someone
# group: someone
user::rw-
user:johny:r-x
group::r--
mask::r-x
other::r--
|
而SELinux提供了不基於用戶與組的權限管理,SELinux是基於應用程序的,什麼樣的應用程序可使用什麼資源,對於這些資源這個應用程序能幹嗎,這個就是SELinux的管理方式。
2.3 Linux上的Service
Linux上的Service組織得很是清晰,固然也是傳統所致。/etc/init.d/裏面包含了全部的Service啓動腳本,對應的二進制文件在/usr/bin 、 /usr/sbin 、 /usr/local/bin等目錄下,通常而言配置文件在/etc/app_name下,還有一個chkconfig的工具來管理各個runlevel下須要啓動的Service。這樣的約定俗成使得管理員在配置和使用的時候很是方便。Linux標準的Service都會將log記錄到/var/log/messages中,使得系統管理員不須要翻閱各類log,直接在/var/log/messages中就能夠找到絕大部分的log來判斷當前系統是否正常。更甚的,syslogd被rsyslogd替換之後,能夠將/var/log/messages中的內容經過UDP發送到遠端用專業的log分析工具進行分析。咱們須要學習Linux上Service的這些優秀的編程習慣和技巧。
3 磁盤
根據$1中的需求,主要是建立Linux下的LVM,以及一些基本的磁盤操做。
4 網絡
網絡的坑不少,須要把網絡搞通沒個3,4年很難。下面從網絡的基本配置文件着手,簡單理一下網絡方面的內容。網絡最難的方面應該是如何搭建一個合理的高效的局域網或者城域網,這個須要有專業的網絡知識。
4.1 配置文件
/etc/hosts私有IP對應主機名
/etc/resolv.confnameserver DNS的IP
/etc/sysconfig/network其中NETWORKING=要不要有網絡,HOSTNAME=主機名,NETWORKING_IPV6=支持ipv6否
/etc/sysconfig/network-scripts/ifcfg-xxx其中DEVICE=網卡代號,BOOTPROTO=是否使用dhcp,HWADDR,IPADDR,NETMASK,ONBOOT,GATEWAY
4.2 網絡設計到的一些命令
router -n查看路由的命令,特別是要看帶G的,表示gateway,而帶U的表示up。
netstat -anp查看全部啓動的tcp,udp,unix stream的應用程序,以及他們的狀態,具體能夠參考TCP/IP,JavaSocket簡單分析一文。
5 安全
5.1 PAM
PAM整體來說只須要簡單瞭解就行,是一個可插拔的認證模塊。按照個人說法,是開發Linux的極客們搞出來的可複用的一個組件。舉個例子,如今有一個app,想要驗證當前的登陸用戶是否有權限操做某個目錄,那麼在PAM裏面有現成的模塊,app只須要include這個模塊,給出一個配置文件,就能夠了。有一個很是好的關於PAM的視頻教程,請看這裏
5.2 SELinux
關於SELinux也有一個很是好的視頻教程,請看這裏
5.3 防火牆
對於iptables也是隻知其一;不知其二,因此下面只是學習時候的一些摘錄。特別一點,要開啓內核參數net.ipv4.ip_forward=1,在/etc/sysctl.conf文件中,用sysctl -p來保存。所謂ip_forward指的是內核提供的從一個iface到另一個iface的IP包轉發,好比將IP包從192.168.1.10的eth0轉發到10.0.0.123的eth1上。專業的防火牆配置是須要專業技能的。
tcp_wrapper須要libwrap.so的支持,全部凡是ldd出來沒有的bin,都不能用tcp_wrapper
iptables是按照規則進行短路判斷的,即 知足條件1->執行action1->結束
iptables-save來更加清晰的查看
先刪掉所有規則,而後添加,比較簡單。添加的時候,先添加策略,再添加細部規則。通常來說,咱們須要關注的是filter這個表的INPUT與OUTPUT
iptables -A(I) INPUT(OUTPUT,FORWARD) -i(o) iface -p tcp(ump,imp,all) -s (!)source -d dest -j ACCEPT(REJECT,DROP), 還支持的參數 —dport —sport
6 工具
一個好的Linux命令參考網站
6.1 CPU
6.2 Memory
6.3 IO
橫向系統如cgroup,proc,sys文件系統,系統調用的組織,調試系統,Core Dump,信號,內存管理等;
縱向系統是指具體的功能模塊,如USB功能,一個對USB文件的操做要走完內核中的不少個層次,即文件系統層、緩存層、通用塊層、SCSI層、USB層等。Linux通常將這些層次劃分爲3個大的層次,接口層、功能邏輯層和驅動層。
在Linux中能夠控制SysRq的關閉和打開,使用echo "1" > /proc/sys/kernel/sysrq打開該機制。
在Linux中調用該系列命令的方式是「SysRq+命令」,SysRq在大部分鍵盤上通常是Print Screen按鍵的副功能,須要使用Alt鍵調用。
SysRq+b:當即重啓系統
SysRq+c:產生一個系統級的crash dump
SysRq+d:顯示當前使用中的全部鎖
SysRq+e:發送SIGTERM給除init以外的所有進程
除以上以外還有十幾個相似命令
跨進程傳輸數據
數據的產生和數據的監聽不一樣步
數據只要被讀取了就會被刪除,第二次就不會被再次讀取
須要等待超時、永久阻塞、當即返回其中的某些或所有特性
須要運維繫統查看數據流
沒有任何辦法提早判斷要讀的阻塞式的FIFO內是否有數據
常見知識點總結
1.date -s 日期設置
[root@localhost ppp]# date -s 2015-7-5
2015年 07月 05日 星期日 00:00:00 CST
2.date -d 時間的設置
[root@localhost ppp]# date -d 3:45:45
2015年 07月 05日 星期日 03:45:45 CST
3.hwclcok -s 硬件時鐘同步系統時鐘
[root@localhost ppp]# date
2015年 07月 05日 星期日 00:03:28 CST
[root@localhost ppp]# hwclock -s
[root@localhost ppp]# date
2016年 03月 28日 星期一 03:07:49 CST
4.hwclock - w 系統時鐘同步硬件時鐘
[root@localhost ppp]# hwclock -w
[root@localhost ppp]# date
2015年 04月 05日 星期日 00:00:24 CST
5.bash中的引用:
'':強引用
"":弱引用
``:命令引用
6.通配符練習
(1) 顯示/etc目錄下,以非字母開頭,後面跟了一個字母及其它任意長度任意字符的文件或目錄;
[root@localhost /]# ls -d /etc/ [^[:alpha:]][a-z]*
ls: 沒法訪問[^[:alpha:]][a-z]*: 沒有那個文件或目錄
/etc/
(2)複製/etc目錄下,全部以n開頭,以非數字結尾的文件或目錄至/tmp/etc目錄下;
[root@localhost /]# mkdir /tmp/etc
[root@localhost /]# cp -r /etc/n*[^0-9] /tmp/etc
[root@localhost /]# ls -ld /tmp/etc
drwxr-xr-x. 3 root root 4096 4月 5 00:54 /tmp/etc
(3)顯示/usr/share/man目錄下,全部以man開頭,後跟一個數字結尾的文件或目錄
[root@localhost etc]# ls -ld /usr/share/man/man[0-9]
drwxr-xr-x. 2 root root 69632 3月 28 2016 /usr/share/man/man1
drwxr-xr-x. 2 root root 20480 3月 28 2016 /usr/share/man/man2
drwxr-xr-x. 2 root root 495616 3月 28 2016 /usr/share/man/man3
drwxr-xr-x. 2 root root 4096 3月 28 2016 /usr/share/man/man4
drwxr-xr-x. 2 root root 20480 3月 28 2016 /usr/share/man/man5
drwxr-xr-x. 2 root root 4096 3月 28 2016 /usr/share/man/man6
drwxr-xr-x. 2 root root 12288 3月 28 2016 /usr/share/man/man7
drwxr-xr-x. 2 root root 36864 3月 28 2016 /usr/share/man/man8
drwxr-xr-x. 2 root root 4096 9月 23 2011 /usr/share/man/man9
(4)複製/etc目錄下,全部以p,m,r開頭的,且以.conf結尾的文件或目錄至/tmp/conf.d目錄下;
[root@localhost etc]# mkdir /tmp/conf.d
[root@localhost etc]# cp -r /etc/[pmr]*.conf /tmp/conf.d
[root@localhost etc]# ls -ld /tmp/conf.d
drwxr-xr-x. 2 root root 4096 4月 5 01:02 /tmp/conf.d
7.程序的數據流有三個:
輸入數據流: <--,標準輸入(stdin),鍵盤; stdin=0
輸出數據流:-->,標準輸出(stdout), 顯示器; stdin=1
錯誤數據流:-->,錯誤輸出(stderr),顯示器; stdin=2
8.輸出重定向知識點:
COMMAND > /PATH/TO/SOMEFILE
覆蓋重定向:覆蓋目標文件中的原有內容;
例如:touch liwenming
cat /etc/fstab > liwenming
COMMAND >> /PATH/TO/SOMEFILE
追加劇定向:追加新產生的內容至目標文件尾部;
cat /etc/fstab >> liwenming
9.管道知識點總結練習:
(1)把/etc/passwd文件最後三行信息中全部小寫字符改成大寫後輸出;
[root@localhost /]# tail -n 3 /etc/passwd | tr "a-z" "A-Z"
SSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGIN
TCPDUMP:X:72:72::/:/SBIN/NOLOGIN
LWM:X:500:500:LWM:/HOME/LWM:/BIN/BASH
(2)取出/etc/fstab的第6行;
[root@localhost /]# head /etc/fstab | tail -1
NI HOA MA
(3)取出/etc目錄下全部以p開頭的文件或目錄,只顯示前5個;
[root@localhost /]# ls -d /etc/p* | head -n 5
/etc/pam.d
/etc/pango
/etc/passwd
/etc/passwd-
/etc/pbm2ppa.conf
(4)tee命令,指的是雙向輸出,輸出屏幕而後保存到文件中一份。
[root@localhost /]# echo lilili | tee li
lilili
(5)爲用戶提供默認配置的配置文件
/etc/login.defs, /etc/default/useradd
(6)把用戶添加到組中,把用戶移除組中[root@localhost /]# useradd ming
[root@localhost /]# gpasswd -a ming li
Adding user ming to group li
[root@localhost /]# gpasswd -d ming li
Removing user ming from group li
(7)建立用戶gentoo,UID爲5000,基於組爲gentoo,附加組爲distro和peguin;
root@localhost /]# gpasswd -a gentoo distor
gpasswd: group 'distor' does not exist in /etc/group
[root@localhost /]# gpasswd -a gentoo peguin
Adding user gentoo to group peguin
[root@localhost /]# gpasswd -a gentoo distor
gpasswd: group 'distor' does not exist in /etc/group
[root@localhost /]# gpasswd -a gentoo distro
Adding user gentoo to group distro
[root@localhost /]#
(8)建立用戶fedora,基於註釋信息爲"Fedora Core",默認shell爲/bin/tcsh;
useradd -s /bin/tcsh fedora -c "Fedora Core"
查看結果 cat /etc/passwd
[root@localhost etc]#useradd gentoo
[root@localhost etc]# useradd -g gentoo -G distro peguin
[root@localhost etc]# cat /etc/group
distro:x:1006:gentoo,peguin
(9)邏輯運算知識點總結
邏輯運算:
運算數:true, false
COMMAND:
0: TRUE
1-255: FALSE
與:
true && true = true
true && false = false
第一個操做數爲true,其結果將取決於第二個操做數;
false && true = false
false && false = false
第一個操做數爲False,其結果至此可判定,爲false;
或:
true || true = true
true || false = true
第一個操做數爲true,其結果至此可判定,爲true;
false || true = true
false || false = false
第一個操做數爲false,其結果將取決於第二個操做數;
非:
! true = false
! false = true
(10)特殊變量:
$0:腳本文件路徑自己;
$#;腳本參數的個數;
$*:全部參數
$@:全部參數
(10)
內核編譯過程:
步驟:
~]# tar xf linux-3.10.67.tar.xz -C /usr/src 將其內核源碼壓縮包進行解壓,而後指明解壓到的目錄。
~]# cd /usr/src 而後進入這個目錄
~]# ln -s linux-3.10.67 linux 將其解壓的文件作一個連接,連接到linux
~]# cd linux 進入linux目錄
~]# make menuconfig 進行配置內核選項
~]# make [-j #] 編譯內核,可以使用-j指定編譯線程數量,例如:make -j 4
~]# make modules_install 安裝內核模塊
~]# make install 進行內核的安裝