一、Linux的目錄結構
linux目錄結構的特點
1、Linux系統的所有目錄都是一個有層次的倒立着的樹狀目錄結構(倒掛樹形結構),“/”根是所有目錄的頂點,對於Linux的目錄來說,一切從根開始。
2、不同目錄下的數據可以跨越不同的磁盤分區或不同的磁盤設備,設備可以隨意掛載到任意目錄上使用。
3、所有的目錄都是按照一定的類別有規律地進行組織和命名的。
4、沒有掛載到目錄上的磁盤,相當於沒有門和窗戶的監獄,不能被使用。磁盤等設備需要掛載后才能正常使用。
5、掛載點是磁盤訪問的入口,是一個目錄。
6、相對路徑與絕對路徑具有如下關系:絕對路徑是指以根為起始點的路徑,例如/tmp、/opt;相對路徑是指相對於非“/”路徑的路徑,即路徑開頭沒有“/”斜線,例如etc/sysconfig、opt/tmp等,是相對於當前路徑(執行pwd可查看)的路徑。
二、Linux主要系統文件
1./etc/sysconfig/network-scripts/ifcfg-eth0:網卡配置文件
這是Linux系統第一塊網卡的配置文件所在路徑,其中第一塊網卡配置文件結尾標識為eth0,第二塊為eth1,以此類推。
當通過執行命令setup→“network config-uration”來修改網卡配置時,實際上就是在改這個/etc/sysconfig/network-scripts/ifcfg-eth0文件,因此也可以通過直接編輯該文件的方式來實現對網卡配置的更改。
setup命令來配置網卡IP
配置完網卡后,可以通過重啟網絡服務/etc/init.d/network restart讓所有網卡的配置文件生效,如果只需讓某個單獨的eth0網卡配置生效,可以通過命令ifdown eth0&&ifup eth0(停掉及啟動eth0網卡命令)來實現。
下文是網卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0的內容詳解:
[root@localhost~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0#<===第一塊網絡的邏輯名稱,第二塊為eth1,也有em等字符標志。 HWADDR=00:0c:29:9d:80:af#<==以太網硬件地址即MAC地址,如果是VMware克隆的虛擬機無法啟動網卡,可以毫不猶豫地刪除此項。 TYPE=Ethernet#<==上網類型,目前基本都是以太網。
UUID=b82b131d-025c-42e0-8075-db61fe61f2aa<==通用的唯一識別碼 (Universally Unique Identifier),如果是VMware克隆的虛擬機無法啟動網卡,可以去除此項。 ONBOOT=yes#<==這個地方要為yes,才能保證下次開機啟動激活網卡設備。 NM_CONTROLLED=yes#<==是否通過Network Manager管理網卡設備。 BOOTPROTO=none#<==啟動協議,獲取配置方式,有none、bootp、dhcp三個選項。 IPADDR=202.1.1.203#<==這是虛擬機橋接模式,局域網Linux服務器的固定IP。 NETMASK=255.255.255.0#<==子網掩碼,用來規划網絡位和主機位,一般為255.255.255.0。IPV6INIT=no GATEWAY=202.1.1.1#<==局域網上網的網關地址。DNS1=202.1.1.1#<==主DNS,這里默認會覆蓋以及優先於/etc/resolv.conf的配置生效。 IPV6INIT=no #<==是否支持IPV6。
USERCTL=no
2./etc/resolv.conf: Linux系統DNS客戶端配置文件
DNS,全稱為Domain Name System,它在網站的運行中起到了至關重要的作用,其主要作用是負責把網站域名解析為對應的IP地址,例如:把www.etiantian.org解析為對應的IP地址記錄(如1.1.1.1)。這個從域名到IP的解析過程,稱作A記錄,即Address Record。
配置/etc/resolv.conf的方法有如下兩種。
第一種是通過圖形界面配置,依次選擇setup→“network configura-tion”→“DNS configuration”,即可完成配置。
第二種方法就是直接編輯/etc/resolv.conf文件,文件的內容如下:
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 202.1.1.1
3.主機名配置文件
/etc/sysconfig/network 為CentOS6系統主機名的永久配置文件
/etc/sysconfig/network為Linux系統主機名的永久配置文件,內容如下:
[root@localhost ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yaokaka<===修改yaokaka
永久修改主機名有如下兩種方法。
一是直接編輯/etc/sysconfig/network進行修改。
二是依次執行setup→“network configuration”→“DNS configuration”來更改主機名。
上述修改需要重啟服務器才能在命令行體現出修改效果,因此工作中除了這兩種方法以外,還可以通過命令臨時修改Linux命令行下的主機名顯示,但需要重新登錄系統才能生效。修改命令如下:
[root@localhost ~]# hostname yaokaka
/etc/hostname為CentOS7系統主機名的永久配置文件
centos7修改主機名
[root@localhost ~]# hostnamectl set-hostname yaokaka
4./etc/hosts:系統本地的DNS解析文件
/etc/hosts的作用是設定用戶IP與名字(或域名)的對應解析表,相當於本地(局域網內)的DNS解析文件。
Linux系統下的這個/etc/hosts類似C:\WINDOWS\system32\drivers\etc\hosts文件,一般在企業里的開發或測試工作里會使用host域名解析。
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
5./etc/fstab:配置開機設備自動掛載的文件
/etc/fstab是一個重要的文件,作用是配置開機設備自動掛載。前文已經講解了,Linux的設備必須要掛載才能使用,而剛開機時,磁盤都是沒有被掛載的,因此,系統開機會加載/etc/fstab文件,實現對系統分區的自動掛載,當然,管理員也可以利用這個文件實現對新增磁盤或分區的開機自動掛載功能。
/etc/fstab文件一共分為如下六列:
UUID=567aaa18-3e84-473b-95a1-216326375eb3 / ext4 defaults 1 1 UUID=95e0c606-028a-4a46-acef-3333fab4c1ee /boot ext4 defaults 1 2 UUID=afdf1987-5e39-4a5b-a74d-75db9689c39b swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
#第1列為設備的名稱、UUID或者磁盤標簽,可以通過blkid查看設備uuid。
#第2列為設備的掛載點,即訪問設備的入口。
#第3列為設備的文件系統類型。
#第4列為掛載的屬性
#第5列為是否進行備份。
#第6列是否開機時做磁盤檢查,0為不做檢查,1、2為檢查。
6./etc/rc.local:存放開機自啟動程序命令的文件(相當與windows的開機啟動項)
/etc/rc.local是用於存放開機自啟動程序命令的文件(chkconfig常用來管理yum/rpm安裝的程序或服務的開機自啟動)。有時IT人員自己開發的程序需要開機啟動,也會習慣把啟動命令放入/etc/rc.local中,實現開機啟動這些程序。Linux開機時會把/etc/rc.local里的內容全部執行一遍,這是Linux運維人員常用的文件。
從CentOS7開始,/etc/rc.local必須要先分配執行權限,里面的腳本才能執行,另外/etc/rc.local是一個軟鏈接文件,它的真實文件所在地為/etc/rc.d/rc.local,因此在使用tar等工具備份的時候要嚴格注意。
7./etc/inittab:系統啟動設定運行級別等配置的文件
/etc/inittab在早期(Centos6以前)是一個指導Linux開機啟動的關鍵文件,用於設定系統啟動時init進程把系統設置成什么樣的運行級別(runlevel),以及加載運行級別對應的啟動文件。在CentOS6里僅負責設定系統啟動時的運行級別,其他的功能已分拆到其他文件里了。
簡單地說,運行級別就是Linux系統的不同狀態,從CentOS6起inittab文件里僅剩下一個設定運行級別了。
[root@localhost ~]# cat /etc/inittab # inittab is only used by upstart for the default runlevel. #<==只用來設定默認運行級別了。 # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf #<==只用來設定默認運行級別了。 # # Individual runlevels are started by /etc/init/rc.conf#<==只用來設定默認運行級別了。 # #Ctrl-Alt-Delete is handled by/etc/init/control-alt-delete.conf #<==只用來設定默認運行級別了。 # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, #<==終端也轉移了。 # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: Linux系統運行級別的說明如下: # 0 關機(請不要把系統運行級別設置為0) # 1 單用戶模式(root用戶密碼忘記,可用此模式找回) # 2 沒有NFS,多用戶模式 # 3 命令行模式 文本模式(企業級服務器核心運行狀態) # 4 未使用 # 5 圖形化模式 桌面模式 X11(桌面個人版系統運行狀態) # 6 重啟(不要把系統運行級別設置為6)
可以通過runlevel命令,查看當前系統的運行級別,示例如下: [root@localhost ~]# runlevel N 3 N 3 #<==N為上一次的運行級別,3為當前的運行級別。 臨時修改運行級別(立刻生效)的示例如下: [root@localhost ~]# init 5 如果想要永久修改運行級別,需要修改/etc/inittab文件最后一行的id:3:initdefault:部分,其中數字部分就是對應的運行級別,需要重啟系統生效
CentOS7以后版本的變化很大,具體幫助就在/etc/inittab文件里
# inittab is no longer used when using systemd
# 當使用systemd方式啟動系統時,inittab文件不再使用了。 # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # 在此文件中添加任何配置,都不起作用了。 # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target # 本文件中的Ctrl-Alt-Delete3鍵重啟功能在/usr/lib/systemd/system/ctrl-alt-del.target中 # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # systemd啟動方式使用targets,而不是runlevel,默認情況下有兩個主要的targets。 # multi-user.target: analogous to runlevel 3 #多用戶文本模式,3運行級別。 # graphical.target: analogous to runlevel 5 #圖形模式,5運行級別。 # To view current default target, run: systemctl get-default # 若要查看當前的默認運行級別,則運行systemctl get-default命令。 # To set a default target, run:# systemctl set-default graphical.target
# 若要設置一個默認的運行級別,則運行systemctl set-default TARGET.target。
8./etc/profile及/etc/bashrc:配置系統的環境變量/別名等的文件
環境變量如PS1、TMOUT、HISTSIZE、HISTFILESIZE都可以存放在/etc/profile或/etc/bashrc文件中,並且全局生效。~/.bash_profile及~/.bashrc表示在當前用戶中生效。
9./etc/profile.d:用戶登錄后執行的腳本所在的目錄
/etc/profile.d為加載系統登錄程序的目錄,目錄里面的程序以文件的形式存在(一般以*.sh為擴展名),但要可執行權限。
10./etc/issue和/etc/issue.net:配置在用戶登錄終端前顯示信息的文件
[root@node1 ~]# cat /etc/issue.net \S Kernel \r on an \m
在企業服務器中,為了防止泄露服務器版本,一般會把把issue文件的內容清空。
11./etc/init.d:軟件啟動程序所在的目錄
這個目錄用來存放通過yum或rpm工具安裝的軟件默認啟動程序(啟動腳本)的目錄。例如:sshd服務、/etc/init.d/sshd restart(相當於是service sshd restart)等,此外IT人員人為開發的軟件服務啟動程序也可以放置在這里。在CentOS7中該目錄也已經廢棄不用了,統一由systemctl取代,例如,重啟sshd服務的命令為systemctl restart sshd.service
12./etc/motd:配置用戶登錄系統之后顯示提示內容的文件
/etc/motd文件配置的是用戶登錄系統之后顯示的內容,相當於登錄后的一個提示作用,默認是空的。
13./etc/redhat-release:聲明Red Hat版本號和名稱信息的文件
/etc/redhat-release是用於聲明Red Hat版本號和名稱信息的文件,如果需要查看系統的版本等信息,可以讀取這個文件查看。
[root@node1 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
14./etc/sysctl.conf:Linux內核參數設置文件
這是一個涉及Linux系統性能調優的極其重要的文件,作用是設置Linux內核參數,可用來替代系統默認運行的內核參數,讓系統運行得更高效。管理員可以通過sysctl-a命令查詢可以設置的內核參數信息。修改sysctl.conf完畢后,執行sysctl-p使得修改的信息生效,這部分內容比較復雜,在后文Linux基礎優化章節會進行深入闡述,讀者可以執行man sysctl.conf命令查看該配置文件的相關幫助,設置相關參數后的運行情況可以通過讀取/proc下的信息文件查看.
15./etc下重要目錄文件的匯總小結
/etc/sysconfig/neteork-scrpts/ifcfg-th0 網卡配置***** /etc/resolv.conf DNS客戶端配置文件*** /etc/sysconfig/network 主機名配置文件** /etc/hosts 系統本地DNS解析文件**** /etc/fstab 開機設備自動掛載文件***** /etc/rc.local 存放開機自啟動程序命令的文件***** /etc/inittab 系統運行級別的配置文件*** /etc/init.d /etc/init.d軟件驅動程序所在的目錄*** /etc/profile;/etc/bashrc 系統環境變量、別名配置文件*** /etc/profile.d 用戶登錄后執行的腳本所在目錄 /etc/issue;/etc/issue.net 配置在用戶登錄終端前顯示信息的文件 /etc/motd 配置在用戶登錄終端后顯示信息的文件 /etc/redhat-release 聲明RedHat版本號和名稱信息的文件 /etc/sysctl.conf 配置內核參數信息的文件***** /etc/group 用戶組名的相關信息 /etc/passwd 賬號信息文件 /etc/shadow 密碼信息文件 /etc/sudoers sudo命令配置文件 /etc/login.defs 所有用戶登錄時的默認配置
三、usr目錄的重要知識介紹
1./usr/local/:編譯安裝軟件默認的位置路徑
這個目錄一般是用來存放用戶自編譯安裝軟件的目錄的,對於通過源碼包安裝的軟件,如果沒有特別指定安裝目錄的話,一般會安裝在這個目錄中,相當於Windows系統下的c:\Program files。
2./usr/src:存放源碼文件的目錄
這個目錄一般被用來存放在網上下載的軟件源代碼,當然了,這也是可選的,你可以根據需要進行更改。
/var目錄下的路徑知識
1./var/log:記錄系統及軟件運行信息文件所在的目錄
/var/log目錄里有大量記錄系統及軟件服務運行的日志文件,通過這些日志文件可以知道系統運行情況及故障原因,
messages 文本文件 系統日志文件
secure 文本文件 安全日志文件
dmesg 文本文件 硬件信息加載情況日志文件
cron 文本文件 定時任務日志文件
wtmp 二進制文件 記錄登陸者信息的文件,用last命令讀取
lastlog 二進制文件 記錄用戶近期登錄的情況,用lastlog命令讀取
2./var/log/messages:系統級別日志文件
/var/log/messages是系統默認的日志文件,這個文件非常重要,當系統及軟件遇到運行故障時,可以通過查看這個日志文件獲取故障信息,該文件按周自動輪詢(一周來一刀,每周切割一次)。
[root@localhost ~]# ls -l /var/log/messages* -rw-------. 1 root root 959664 Feb 14 14:13 /var/log/messages -rw-------. 1 root root 613494 Jan 14 02:53 /var/log/messages-20190114 -rw-------. 1 root root 124932 Jan 27 09:48 /var/log/messages-20190127 -rw-------. 1 root root 1003818 Feb 3 14:04 /var/log/messages-20190203 -rw-------. 1 root root 217612 Feb 9 09:30 /var/log/messages-20190210
上述輪詢日志由/etc/logrotate.conf和/etc/logrotate.d/syslog控制。
3./var/log/secure:用戶登錄信息日志文件
這是一個有關系統安全的日志文件,日志中會記錄“誰,在什么時候,從哪登錄到系統,登錄是否成功”等信息。ssh、telnet、ftp等服務的用戶登錄信息都會記錄在此。
root@localhost ~]# ls -l /var/log/secure -rw-------. 1 root root 11408 Feb 14 15:53 /var/log/secure [root@localhost ~]# cat /var/log/secure|head -5 Feb 10 10:14:45 localhost sshd[13474]: Accepted password for root from 202.1.1.2 port 7618 ssh2 Feb 10 10:14:45 localhost sshd[13474]: pam_unix(sshd:session): session opened for user root by (uid=0) Feb 10 14:17:14 localhost su: pam_unix(su-l:session): session opened for user ywx by root(uid=0) Feb 10 14:17:59 localhost su: pam_unix(su-l:session): session closed for user ywx Feb 10 14:18:03 localhost su: pam_unix(su-l:session): session opened for user ywx by root(uid=0)
該文件和messages文件一樣,也是按周自動輪詢的
4./var/log/dmesg:記錄硬件信息加載情況的日志文件
當硬件及系統內核出問題時,可以看看這個日志文件,在解決問題時沒准有額外的收獲。讀者也可以通過dmesg命令來收集相關信息,給能讀懂的人提供解決故障問題的依據。
[root@node1 ~]# dmesg |tail -10
[ 9.037636] type=1305 audit(1600751544.908:3): audit_pid=5369 old=0 auid=4294967295 ses=4294967295 res=1
[ 9.469337] NET: Registered protocol family 40
[ 9.894034] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 9.895417] vmxnet3 0000:0b:00.0 eth0: intr type 3, mode 0, 2 vectors allocated
[ 9.896011] vmxnet3 0000:0b:00.0 eth0: NIC Link is Up 10000 Mbps
[ 9.956423] IPv6: eth0: IPv6 duplicate address fe80::49eb:10a8:b61f:5d91 used by 00:0c:29:e8:c7:e0 detected!
[ 10.019047] IPv6: eth0: IPv6 duplicate address fe80::49eb:10a8:b61f:5d91 used by 00:0c:29:c7:f0:b1 detected!
[ 10.137088] IPv6: eth0: IPv6 duplicate address fe80::851b:b36b:7b12:690b used by 00:0c:29:1d:32:37 detected!
[ 10.907450] IPv6: eth0: IPv6 duplicate address fe80::851b:b36b:7b12:690b used by 00:0c:29:e8:c7:e0 detected!
[ 199.737617] random: crng init done
5./proc下的重要路徑知識
/proc是Linux系統的一個重要虛擬文件系統,記錄着內核和進程方方面面的信息,它是一個很重要的信息寶庫,
/proc/cpuinfo 當前CPU信息文件 /proc/meminfo 當前內存信息文件 /proc/loadavg 當前的系統平均負載文件 /proc/mounts 當前設備掛載列表信息文件 /proc/interrupts 當前系統中斷信息文件