##Linux基礎篇
前言:
“對未來最大的慷慨 就是把一切獻給現在”
——阿爾貝-加繆
很慶幸我依然擁有着想象的能力 只是單單想象是不夠的 人往往都是不知足的 而且盲目樂觀 所以想象中的未來 大都比現在的正在前行的自己所能達到的那個目的地更加美好 可我的想象是那麼動人 讓我怎麼捨得不向之奔跑 這種結局與目標之前的差距 大概只有按着加繆的這句話 才能使其縮小
偶爾也會迷茫 有朋友告訴我 如果有一天你發現自己不再迷茫 那說明你成功了 起碼正在過着令自己滿意的生活 也許未來的不可知 是我們前進的原動力 寫在這裏 共勉
一、目錄結構
#linux一切皆文件的設計思想 /bin: #bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放着最經常使用的命令。 /boot: #這裏存放的是啓動 Linux 時使用的一些核心文件,包括一些連接文件以及鏡像文件。 /dev: #該目錄下存放的是 Linux 的外部設備,在 Linux 中訪問設備的方式和訪問文件的方式是相同的。 /etc:#這個目錄用來存放所有的系統管理所需要的配置文件 /home:#用戶的主目錄,在 Linux 中,每個用戶都有一個自己的目錄,一般該目錄名是以用戶的賬號命名的,如上圖中的 alice、bob 和 eve。 /lib:#這個目錄裏存放着系統最基本的動態連接共享庫,其作用類似於 Windows 裏的 DLL 文件。幾乎所有的應用程序都需要用到這些共享庫。 /lost+found:#這個目錄一般情況下是空的,當系統非法關機後,這裏就存放了一些文件。 /media:linux #系統會自動識別一些設備,例如U盤、光驅等等,當識別後,Linux 會把識別的設備掛載到這個目錄下。 /mnt:#系統提供該目錄是爲了讓用戶臨時掛載別的文件系統的,我們可以將光驅掛載在 /mnt/ 上,然後進入該目錄就可以查看光驅裏的內容了。 /opt:#這是給主機額外安裝軟件所擺放的目錄。比如你安裝一個ORACLE數據庫則就可以放到這個目錄下。默認是空的。 /proc:#是一種僞文件系統(也即虛擬文件系統),存儲的是當前內核運行狀態的一系列特殊文件,這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。 這個目錄的內容不在硬盤上而是在內存裏,我們也可以直接修改裏面的某些文件,比如可以通過下面的命令來屏蔽主機的ping命令,使別人無法ping你的機器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root:#該目錄爲系統管理員,也稱作超級權限者的用戶主目錄。 /sbin:#超級用戶的二進制文件,這裏存放的是系統管理員使用的系統管理程序。 /srv:#該目錄存放一些服務啓動之後需要提取的數據。 /sys:#這是 Linux2.6 內核的一個很大的變化。該目錄下安裝了 2.6 內核中新出現的一個文件系統 sysfs 。 /tmp:#tmp 是 temporary(臨時) 的縮寫這個目錄是用來存放一些臨時文件的。 /usr:#usr 是 unix shared resources(共享資源) 的縮寫,這是一個非常重要的目錄,用戶的很多應用程序和文件都放在這個目錄下,類似於 windows 下的 program files 目錄。 /usr/bin:#系統用戶使用的應用程序。 /usr/sbin:#超級用戶使用的比較高級的管理程序和系統守護程序。 /usr/src: #內核源代碼默認的放置目錄。 /var: #var 是 variable(變量) 的縮寫,這個目錄中存放着在不斷擴充着的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌文件。 /run:#是一個臨時文件系統,存儲系統啓動以來的信息。當系統重啓時,這個目錄下的文件應該被刪掉或清除。如果你的系統上有 /var/run 目錄,應該讓它指向 run。
1)/etc/目錄
特定主機系統範圍內的配置文件
/etc/sysconfig/network-script/ifcfg-eth0 #網卡配置文件 /etc/hostname҅ #系統主機名配置文件 /etc/resolv.conf # dns客戶端配置文件 /etc/hosts҅ #本地域名解析配置文件 /etc/rc /etc/rc.d #/etc/rc*.d 啓動、或改變運行級時運行的scripts或scripts的目錄. /etc/hosts #本地域名解析文件 /etc/resolv.conf #DNS服務器配置 /etc/fstab #開機自動掛載系統,所有分區開機都會自動掛載 /etc/inittab #設定系統啓動時Init進程將把系統設置成什麼樣的runlevel及加載相關的啓動文件配置 /etc/exports #設置NFS系統用的配置文件路徑 /etc/init.d/ #這個目錄來存放系統啓動腳本 /etc/profile #全局系統環境配置變量 /etc/issue #認證前的輸出信息,默認輸出版本內核信息 /etc/motd #設置認證後的輸出信息 /etc/mtab #當前安裝的文件系統列表.由scripts初始化,並由mount 命令自動更新.需要一個當前安裝的文件系統的列表時使用,例如df 命令 /etc/group #類似/etc/passwd ,但說明的不是用戶而是組. /etc/passwd #用戶數據庫,其中的域給出了用戶名、真實姓名、家目錄、加密的口令和用戶的其他信息. /etc/shadow #在安裝了影子口令軟件的系統上的影子口令文件.影子口令文件將/etc/passwd 文件中的加密口令移動到/etc/shadow 中,而後者只對root可讀.這使破譯口令更困難. /etc/sudoers #可以sudo命令的配置文件 /etc/syslog.conf #系統日誌參數配置 /etc/shells #列出可信任的shell.chsh 命令允許用戶在本文件指定範圍內改變登錄shell.提供一臺機器FTP服務的服務進程ftpd 檢查用戶shell是否列在/etc/shells 文件中,如果不是將不允許該用戶登錄. /etc/opt/ #/opt/的配置文件 /etc/skel/ #默認創建用戶時,把該目錄拷貝到家目錄下
2)/dev/目錄
#/dev目錄下的設備文件 /dev/cdrom 和 /dev/sr0҅ #系統光盤鏡像設備 /dev/null #黑洞設備 /dev/random #生成隨機數的設備 /dev/zero # 不斷產生數據 /dev/pts/0 #虛擬的bash shell 終端,提供給遠程用戶使用 0代表第一個終端,1代表第二個終端 /dev/stderr #錯誤輸出 /dev/stdin҅ #標準輸入 /dev/stdout #標準輸出
二、文件的時間
#linux文件有三種時間,用stat命令查看:stat 加文件名 #訪問時間:atime,使用cat查看內容。 #修改時間:mtime,修改內容。 #改變時間:ctime,修改改內容,修改權限等屬性,凡是有改動都會變。
三、文件的類型
#方式一
ls -l 文件名 //看第一個字符 文件類型 - 普通文件(文本文件,二進制文件,壓縮文件,電影,圖片。。。) d 目錄文件(藍色) b 設備文件(塊設備)存儲設備硬盤,U盤 /dev/sda, /dev/sda1 c 設備文件(字符設備)打印機,終端 /dev/tty1, /dev/zero s 套接字文件 p 管道文件 l 鏈接文件(淡藍色) 相當於windows的快捷方式 - rw-r--r-- 1 root root 0 11月 22 05:13 a.txt #例:文件類型 權限 硬鏈接個數 所有者 所屬組 大小 修改時間 文件名
#方式二
[root@web01 ~]# file a.txt # file命令 a.txt: empty
四、路徑
#絕對路徑示例 touch /home/alice/file1 touch ~alice/file2 #相對路徑示例 touch ../file3 touch file4 touch abc/file5
五、文件管理(創建,複製,移動,刪除)
1)創建文件
touch file.txt #無則創建 有則修改時間 touch /home/file1.txt touch file{1..20} touch Ego{n,N}.txt #等同於Egon.txt EgoN.txt
2)創建目錄
mkdir dir1 mkdir /home/dir2 /home/dir3 mkdir -v /home/{dir6,dir7} mkdir -p /home/dir8/111/222 #遞歸創建
3)複製
cp 源文件 目標文件 cp -v install.log /home/dir1 cp -v install.log /home/dir1/aaa.txt cp -r /etc /home/dir1 cp install.log /home/dir2 cp anaconda-ks.cfg !$ cp anaconda-ks.cfg /home/dir2 cp -r /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/grub.conf /etc/hosts .
4)移動
# mv file2 /home/dir3 # mv file4 file5 #重命名
5)刪除
rm -rf dir -r 遞歸刪除 #也用於刪除目錄 -f 強制不提示 -v 打印過程
六、查看文件內容
(cat less more head tail grep) more #翻頁查看 cat -n #顯示行號 -A #包括控制字符/換行符 head -2 #默認頭10行 指定2行 tail -1 #默認後10行 指定後1行 tail -f /var/log/messages #實時監測文件的尾部 grep #針對文件內容進行過濾 # grep 'root' /etc/passwd # grep --color '^root' /etc/passwd grep --color 'bash$' /etc/passwd /etc/hosts /etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/passwd /etc/shadow /etc/group /etc/grub.conf /etc/resolv.conf /var/log/messages #系統的日誌文件 =============================================================================== dos2unix #將windows格式的文件轉成unix格式 unix2dos #將Unix格式的文件系統轉換winowns格式
七、修改文件內容(VIM)
1)VIM概念
什麼是vim?:vim可以理解爲windows下面的文本編輯器比如記事本word文檔
它的主要用途是:它可以執行輸出,刪除,查找,替換,塊操作的衆多文本操作,而且可以根據自己的需求對文本進行編輯。
爲何要用vim? :主要可以用來修改配置,以及編寫腳本
vi與vim的區別 :vi不顯示高亮顏色語法,vim顯示高亮語法,其他功能沒有什麼區別
2)vim的四種模式
vim編輯器的四種模式:命令模式====>編輯模式====>可視化模式====>末行模式
#模式之間的轉換:編輯文件進入命令模式=》按i a o進入編輯模式=》ctrl加v進入可視化模式=》按shift :進入末行模式。按esc返回命令模式 。保存編輯的文件或退出進入末行模式w q wq q! x wq!
3)命令模式
光標定位=> 上下左右鍵 或 h j k l 鍵 在光標所在的當前行移動光標 :$行尾 0行首 gg 將光標定位到行首 G 將光標定位到行尾 如;3G是將光標定位到地3行 yy 複製 以行爲單位 如:3yy就是複製3行 p 當前光標的下一行粘貼 大P當前光標的上一行進行粘貼 D 從光標處刪除到行尾 d 刪除 dd刪除光標所在的當前行 3dd 刪除3行 x 刪除光標所在的字符 u 恢復 R 進入替換模式 ctrl -r 執行上一步操作 shift+M 將光標移動到當前頁面的中間 shift+L 將光標移動到當前頁面的行尾 shift+H 將光標移動到當前頁面的行首
4)插入模式
進入到插入模式: i a o s I A O s (這幾個進入插入模式的區別) i :在光標所在字符前開始插入 a :在光標所在字符後開始插入 o :在光標所在行的下面另起一新行插入 s :刪除光標所在的字符並開始插入 I :在光標所在行的行首開始插入 如果行首有空格則在空格之後插入 A :在光標所在行的行尾開始插入 O :在光標所在行的上面另起一行開始插入 S :刪除光標所在行並開始插入
5)可視模式
按ctrl+v 進入可視化模式
1,添加加多行註釋:
前提:註釋的行需要整齊排列
先將光標移動到首行的開頭位置
在命令模式,按ctrl+v
上下鍵選中第一列
shift+i,然後輸入#
連續按兩下ESC
2,取消多行註釋:
註釋的行需要整齊排列
在命令模式,按ctrl+v
上下鍵選中#號
按下d
7)末行模式
w 保存 q 退出 wq 保存並退出(相當與把文件存入or寫入磁盤) w! 強制保存 q! 不保存並退出 wq! 強制保存退出 x 保存並退出
8)查找替換
查找替換 :% s/root/yang/g : %表示全文 g表示全局替換 %等同於1,$ #尾部加g的作用 :不加g只替換每行的第一個,加g爲全局替換 :4,9 s/^#// :4-9行的開頭#號替換爲空 : ,8 s/root/yang/ : 從當前行到第8行 :5,10 s/.*/#&/ 5-10前加入#字符 #w 存儲當前文件 :w /tmp/aaa.txt 另存爲/tmp/aaa.txt :1,3 w /tmp/2.txt #r讀入文件 :r /etc/hosts 讀入文件到當前行後 :5 r /etc/hosts 讀入文件到第5行後
9)設置環境
#臨時設置: :set nu 設置行號 當次顯示行——臨時 :set ic 不區分大小寫 :set nonu 取消設置行號 :set noic #永久的環境:修改vim環境配置文件 /etc/vimrc 影響所有系統用戶 vim /etc/vimrc ~/.vimrc 影響某一個用戶 # vim ~/.vimrc 新建文件也可以 set ic set nu
10)同時編輯多個文件
vim -o 文件1 文件2 #水平分割 vim -O 文件1 文件2 #垂直分割 #Ctrl + ww 切換 vim -p /etc/hosts /etc/grub.conf 使用 ^Pgup, ^PgDn 切換
11)文件內容對比
#相同文件之間差異對比,通常用與對比修改前後的差異
diff #文件對比
vimdiff #以vim方式打開兩個文件對比,高亮顯示不同的內容
patch 命令
12)vim執行過程
#1,vim 打開文件 a.txt
#2,進入編輯模式編輯文件
#3,編輯文件的時候vim會自動創建一個臨時文件 ( .a.txt.swp )隱藏文件
#4,編輯完成,vim會自動刪除臨時文件
#5,退出,修改成功
八、文件查找
查看命令所屬文件 # which ls
一些命令的路徑都被配置到了環境變量PATH裏了 # echo $PATH
#語法:
find [options] [path...] [expression]
1)按文件名查找
[root@localhost ~]# find /etc -name "ifcfg-eth0" [root@localhost ~]# find /etc -iname "ifcfg-eth0" # -i 忽略大小寫 [root@localhost ~]# find /etc -iname "ifcfg-eth*"
2)按文件大小找
[root@localhost ~]# find /etc -size +3M # 大於3M [root@localhost ~]# find /etc -size 3M [root@localhost ~]# find /etc -size -3M [root@localhost ~]# find /etc -size +3M -ls # -ls找到後的處理動作
3)按時間找(atime、mtime、ctime)
[root@localhost ~]# find /etc -mtime +3 # 修改時間超過3天 [root@localhost ~]# find /etc -mtime 3 # 修改時間等於三天 [root@localhost ~]# find /etc -mtime -3 #修改時間3天以內
4)按文件屬主、屬組找
[root@localhost ~]# find /home -user egon #所有者 [root@localhost ~]# find /home -group it #所屬組 [root@localhost ~]# find /home -user egon -o -group it [root@localhost ~]# find /home -nouser # [root@localhost ~]# find /home -nogroup # [root@localhost ~]# find /home -nouser -o -nogroup
5)按文件類型
[root@localhost ~]# find /dev -type f #普通文件 [root@localhost ~]# find /dev -type d #目錄 [root@localhost ~]# find /dev -type l #鏈接 [root@localhost ~]# find /dev -type b #塊設備 [root@localhost ~]# find /dev -type c #字符設備 [root@localhost ~]# find /dev -type s #套接字 [root@localhost ~]# find /dev -type p #管道
6)根據inode號查找
[root@localhost ~]# find / -inum 1811
7)按文件權限
[root@localhost ~]# find . -perm 644 -ls [root@localhost ~]# find . -perm -644 -ls [root@localhost ~]# find . -perm -600 -ls [root@localhost ~]# find /sbin -perm -4000 -ls # set uid [root@localhost ~]# find /sbin -perm -2000 -ls # set gid [root@localhost ~]# find /sbin -perm -1000 -ls # sticky
8)找道後處理的動作
-print -ls -delete -exec -ok [root@localhost ~]# find /etc -name "ifcfg*" -print # 必須加引號 [root@localhost ~]# find /etc -name "ifcfg*" -ls [root@localhost ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \; #非交互 [root@localhost ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp \; # 交互 [root@localhost ~]# find /etc -name "ifcfg*" -exec rm -rf {} \; [root@localhost ~]# find /etc -name "ifcfg*" -delete #
9)find結合xargs
[root@localhost ~]# find . -name "egon*.txt" |xargs rm -rf [root@localhost ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /var/tmp [root@localhost ~]# find /test -name "ifcfg-ens33" |xargs -I {} mv {} /ttt [root@localhost ~]# find /ttt/ -name "ifcfg*" |xargs -I {} chmod 666 {}