鳥哥的私房菜第三版筆記

/ 根目錄
/bin 執行文件
/boot 開機會啓動的文件
/dev 設備文件,通過訪問這個從而訪問連接到電腦上的關盤,硬盤等等。
/etc 系統配置文件。包括賬號密碼
/home 用戶註文件夾。




常用操作
chmod 
SUID(4):僅僅對二進制文件有效,當用戶進入該文件的時候,通過使用該文件擁有者身份進入。
SGID(2):用戶如果對此目錄有r,x權限,該用戶能進入此目錄。
SBIT(1):如果將目錄A加上了SBIT的權限項目時,則甲只能夠針對自己創建的文件或者目錄進行刪除,重命名,移動等操作,而無法刪除他人的文件。
chown
chgrp


cp  -a包括所有內容進行復制  默認無參數複製後修改所屬組。
-s 軟連接,類似於快捷方式。
-d複製連接文件,否則複製鏈接文件對應的源文件。
rm -r逐個刪除,逐個跳出是否需要刪除。
chatter +-= i不能刪除修改無法寫入添加數據。


使用''設置變量的時候會導致$失效。
設定系統文件在/etc/sysconfig/i18n
讀取鍵盤上輸入的文字
read -t 等待時間(默認的話是到回車爲止) -p  "提示文字" 變量名
刪除變量。${path##/*:}  一個井號表示刪除最短的,2個井號表示刪除最長的,刪除的內容是/*:,*表示0-無窮多個任意字符,刪除是從前面開始刪除的。
從後向前刪除用%


替換變量裏面的內容。
${需要修改的變量/需要修改的字符/修改後的字符}
第一個/位置如果用的是//那麼就是替換所有。


stty設置熱鍵 命令是stty 功能名  對應熱鍵。


數據導向 > 一個就將內容導入到後面的文件中,如果不存在那麼創建,如果存在那麼覆蓋。
如果用>> 那麼如果不存在那麼創建,如果存在那麼累加。


錯誤和正確同時輸入文件中,e.p. find /home -name .bashrc > list 2>&1


在儲存的同時同時輸出到桌面。tee 但是需要|


cat > filename將內容寫到這個文件中。


正則匹配:
找出對應的單詞所在的那一行 grep -n 'the' regular_express.txt


cut 用來裁剪有輸出的命令。


常用管道命令
sed 對產生內容的行進行處理。 a 添加 d刪除 p只顯示需要的行數。 '-s/需要替換的內容/新的字符串/g' 但是替換隻是顯示的替換,不替換內容本身。
在awk中$0代表整行。
將字符通過":"分隔,並顯示出UID小於10的內容。
awk '{FS=":"} $3 < 10 {print $1 "\t" $3}'




shell script
#!/bin/bash 來聲明語法。
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 設置環境變量,從而使得接下來代碼中的某些命令被使用。
export PATH 確定、使用環境變量。


test命令用來測試文件,文件的是否存在、是否爲連接文件等等。file命令是測試文件類型。


if語句
if[判斷句式]; then
fi


if[判斷句式]; then
else
fi


if[判斷句式]; then
elif[條件判斷式2];then
else
fi
用戶管理
groups 查看當前用戶的所屬用戶組。第一個爲當前用戶組,當touch的時候即以第一個的身份去創建。
newgrp 用戶組名,更改用戶組名到所需要的用戶組。

useradd 添加新用戶
useradd -D 顯示默認信息,文件保存位置在/etc/default/useradd
useradd 用戶名,創建一個沒有密碼,默認group是user的用戶,但是因爲沒有密碼所以無法登陸。
如果需要登錄,那麼設置密碼

usermod 用戶名 修改用戶的相關信息。
userdel 用戶名 刪除用戶


passwd 賬號名      設置密碼。不加賬號就是修改當前用戶的密碼。
passwd -S 賬戶名  顯示賬戶的當前狀態
passwd -l 賬戶名  鎖定該用戶啊
passwd -u 賬戶名  解鎖用戶。

chage -l 賬戶名,顯示用戶密碼詳細信息。
//創建用戶後以賬號作爲密碼登陸,並且在用戶第一次登陸後強制修改密碼。
useradd newaccount
echo "newaccount" -d | passwd --stdin newaccount
chage -d 0 agetest


finger 顯示用戶信息
chfn 修改用戶信息。
chsh 修改shell


groupadd 添加用戶組
groupmod 修改用戶組
groupdel 刪除用戶組,該用戶組不能有用戶存在,否則失敗
gpasswd [-A user1,...] groupname 將用戶添加到該用戶組。若沒有參數的話,就設置該用戶組管理員密碼。




setfacl -m u:用戶:權限 文件名 設置權限。
setfacl -m g:用戶組:權限 文件名 設置用戶組權限。
setfacl -m m:權限 文件名 設置最大權限,也就是就算用戶權限和用戶組權限大於mask權限,那麼他們獲得的最大權限只能是mask權限。
setfacl -m d:u:myuser:rx /srv/projecta 讓用戶myuser在文件/srv/projecta下一直擁有權限。


權限更改
su 直接su修改對應用戶爲root,但是環境變量還是原來用戶的變量,如果需要修改環境變量,則應用su -
sudo 通過自身的用戶的密碼進行超級用戶的操作,但是是否能夠修改自身用戶到那個用戶,則需要由/etc/sudoers決定。
visudo 找到root ALL=(ALL) ALL 這一行,在下面增加一行需要的。4列分別爲:用戶賬號,登錄主機來源,各寫換的身份,可執行的命令。

/etc/pam.d/login 查看登錄用的PAM流程。


當/etc/nonlogin文件存在的時候,一般用戶無法登錄,並在登錄的時候顯示其中內容,已登錄的一般用戶和root權限的用戶無關。
主要原因是存在pam_nonlogin.so模塊。
詳細的登錄流程見《鳥哥的私房菜 第三版》P438.


w,who 顯示當前服務器上登錄的用戶。
lastlog 用戶最後一次登陸時間。
write username [端口號] 發送信息給相應用戶,用ctrl+d來結束輸入。
mesg n 用戶如果不想接受信息則設置mesg爲n,如果想接受信息則爲mesg y。默認爲y,但是無法拒絕來自root的信息。
wall 發送信息給所有在線用戶。
mail username -s "title" 發送郵件給用戶,無論用戶是否在線。


手動添加用戶
pwck 判斷是否主文件存在於用戶的存在是否一一對應。


手動賬號的創建
1、新建所需的用戶組 (vi /etc/group)
2、將 /etc/group 與/etc/gshadow 同步(grpconv)
3、新建賬號的各個屬性(vi /etc/passwd)
4、將/etc/passwd 與 /etc/shadow 同步(pwconv)
5、新建賬號的密碼(passwd accountname)
6、新建用戶的主文件夾(cp -a /etc/skel /home/accountname)
7、更改用戶註文件夾的屬性(chown -R accountname.group/home/accountname)


磁盤配額
QUOTA 書中的checkquota不兼容xfs格式
checkquota -avug(all,print,user,group)


LVM
VG類似於大磁盤,
LV作爲各個分區。
partprobe 更新分區。
設置多個PV
合成一個大的VG
分爲多個LV


例行性工作:(需要安裝額外的AT包)
batch 時間  需要在服務器負載小於0.8的時候纔會進行。
at 時間  設置單條命令
anacron 設置關機期間的命令,當開機後,如果過了設定時間,那麼第一時間執行這些命令。
atq 顯示所有命令
atm 序列號  刪除命令


通過將用戶寫入/etc/cron.allow /etc/cron.deny來允許 拒絕用戶使用crontab
所有cron記錄都會記錄到/var/spool/cron/username中。
通過crontab -e來寫入週期性內容,
寫入分6列:分鐘,小時,日期,月份,周,命令。
特殊符號:*代表任意,','表示這兩個時間段都執行,'-'表示這兩個時間點之間都執行,/n每多久執行一次(0-59/5)一個小時內,每5min執行一次。


PID 進程ID
ps -l顯示自己的所有進程。
ps aux顯示系統中的所有進程。各項參數見《鳥哥的私房菜》P517
進程最後有<defunct>就是殭屍進程。應果斷kill掉。


通過使用&來讓程序後臺進行。e.p. cp file1 file2 &


ctrl+z暫停任務
jobs -l顯示所有任務。
fg %jobnumber 將後臺的任務放到前臺。
kill -9 %jobnumber 強行關閉某個進程。
kill -15 %jobnumber 以正常方式關閉某個進程。
nohup 命令 & 以脫機管理方式運行。


top 程序查看工具。
top -d [秒數] 以多少秒爲週期刷新
top -p Pid 查看某個對應進程的參數。


PRI越低,越早被執行。
nice [-n 數字] command 命令運行的時候就修改NICE值,從而影響PRI
renice [number] PID 重新修改nice值。


free 查看內存使用量。
uname 內核屬性。
uptime 系統啓動時間和工作負載。


netstat 查看網絡連接信息。
dmesg 查看內核產生的信息。
vmstat 檢測系統資源的變化。


路徑 /proc 內容詳見《鳥哥的私房菜》p531
fuser 查看該路徑或者文件有多少用戶打開。
lsof 列出被進程打開的文件名。


SELinux
getecforce 查看是否關閉
sestatus 顯示當前策略
如果想修改開關可以通過 vi/etc/selinux/config更改對應參數
P.S.前提是/boot/grub/menu.lst下的
kernal一行最後不能加上selinux = 0
否則因爲grub爲配置文件,在啓動的時候忽略selinux導致無法正常啓動。
當SELinux從enforcing到disabled的時候需要重啓,反方向同理。


chcon 修改安全上下文
當文件從一個地方複製到另一個地方的時候
他的安全上下文不會修改,從而可能造成web端網頁無法打開等等。


通過chkconfig --list setroubleshoot查看setroubleshoot是否啓用,只要3、5啓動即可。
然後再通過chkconfig setroubleshoot on來使其啓動,
開啓記錄,從而將錯誤信息寫入/var/log/messages中。
還可以使用auditd方法同理。
但是信息量更大,同時因爲信息量大,通過audit2why來查找關鍵信息。


通過seinfo來系那是SELinux的統計狀態
用sesearch來查看更加詳細的信息。
setsebool 查看條款的布爾值是啓動還是關閉。
semanage 修改selinux


各個服務放置的位置,配置文件位置,數據庫位置等可見《鳥哥的私房菜》p555
文件名 status查看當前狀態。
通過單獨的文件名,查看可以用的參數有哪些?


防火牆判斷依據:先判斷是否在hosts.allow中,如果不在其中,那麼在尋找hosts.deny。
設置方法
服務名:地址:deny 或者allow
通過chkconfig -add filename來添加服務。
服務通過shell script來編寫


將日誌寫到對應的日誌文件
vi /etc/syslog.conf 打開配置文件
mail.info /var/log/maillog 將mail中info等級以上的文件寫入maillog中


需要某種等級的
news.=warn 即獲取warn等級的。
不要某種類型的文字。
*.*;news.none;cron.none;
*.*;news,cron.none;


通過chattr來設置隱藏屬性,從而設置屬性爲只可寫入,不可刪除或者更改。


通過設置/etc/logrotate.conf來配置日誌文件的輪替。


系統管理員:
啓動流程
1、加載BIOS的硬件信息與進行自我測試,並依據設置取得第一個可啓動的設備
2、讀取並執行第一個啓動設備內MBR的BOOT LOADER(即GRUB,spfdisk等程序)
3、依據boot loader 的設置加載kernel,kernel會開始檢測硬件與加載驅動程序。
4、在硬件驅動成功後,kernel會主動調用init進程,而init會去的run-level信息。
5、init執行/etc/rc.d/rc.sysinit文件來準備軟件執行的操作環境(如網絡,時區等)
6、init執行run-level的各個服務的啓動(script方式)
7、init執行/etc/rc.d/rc.local文件
8、init執行中端機模擬程序mingetty來啓動login進程,最後等待用戶登錄。


BIOS通過INT 13中斷來讀取MBR


Boot Loader 提前加載kernel和initrd。
/boot/initrd是壓縮文件,解壓後得到的文件initrd-2.X.XX-XX.XXX還是壓縮文件,是通過cpio壓縮的。
解壓後的init文件中都是通過shell script來進行內存的虛擬文件系統的掛載,新建系統所需要的各項設備,加載內核模塊,嘗試掛載根目錄。
如果是IDE+EXT2/EXT3則沒有initrd也能順利進入系統。


/etc/inittab 默認環境配置(Centos 5.x內容放置在其中,Centos7.x的時候這些內容單獨放置在相對應的target中,詳細查看文件內容內容)
包含內容:init命令的7個指令
ctrl+alt+del的重啓
UPS
tty1-tty6.
xwindows決定
命令解釋:[設置選項]:[run level]:[init的操作行爲]:[命令選項]

同時/etc/rc.d/rc N中 K??(關閉kill某個服務) S??(開啓start某個服務。)
但是因爲系統版本不同,到Centos7.x的時候,etc下面直接就有rcN.d文件(同時rc.d中也有一份),裏面放置的就是對應的各自與其他啓動方式不同的內容,相同的方式應該寫到rc.d裏面了


自動啓動的shell script放在/etc/rc.d/rc.local中,即可自動啓動。


啓動後的一些配置文件,放在/etc/sysconfig/*中


內核模塊與依賴性
將文件放到/lib/modules/$(uname -r)/kernel/drivers/中然後執行depmod
內核文件一定是ko結尾。
lsmod 展示所有模塊
modinfo modname 顯示模塊相關信息。
modprobe 通過關係依賴性自動加載、刪除模塊。
insmod [full/path/module_name] [parameters]不通過分析直接添加模塊
rmmod 手動刪除模塊。


mkinitrd來重新生成Initrd文件


Overcome “Fail to load SELinux policy. Freezing.” error message while booting Linux
1.mind you can choose 'e' to edit the selected boot option
2.once 'e' is pressed,find linux16
3.add 'selinux=0' after 'crashkernel=auto'
4.press 'ctrl+x' to start the linux.


Change your root password,when you forgot your password
1.choose 'e' to edit the selected boot option
2.find line 'linux16'.
3.modify 'ro' to 'rw init=/sysroot/bin/sh' and press 'ctrl+x'
4.chroot your system 'chroot /sysroot'
5.enter 'passwd'
6.enter 'touch /.autorelabel'
7.exit chroot by enter 'exit'
8.reboot your system 'reboot'


常用硬件檢測命令
fdisk:顯示分區表
hdparm:硬件的讀寫速度和硬盤的信息
dmesg:內核運行過程中顯示的各項信息
vmstat:顯示系統(CPU/RAM/IO)狀態
lspci:列出整個pc系統的pci接口設備狀態
lsusb:列出目前系統中的各個UB端口的狀態和連接的USB設備
iostat:與vmstat類似,但是是實時的。


軟件開發商在軟件中會有個configure或者config文件,用來檢測操作環境,同時,在安裝完成後,生成Makefile or makefile文件,方便make命令直接進行調用,makefile文件包含了源碼如何編譯的詳細信息。


軟件的安裝
gcc -c (-Wall產生更詳細的編譯過程) filename1(源文件.c結尾) filename2
gcc -o 可執行文件名 filename1(目標文件.o結尾) filename2
直接運行的可執行文件。


so 如果後期更新了其中的某一個文件,只要對該文件重新編譯下就好了,別的文件無需重新編譯。


gcc -lm(l表示加入某個函數庫,m表示是libm.so這個函數庫,因爲默認的libm.so在/lib與/usr/lib中,所以不需要這麼寫-L/usr/lib)
gcc -I/path 搜索/usr/include 中相關的include的文件。


makefile文件的作用:生成一次編譯完成的所有信息。
makefile的基本語法
目標(target):目標文件1 目標文件2
<tab> gcc -o 欲新建的可執行文件 目標文件1 目標文件2
tab必須有,這是按tab鍵,不是輸入tab


常見軟件安裝
1、解壓到/usr/local/src下
2、查看install和readme
3、./configrue --help|more查看參數有哪些
4、./configure --prefix=/usr/local/ntp(軟件將來要安裝到哪裏去。)
5、使用make文件,即make clean/check/install
make的用法
make install/clean(具體內容看makefile裏面的類似於函數段的target)


對於軟件的升級
常用的命令是diff和patch

patch的語法
patch -p數字 < patch_file
比較的內容都卸載patch_file中,而-p後面的數字n代表着去掉patch_file中第一行路徑的n個斜槓。


靜態函數庫
1、擴展名爲.a
2、編譯行爲,文件會比較大一點
3、獨立執行的狀態
4、升級方面:只要函數庫升級了,所有將此函數庫納入的程序都要重新編譯。
動態函數庫
1、擴展名爲so
2、文件相對較小
3、獨立執行的狀態
4、升級更加容易。


通過ldconfig與/etc/ld.so.conf來協助將鏈接庫寫到內存中。
將需要的動態鏈接庫寫入/etc/ld.so.conf中然後執行ldconfig -p即可將內容寫到內存。


ldd filename 將該文件的所有動態鏈接庫顯示出來。
md5sum來確定md5碼


軟件管理器的2大主流
DPKG:Debian/Ubuntu,dpkg,APT(apt-get)
RPM:Red Hat/Centos,rpm rpmbuild,YUM(yum)
爲了解決PRM的必須在原本默認的環境中安裝的問題,產生了SPRM
安裝SPRM的時候,先將SPRM,編譯成PRM,再進行安裝,這樣產生了maikefile,config等文件,從而和現在狀態的機子更加合適(默認已經編譯完的PRM由於已存在固定的config,makefile文件,導致無法更改,從而影響安裝。)
SPRM文件格式爲***.src.rpm RPM文件的默認格式爲***.rpm
默認安裝包的名字爲:rp-pppoe-3.1-5.i386.rpm 即 軟件名-版本號-發佈次數-適合硬件平臺-擴展名。P.S.常見軟件平臺見《鳥哥的私房菜》P688


RPM的默認安裝路徑:/usr/bin:/usr/lib:/usr/share/doc:/usr/share/man
安裝方法
rpm -ivh(install|詳細信息|安裝進度) filename/url
安裝前可以通過rpm -ivh filename --test來進行依賴性測試。


更新
rpm -Uvh 後面軟件如果沒有安裝過,那麼進行安裝,如果有舊版本,那麼更新至新版本。
-Fvh 如果沒有安裝過,那麼不進行安裝,如果已有,那麼進行“升級”


查詢
rpm -q(a查詢所有) rpmname 查詢是否安裝。


驗證
rpm -V rpmname 驗證rpm
左側8個信息詳見p694
數字證書驗證,下載證書,如果證書無法對上,那麼無法進行安裝。


刪除
rpm -e rpmname


rpm -rebuilddb 創建rpm數據庫


SRPM的使用
安裝
rpmbuild(Red Hat7.3以前的用戶用rpm) --rebuild (僅僅編譯生成***.rpm) --recompile(編譯並安裝)
如果需要對某些參數進行修改的話,那麼尋找對應的*.spec文件,並修改其中的內容(詳細參數見P701)


自行生成SPRM文件
1、製作源代碼文件tarball
2、新建*.spec的設置文件
3、編譯爲RPM與SRPM rebuild -ba specname


YUM安裝
yum [install][update][remove] filename 安裝,更新,刪除軟件。
修改yum鏈接的地址等配置信息
/etc/yum.repos.d/CentOS-Base.repo
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章