Linux基礎系統優化 引言沒有,只有一張圖。 Linux的網路功能相當強悍,一時之間我們無法瞭解所有的網路命令,在配置伺服器基礎環境時,先瞭解下網路參數設定命令。 ifconfig 查詢、設置網卡和ip等參數 ifup,ifdown 腳本命令,更簡單的方式啟動關閉網路 ip 符合指令,直接修改上述 ...
Linux基礎系統優化
引言沒有,只有一張圖。
Linux的網路功能相當強悍,一時之間我們無法瞭解所有的網路命令,在配置伺服器基礎環境時,先瞭解下網路參數設定命令。
ifconfig 查詢、設置網卡和ip等參數
ifup,ifdown 腳本命令,更簡單的方式啟動關閉網路
ip 符合指令,直接修改上述功能
在我們剛裝好linux的時候,需要用xshell進行遠程連接,那就得獲取ip地址,有時候網卡預設是沒啟動的,Linux也就拿不到ip地址,因此我們得手動啟動網卡
編輯網卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改配置參數
ONBOOT=yes
網卡配置文件詳解
如下
網路配置文件:
/etc/sysconfig/network
網路介面配置文件:
/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
DEVICE=: 關聯的設備名稱,要與文件名的後半部“INTERFACE_NAME”保持一致;
BOOTPROTO={static|none|dhcp|bootp}: 引導協議;要使用靜態地址,使用static或none;dhcp表示使用DHCP伺服器獲取地址;
IPADDR=: IP地址
NETMASK=:子網掩碼
GATEWAY=:設定預設網關;
ONBOOT=:開機時是否自動激活此網路介面;
HWADDR=: 硬體地址,要與硬體中的地址保持一致;可省;
USERCTL={yes|no}: 是否允許普通用戶控制此介面;
PEERDNS={yes|no}: 是否在BOOTPROTO為dhcp時接受由DHCP伺服器指定的DNS地址;
ifup,ifdown命令
啟動/關閉一塊網卡
ifup eth0
ifdown eth0
如果關閉網卡,xshell會怎樣?
ifconfig命令
ifconfig 查看網卡的ip地址
直接輸入ifconfig會列出已經啟動的網卡,也可以輸入ifconfig eth0單獨顯示eth0的信息
各選項解釋是:
eth0 網卡的代號
lo 迴環地址loopback
inet IPv4的Ip地址
netmask 子網掩碼
broadcast 廣播地址
RX/TX 流量發/收情況 tx是發送(transport),rx是接收(receive)
packets 數據包數
errors 數據包錯誤數
dropped 數據包有問題被丟棄的數量
collisions 數據包碰撞情況,數值太多代表網路狀況差
ifup,ifdown命令
ifup和ifdown是直接連接到/etc/sysconfig/network-scripts目錄下搜索對應的網卡文件,例如ifcfg-eth0然後加以設置
ip命令
ip是一個命令,不是TCP/IP那個ip,這個ip命令是結合了ifconfig和route兩個命令的功能。
ip addr show #查看ip信息
瞭解瞭如何查看網卡信息,接下來查看系統信息。
你的系統是什麼版本?
查看系統版本信息
cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
查看內核版本號
uname -r
3.10.0-693.el7.x86_64
查看系統多少位
uname -m
x86_64
查看內核所有信息
uname -a
用戶管理與文件許可權篇
現代操作系統一般屬於多用戶的操作系統,也就是說,同一臺機器可以為多個用戶建立賬戶,一般這些用戶都是為普通用戶,這些普通用戶能同時登錄這台電腦,電腦對這些用戶分配一定的資源。
普通用戶在所分配到的資源內進行各自的操作,相互之間不受影響。但是這些普通用戶的許可權是有限制的,且用戶太多的話,管理就不便,從而引入root用戶。
此用戶是唯一的,且擁有系統的所有許可權。root用戶所在的組稱為root組。“組”是具有相似許可權的多個用戶的集合。
root的權利
Linux系統的特性就是可以滿足多個用戶,同時工作,因此Linux系統必須具備很好的安全性。
在安裝RHEL7時設置的root管理員密碼,這個root管理員就是所有UNIX系統中的超級用戶,它擁有最高的系統所有權,能夠管理系統的各項功能,如添加/刪除用戶,啟動/關閉進程,開啟/禁用硬體設備等等。
因此“能力越大,責任越大”,root許可權必須很好的掌握,否則一個錯誤的命令可能會摧毀整個系統。
root為什麼叫root?
在Linux系統中,用戶也有自己的UID身份賬號且唯一
系統管理員UID為0
系統用戶UID為1~999 Linux安裝的服務程式都會創建獨有的用戶負責運行。
普通用戶UID從1000開始:由管理員創建
用戶組GID
為了方便管理屬於同一組的用戶,Linux 系統中還引入了用戶組的概念。通過使用用 戶組號碼(GID,Group IDentification),我們可以把多個用戶加入到同一個組中,從而方 便為組中的用戶統一規劃許可權或指定任務。
假設有一個公司中有多個部門,每個部門中又 有很多員工。如果只想讓員工訪問本部門內的資源,則可以針對部門而非具體的員工來設 置許可權。
例如,可以通過對技術部門設置許可權,使得只有技術部門的員工可以訪問公司的 資料庫信息等。
Linux管理員在創建用戶時,將自動創建一個與其同名的用戶組,這個用戶組只有該用戶一個人
大家都知道windows下有管理員用戶
這樣
或者這樣
Linux/unix是一個多用戶、多任務的操作系統。
root:預設在Unix/linux操作系統中擁有最高的管理許可權。可以理解為qq群的群主⬇️⬇️⬇️
普通用戶:是管理員或者具備管理許可權的用戶所創建的,只能讀、看,不能增、刪、改。
創建普通用戶
添加用戶
useradd oldboy
設置密碼
passwd redhat
root用戶可以修改其他所有人的密碼,且不需要驗證
切換用戶
su命令可以切換用戶身份的需求,
su - username
su命令中間的-號很重要,意味著完全切換到新的用戶,即環境變數信息也變更為新用戶的信息
先看下當前用戶(我是誰)
whoami
切換用戶
su - oldboy
退出用戶登錄
logout
ctrl + d
一般情況下,在生產環境避免直接用root用戶,除非有特殊系統維護需求,使用完立刻退回普通用戶
非互動式設置密碼(echo "redhat"|passwd --stdin oldboy && history -c)
Tip:
1.超級用戶root切換普通用戶無需密碼,例如“群主”想踢誰就踢誰
2.普通用戶切換root,需要輸入密碼
3.普通用戶許可權較小,只能基本查看信息
4.$符號是普通用戶命令提示符,#是超級管理員的提示符
root是當前用戶,oldboyedu是主機名,~代表當前路徑,也是家目錄
groupadd命令
group命令用於創建用戶組,為了更加高效的指派系統中各個用戶的許可權,在工作中常常添加幾個用戶到一個組裡面,這樣可以針對一類用戶安排許可權。
例如超哥以前在公司里,就負責添加openLDAP用戶管理,偶爾臺灣,美國的同事去上海協作,我就得給他們添加到it部門組裡面,以至於他們有對伺服器操作的許可權。
groupadd it_dep
userdel刪除用戶
-f 強制刪除用戶
-r 同事刪除用戶以及家目錄
userdel -r pyyu
sudo命令
sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之後有5分鐘的有效期限,超過期限則必須重新輸入密碼。
語法
sudo 【選項】【參數】
-b:在後臺執行指令;
-h:顯示幫助;
-H:將HOME環境變數設為新身份的HOME環境變數;
-k:結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼;。
-l:列出目前用戶可執行與無法執行的指令;
-p:改變詢問密碼的提示符號;
-s
-u<用戶>:以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份;
-v:延長密碼有效期限5分鐘;
-V :顯示版本信息。
實例
這個sudo命令用在什麼時候呢?
看圖
怎麼辦?許可權不夠,這時候需要sudo ls /root 以root身份去運行,chaoge權利小,root總可以了吧!!
這是由於配置sudo必須編輯/etc/sudoers文件,並且只有root才能修改,咱們可以通過visudo命令直接編輯sudoers文件,使用這個命令還可以檢查語法,比直接編輯 vim /etc/sudoers更安全
visudo 編輯sudoers文件
寫入
Allow root to run any commands anywhere
root ALL=(ALL) ALL
chaoge ALL=(ALL) ALL #允許chaoge在任何地方,執行任何命令
此時切換chaoge用戶
su命令用於切換當前用戶身份到其他用戶身份,變更時須輸入所要變更的用戶帳號與密碼。
su - chaoge
已經可以使用sudo ls /root 命令
文件與目錄許可權
Linux許可權的目的是(保護賬戶的資料)
Linux許可權主要依據三種身份來決定:
user/owner 文件使用者,文件屬於哪個用戶
group 屬組,文件屬於哪個組
others 既不是user,也不再group,就是other,其他人
什麼是許可權
在Linux中,每個文件都有所屬的所有者,和所有組,並且規定了文件的所有者,所有組以及其他人對文件的,可讀,可寫,可執行等許可權。
對於目錄的許可權來說,可讀是讀取目錄文件列表,可寫是表示在目錄內新增,修改,刪除文件。可執行表示可以進入目錄
Linux許可權的觀察
使用一條命令查看許可權
ls -l /var/log/mysqld.log
解讀上圖:
許可權,第一個字母為文件類型,後續9個字母,每3個一組,是三種身份的許可權
文件鏈接數
文件擁有者-屬主
文件擁有組-屬組
文件大小
最後一次被修改的時間日期
文件名
先來分析一下文件的類型
- 一般文件
d 文件夾
l 軟連接(快捷方式)
b 塊設備,存儲媒體文件為主
c 代表鍵盤,滑鼠等設備
文件許可權
r read可讀,可以用cat等命令查看
w write寫入,可以編輯或者刪除這個文件
x executable 可以執行
目錄許可權
許可權這裡測試不要用root實驗!!!!root太牛逼了
請用普通用戶執行!!!!!測試文件、文件夾許可權操作,請用普通用戶!
r 可以對此目錄執行ls列出所有文件
w 可以在這個目錄創建文件
x 可以cd進入這個目錄,或者查看詳細信息
許可權與數字轉化
ls -l /var/log/mysqld.log
-rw-r--r-- 1 mysql mysql 6735642 8月 11 14:19 /var/log/mysqld.log
這個就代表mysqld.log文件屬主是mysql,屬組是mysql,只有mysql用戶可以讀取編寫這個文件,其他人只能讀此文件。
查看用戶許可權命令
id指令查看用戶所屬群主
[root@oldboy_python ~ 16:34:52]#id root
uid=0(root) gid=0(root) 組=0(root)
修改文件許可權屬性
普通用戶只能修改自己的文件名,時間與許可權(註意)
因此修改其他用戶許可權,只能用最nb的root用戶
切換root用戶
[pyyu@oldboy_python root]$ su -
當前/tmp/pyyu.txt文件以存在,且信息是
-rw-rw-r-- 1 pyyu pyyu 0 8月 11 16:41 pyyu.txt
修改屬主為root
chown
[root@oldboy_python /tmp 16:43:12]#chown root pyyu.txt
查看信息
[root@oldboy_python /tmp 16:43:42]#ll pyyu.txt
-rw-rw-r-- 1 root pyyu 0 8月 11 16:41 pyyu.txt
修改屬組
chgrp
[root@oldboy_python /tmp 16:43:42]#ll pyyu.txt
-rw-rw-r-- 1 root pyyu 0 8月 11 16:41 pyyu.txt
[root@oldboy_python /tmp 16:44:59]#chgrp root pyyu.txt
[root@oldboy_python /tmp 16:45:51]#ll pyyu.txt
-rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
文件許可權
我們已知三種身份許可權(屬主,屬組,其他人),每種身份都有rwx的三種許可權,系統還提供了數字計算許可權。
r read 4
w write 2
x execute 1
每種身份最低是0分,最高是r+w+x 7分
因此三種身份,最高許可權是777,最低是000
-rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
因此可知pyyu.txt的許可權是
屬主是6 r+w(4+2)
屬組是6 r+w(4+2)
其他人是4 r(4)
修改許可權的命令
chmod
chmod [身份] [參數] [文件]
u(user) +(添加)
g(group) -(減去)
o(other) =(賦值)
a(all)
例如
當前許可權
-rw-rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
方法1
減去屬主的寫許可權
chmod u-w pyyu.txt
查看許可權
-r--rw-r-- 1 root root 0 8月 11 16:41 pyyu.txt
方法2
屬主添加可讀可寫可執行許可權
chmod 700 pyyu.txt
屬主可讀可寫可執行
屬組可讀可執行
其他人可讀可執行
chmod 755 pyyu.txt
修改文件名,修改文件更改日期
mv pyyu.txt chaoge.txt
觸摸,修改時間
touch chaoge.txt
軟連接
軟連接也叫做符號鏈接,類似於windows的快捷方式。
常用於安裝軟體的快捷方式配置,如python,nginx等
ln -s 目標文件 軟連接名
1.存在文件/tmp/test.txt
[root@master tmp]# ls -l
-rw-r--r-- 1 root root 10 10月 15 21:23 test.txt
2.在/home目錄中建立軟連接,指向/tmp/test.txt文件
ln -s /tmp/test.txt my_test
3.查看軟連接信息
lrwxrwxrwx 1 root root 13 10月 15 21:35 my_test -> /tmp/test.txt
4.通過軟連接查看文件
cat my_test
my_test只是/tmp/test.txt的一個別名,因此刪除my_test不會影響/tmp/test.txt,但是刪除了本尊,
快捷方式就無意義不存在了
PS1變數
Linux命令提示符由PS1環境變數控制
[root@oldboy_python ~]# echo $PS1
[\u@\h \W]$
可以自行調整全局變數/etc/profile文件用於永久生效 PS1='[\u@\h \W\t]$'
\d 日期
\H 完整主機名
\h 主機名第一個名字
\t 時間24小時制HHMMSS
\T 時間12小時制
\A 時間24小時制HHMM
\u 當前用戶賬號名
\v BASH的版本
\w 完整工作目錄
\W 利用basename取得工作目錄名
# 下達的第幾個命令
$ 提示字元,root為#,普通用戶為$
PS1 > 變數名
$PS1 > 查看變數內容
PS1=新內容 重新賦值
變數賦值,查看
name='chaoge'
echo $name
PS1顯示ip地址
export PS1="[\u@\h /sbin/ifconfig ens33 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
\w]$"
tar解壓命令
人們發明瞭各種各樣的包,無論是雙肩包,或者是裝在口袋,都是為了讓“文件”更方便攜帶。linux的文件打包工具最出名的是tar。
tar 命令:用來壓縮和解壓文件。tar本身不具有壓縮功能。他是調用壓縮功能實現的
語法
tar(選項)(參數)
-A或--catenate:新增文件到以存在的備份文件;
-B:設置區塊大小;
-c或--create:建立新的備份文件;
-C <目錄>:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
-d:記錄文件的差別;
-x或--extract或--get:從備份文件中還原文件;
-t或--list:列出備份文件的內容;
-z或--gzip或--ungzip:通過gzip指令處理備份文件;
-Z或--compress或--uncompress:通過compress指令處理備份文件;
-f<備份文件>或--file=<備份文件>:指定備份文件;
-v或--verbose:顯示指令執行過程;
-r:添加文件到已經壓縮的文件;
-u:添加改變了和現有的文件到已經存在的壓縮文件;
-j:支持bzip2解壓文件;
-v:顯示操作過程;
-l:文件系統邊界設置;
-k:保留原有文件不覆蓋;
-m:保留文件不被覆蓋;
-w:確認壓縮文件的正確性;
-p或--same-permissions:用原來的文件許可權還原文件;
-P或--absolute-names:文件名使用絕對名稱,不移除文件名稱前的“/”號;
-N <日期格式> 或 --newer=<日期時間>:只將較指定日期更新的文件保存到備份文件里;
--exclude=<範本樣式>:排除符合範本樣式的文件。
實例
tar -zxvf Python-3.7.0b3.tgz #解壓
tar -czvf oldboy.txt.tar.gz oldboy.txt #壓縮oldboy.txt
上述命令等於 以下兩條命令
tar -cvf oldboy.tar oldboy.txt
gzip oldboy.tar
tar -cf all_pic.tar *.jpg #壓縮當前目錄所有jpg結尾的文件
tar -xjf xx.tar.bz2 #解壓縮bz2結尾的文件
gzip命令
gzip用來壓縮文件,是個使用廣泛的壓縮程式,被壓縮的以".gz"擴展名
gzip可以壓縮較大的文件,以60%~70%壓縮率來節省磁碟空間
語法
-d或--decompress或----uncompress:解開壓縮文件;
-f或——force:強行壓縮文件。
-h或——help:線上幫助;
-l或——list:列出壓縮文件的相關信息;
-L或——license:顯示版本與版權信息;
-r或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一併處理;
-v或——verbose:顯示指令執行過程;
實例
壓縮當前目錄所有文件為.gz文件
gzip *
把上例中每個壓縮的文件解壓,併列出詳細的信息
gzip -dv *
顯示壓縮文件的信息,並不解壓
gzip -l *
壓縮一個tar備份文件,擴展名是tar.gz
tar -cf my.tar my_first.py
gzip -r my.tar
netstat命令
netstat命令用來列印Linux中網路系統的狀態信息,可讓你得知整個Linux系統的網路情況。
語法【選項】
netstat [選項]
-t或--tcp:顯示TCP傳輸協議的連線狀況;
-u或--udp:顯示UDP傳輸協議的連線狀況;
-n或--numeric:直接使用ip地址,而不通過功能變數名稱伺服器;
-l或--listening:顯示監控中的伺服器的Socket;
-p或--programs:顯示正在使用Socket的程式識別碼和程式名稱;
-a或--all:顯示所有連線中的Socket;
實例
[root@oldboy_python ~ 10:21:59]#netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 814/sshd
tcp6 0 0 :::111 :::* LISTEN 2703/rpcbind
tcp6 0 0 :::3306 :::* LISTEN 29269/mysqld
udp 0 0 0.0.0.0:758 0.0.0.0:* 2703/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 2703/rpcbind
udp 0 0 10.141.32.137:123 0.0.0.0:* 484/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 484/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 484/ntpd
udp6 0 0 :::758 :::* 2703/rpcbind
udp6 0 0 :::111 :::* 2703/rpcbind
udp6 0 0 :::123 :::* 484/ntpd
ps命令
ps 命令用於查看系統中的進程狀態,格式為“ps [參數]”。
ps 命令常用參數
-a 顯示所有進程
-u 用戶以及其他詳細信息
-x 顯示沒有控制終端的進程
Kill命令
kill命令用來刪除執行中的程式或工作。kill可將指定的信息送至程式。
選項
-a:當處理當前進程時,不限制命令名和進程號的對應關係;
-l <信息編號>:若不加<信息編號>選項,則-l參數會列出全部的信息名稱;
-p:指定kill 命令只列印相關進程的進程號,而不發送任何信號;
-s <信息名稱或編號>:指定要送出的信息;
-u:指定用戶。
只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略,下麵是常用的信號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + )
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
實例
先用ps查找進程,然後用kill殺掉:
ps -ef | grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
kill 3268
killall命令
通常來講,複雜軟體的服務程式會有多個進程協同為用戶提供服務,如果逐個去結束這 些進程會比較麻煩,此時可以使用 killall 命令來批量結束某個服務程式帶有的全部進程。
例如nginx啟動後有2個進程
killall nginx
SELinux功能
SELinux(Security-Enhanced Linux) 是美國國家安全局(NSA)對於強制訪問控制的實現,這個功能管理員又愛又恨,大多數生產環境也是關閉的做法,安全手段使用其他方法。
大多數ssh連接不上虛擬機,都是因為防火牆和selinux阻擋了
永久關閉方式:
1.修改配置文件,永久生效關閉selinux
cp /etc/selinux/config /etc/selinux/config.bak #修改前備份
2.修改方式可以vim編輯,找到
This file controls the state of SELinux on the system.
SELINUX= can take one of these three values:
enforcing - SELinux security policy is enforced.
permissive - SELinux prints warnings instead of enforcing.
disabled - No SELinux policy is loaded.
SELINUX=disabled
3.用sed替換
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
4.檢查狀態
grep "SELINUX=disabled" /etc/selinux/config
出現結果即表示修改成功
臨時關閉selinux(命令行修改,重啟失效):
getenforce #獲取selinux狀態
修改selinux狀態
setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
數字0 表示permissive,給出警告,不會阻止,等同disabled
數字1表示enforcing,表示開啟
Tip:
修改selinux配置後,想要生效還得重啟系統,技巧就是(修改配置文件+命令行修改,達到立即生效)
生產環境的伺服器是禁止隨意重啟的!!!!
iptables防火牆
在學習階段,關閉防火牆可以更方便的學習,在企業環境中,一般只有配置外網ip的linux伺服器才會開啟防火牆,但是對於高併發流量的業務伺服器仍然是不能開啟的,會有很大性能損失,因此需要更nb的硬體防火牆。
關閉防火牆具體操作如下:
centos7預設已經使用firewall作為防火牆了
1.關閉防火牆
systemctl status firewalld #查看防火牆狀態
systemctl stop firewalld #關閉防火牆
systemctl disable firewalld#關閉防火牆開機啟動
systemctl is-enabled firewalld.service#檢查防火牆是否啟動
Linux中文顯示設置(防止中文亂碼)
此項優化為可選項,根據個人情況選擇是否調整Linux系統的字元集,字元集就是一套文字元號以及編碼。
Linux下常用字元集有:
GBK 實際企業應用較少
UTF-8 廣泛支持,MYSQL也使用UTF-8,企業廣泛使用
查看系統當前字元集
echo $LANG
locale
檢查xshell crt的字元集
命令修改字元集
vim /etc/profile.d/locale.sh
export LC_CTYPE=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
vim /etc/locale.conf
LANG=zh_CN.UTF-8
vim /etc/sysconfig/i18n
LANG=zh_CN.UTF-8
vim /etc/environment
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
英文版本
vim /etc/profile.d/locale.sh
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
vim /etc/locale.conf
LANG=en_US.UTF-8
vim /etc/sysconfig/i18n
LANG=en_US.UTF-8
vim /etc/environment
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
2.更改後查看系統語言變數
locale
亂碼核心解決辦法
1.系統字元集utf8
2.xshell字元集utf8
3.文件字元集一致zh_CN.UTF-8
df命令
df命令用於顯示磁碟分區上的可使用的磁碟空間。預設顯示單位為KB。可以利用該命令來獲取硬碟被占用了多少空間,目前還剩下多少空間等信息。
語法
df(選項)(參數)
-h或--human-readable:以可讀性較高的方式來顯示信息;
-k或--kilobytes:指定區塊大小為1024位元組;
-T或--print-type:顯示文件系統的類型;
--help:顯示幫助;
--version:顯示版本信息。
示例
查看系統磁碟設備,預設是KB為單位:
df
使用-h選項以KB以上的單位來顯示,可讀性高:
df -h
tree命令
tree參數
設置主機名
[root@yugo /tmp 11:04:42]#hostnamectl set-hostname pyyuc
[root@pyyuc ~ 11:05:12]#hostname
pyyuc
DNS
DNS(Domain Name System,功能變數名稱系統),萬維網上作為功能變數名稱和IP地址相互映射的一個分散式資料庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。
通過功能變數名稱,最終得到該功能變數名稱對應的IP地址的過程叫做功能變數名稱解析(或主機名解析)。
查看Linux的dns,唯一配置文件
配置文件
cat /etc/resolv.conf
dns伺服器地址
nameserver 119.29.29.29
nameserver 223.5.5.5
本地強制dns解析文件/etc/hosts
指定本地解析:
/etc/hosts
主機IP 主機名 主機別名
127.0.0.1 www.pyyuc.cn
nslookup命令
nslookup命令是常用功能變數名稱查詢工具,就是查DNS信息用的命令。
nslookup4有兩種工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用戶可以向功能變數名稱伺服器查詢各類主機、功能變數名稱的信息,或者輸出功能變數名稱中的主機列表。而在“非交互模式”下,用戶可以針對一個主機或功能變數名稱僅僅獲取特定的名稱或所需信息。
進入交互模式,直接輸入nslookup命令,不加任何參數,則直接進入交互模式,此時nslookup會連接到預設的功能變數名稱伺服器(即/etc/resolv.conf的第一個dns地址)。或者輸入nslookup -nameserver/ip。進入非交互模式,就直接輸入nslookup 功能變數名稱就可以了。
解析
nslookup www.oldboyedu.com
計劃任務crond服務
你每天是怎麼起床的?有的人有女朋友,,或是男朋友,,而我是被窮醒的,,,
什麼是計劃任務:
後臺運行,到了預定的時間就會自動執行的任務,前提是:事先手動將計劃任務設定好。這就用到了crond服務
crond服務相關的軟體包
[root@MiWiFi-R3-srv ~]# rpm -qa |grep cron
cronie-anacron-1.4.11-14.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-14.el7.x86_64
這些包在最小化安裝系統時就已經安裝了,並且會開機自啟動crond服務,併為我們提供好編寫計劃任務的crontab命令。
crontab命令被用來提交和管理用戶的需要周期性執行的任務,與windows下的計劃任務類似
語法
crontab (選項)(參數)
-e:編輯該用戶的計時器設置;
-l:列出該用戶的計時器設置;
-r:刪除該用戶的計時器設置;
-u<用戶名稱>:指定要設定計時器的用戶名稱。
存放定時任務的文件
/var/spool/cron
註意:
1 查看計劃任務的執行:tail -f /var/log/cron
2 寫計劃任務時,命令必須加上絕對路徑,否則會出現這種情況:從日誌中看,確實觸發了計劃任務的執行,但是命令卻沒有執行成功,比如* * * * * reboot就會出現這種情況,需要將reboot寫成/usr/sbin/reboot
- 計劃任務執行的命令 是否存在,軟體是否安裝
- 確保crontab服務運行
systemctl status cron
ps -ef|grep crond
- 檢測crontab是否開機啟動
systemctl is-enabled crond
crontab配置文件
在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
For details see man 4 crontabs
Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
分 時 日 月 周
crontab任務配置基本格式:
- command
分鐘(0-59) 小時(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令
第1列表示分鐘1~59 每分鐘用或者 /1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令
星號():代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
30 08 * * 每天8.30去上班
逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中杠(-):可以用整數之間的中杠表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如/10,如果用在minute欄位,表示每十分鐘執行一次。
/3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com 每隔三分鐘執行下時間同步
每天8.30上班
30 08 * * * 去上班
每天12下班回家睡覺
00 00 * * * 回家睡覺
實例
所有命令一定要用絕對路徑來寫!
每分鐘執行一次命令
命令
每小時的3,15分組執行命令
3,15 * * * * 命令
在上午8-11點的第3和第15分鐘執行
3,15 8-11 * * * 命令
每晚21:30執行命令
30 21 * * * 命令
沒周六、日的1:30執行命令
30 1 * * 6,0 命令
每周一到周五的凌晨1點,清空/tmp目錄的所有文件
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
每晚的21:30重啟nginx
30 21 * * * /opt/nginx/sbin/nginx -s reload
每月的1,10,22日的4:45重啟nginx
45 4 1,1,10,22 * * /opt/nginx/sbin/nginx -s reload
每個星期一的上午8點到11點的第3和15分鐘執行命令
3,15 8-11 * * 1 command
軟體包管理
軟體包是什麼
程式(軟體)組成部分:
二進位程式 可執行命令
庫 .so文件
配置文件 .conf
幫助文件 readme /usr/share/man
windows程式
如圖
macos程式
軟體包顧名思義就是將應用程式、配置文件和數據打包的產物,所有的linux發行版都採用了某種形式的軟體包系統,這使得linux軟體管理和在windows下一樣方便,suse、red hat、fedora等發行版都是用rpm包,Debian和Ubuntu則使用.deb格式的軟體包。
mysql-5-3-4.rpm
redis-3-4-3.rpm
nginx2-3-2.rpm
在早期系統運維中,安裝軟體是一件非常費事費力的事情。系統管理員不得不下載軟體源代碼編譯軟體,並且為了系統做各種調整。
儘管源代碼編譯形式的軟體增強了用戶定製的自由度,但是在小軟體上耗費精力是缺乏效率的,於是軟體包應運而生。
軟體包管理可以將管理員從無休止的相容問題中釋放。yum工具就可以自動搜索依賴關係,並執行安裝。
RPM軟體包管理器
軟體包管理器核心功能
1.製作軟體包 .rpm
2.安裝、卸載、升級、查詢、校驗
在 RPM(紅帽軟體包管理器)公佈之前,要想在 Linux 系統中安裝軟體只能採取源碼包 的方式安裝。早期在 Linux 系統中安裝程式是一件非常困難、耗費耐心的事情,而且大多數 的服務程式僅僅提供源代碼,需要運維人員自行編譯代碼並解決許多的軟體依賴關係,因此 要安裝好一個服務程式,運維人員需要具備豐富知識、高超的技能,甚至良好的耐心。而且在 安裝、升級、卸載服務程式時還要考慮到其他程式、庫的依賴關係,所以在進行校驗、安裝、 卸載、查詢、升級等管理軟體操作時難度都非常大。
RPM 機制則為解決這些問題而設計的。RPM 有點像 Windows 系統中的控制面板,會建 立統一的資料庫文件,詳細記錄軟體信息並能夠自動分析依賴關係。
實例
現在要安裝mysql
下載地址
https://dev.mysql.com/downloads/mysql/
安裝軟體的命令格式 rpm -ivh filename.rpm # i表示安裝 v顯示詳細過程 h以進度條顯示
升級軟體的命令格式 rpm -Uvh filename.rpm
卸載軟體的命令格式 rpm -e filename.rpm
查詢軟體描述信息的命令格式 rpm -qpi filename.rpm
列出軟體文件信息的命令格式 rpm -qpl filename.rpm
查詢文件屬於哪個 RPM 的命令格式 rpm -qf filename
rpm安裝軟體
下載軟體包
wget https://rpmfind.net/linux/centos/7.5.1804/os/x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm
安裝軟體包
[root@yugo /tmp 11:03:42]#rpm -ivh lrzsz-0.12.20-36.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:lrzsz-0.12.20-36.el7 ################################# [100%]
rpm查詢軟體
rpm -q lrzsz #查詢lrzsz是否安裝
rpm -qi lrzsz #查詢lrzsz包的說明信息
rpm -ql lrzsz #查詢lrzsz包生成的文件列表
rpm -qc nginx #查詢nginx安裝生成後的配置文件路徑
rpm -qf /etc/nginx/fastcgi.conf #查看這個文件由哪個rpm包安裝
rpm升級軟體
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE: 如果裝有老版本的,則升級;否則,則安裝;
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則升級;否則,退出;
rpm卸載軟體
rpm -e PACKAGE_NAME
需要手動解決依賴
不如 yum remove
rpm的依賴問題,因此不太好用
其一,難以刪除
[root@pyyuc /tmp 11:42:01]#rpm -e nginx
error: Failed dependencies:
nginx is needed by (installed) nginx-mod-mail-1:1.12.2-2.el7.x86_64
nginx is needed by (installed) nginx-mod-http-perl-1:1.12.2-2.el7.x86_64
nginx is needed by (installed) nginx-mod-http-xslt-filter-1:1.12.2-2.el7.x86_64
nginx is needed by (installed) nginx-mod-http-image-filter-1:1.12.2-2.el7.x86_64
nginx is needed by (installed) nginx-mod-stream-1:1.12.2-2.el7.x86_64
nginx is needed by (installed) nginx-mod-http-geoip-1:1.12.2-2.el7.x86_64
其二,難以安裝
[root@pyyuc /tmp 11:45:07]#rpm -ivh zsh-5.6.2-9.6.2.aarch64.rpm
warning: zsh-5.6.2-9.6.2.aarch64.rpm: Header V3 RSA/SHA256 Signature, key ID 3dbdc284: NOKEY
error: Failed dependencies:
ld-linux-aarch64.so.1()(64bit) is needed by zsh-5.6.2-9.6.2.aarch64
ld-linux-aarch64.so.1(GLIBC_2.17)(64bit) is needed by zsh-5.6.2-9.6.2.aarch64
libdl.so.2(GLIBC_2.17)(64bit) is needed by zsh-5.6.2-9.6.2.aarch64
libm.so.6(GLIBC_2.17)(64bit) is needed by zsh-5.6.2-9.6.2.aarch64
libncursesw.so.6()(64bit) is needed by zsh-5.6.2-9.6.2.aarch64
libtinfo.so.6()(64bit) is needed by zsh-5.6.2-9.6.2.aarch64
yum命令
yum命令是在Fedora和RedHat以及SUSE中基於rpm的軟體包管理器,它可以使系統管理人員交互和自動化地更細與管理RPM軟體包,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
儘管 RPM 能夠幫助用戶查詢軟體相關的依賴關係,但問題還是要運維人員自己來解決, 而有些大型軟體可能與數十個程式都有依賴關係,在這種情況下安裝軟體會是非常痛苦的。 Yum 軟體倉庫便是為了進一步降低軟體安裝難度和複雜度而設計的技術。Yum 軟體倉庫可以 根據用戶的要求分析出所需軟體包及其相關的依賴關係,然後自動從伺服器下載軟體包並安 裝到系統。
Yum 軟體倉庫中的 RPM 軟體包可以是由紅帽官方發佈的,也可以是第三方發佈的,當 然也可以是自己編寫的。
對比windows下的軟體管理工具
yum提供了查找、安裝、刪除某一個、一組甚至全部軟體包的命令,而且命令簡潔而又好記。
yum(選項)(參數)
-h:顯示幫助信息;
-y:對所有的提問都回答“yes”;
-c:指定配置文件;
-q:安靜模式;
-v:詳細模式;
-d:設置調試等級(0-10);
-e:設置錯誤等級(0-10);
-R:設置yum處理一個命令的最大等待時間;
-C:完全從緩存中運行,而不去下載或者更新任何頭文件。
實例
部分常用的命令包括:
自動搜索最快鏡像插件 yum install yum-fastestmirror
yum源配置
什麼是yum源?
Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
說到yum源就必須說到linux系統中特有的依賴關係問題,yum就是為瞭解決依賴關係而存在的。yum源就相當是一個目錄項,當我們使用yum機制安裝軟體時,若需要安裝依賴軟體,則yum機制就會根據在yum源中定義好的路徑查找依賴軟體,並將依賴軟體安裝好。
YUM是“Yellow dog Updater, Modified”的縮寫,是一個軟體包管理器,YUM從指定的地方(相關網站的rpm包地址或本地的rpm路徑)自動下載RPM包並且安裝,能夠很好的解決依賴關係問題。
YUM的基本工作機制如下:
伺服器端:在伺服器上面存放了所有的RPM軟體包,然後以相關的功能去分析每個RPM文件的依賴性關係,將這些數據記錄成文件存放在伺服器的某特定目錄內。
客戶端:如果需要安裝某個軟體時,先下載伺服器上面記錄的依賴性關係文件(可通過WWW或FTP方式),通過對伺服器端下載的紀錄數據進行分析,然後取得所有相關的軟體,一次全部下載下來進行安裝。
yum源的目錄
進入yum源目錄
cd /etc/yum.repos.d/
查看yum源文件
ls -l
配置阿裡雲yum源
1.好習慣,備份yum源
mkdir repo_bak
mv *.repo repo_bak/
2.下載阿裡雲repo文件
wget http://mirrors.aliyun.com/repo/Centos-7.repo
3.清空yum緩存並且生成新的yum緩存
yum clean all
yum makecache
4.安裝軟體擴展源
yum install -y epel-release
yum repolist all 列出所有倉庫
yum list all 列出倉庫所有軟體包
yum info 軟體包名 查看軟體包信息
yum install 軟體包名 安裝軟體包
yum reinstall 軟體包名 重新安裝軟體包
yum update 軟體包名 升級軟體包
yum remove 軟體包名 移除軟體包
yum clean all 清楚所有倉庫緩存
yum check-update 檢查可以更新的軟體包
yum grouplist 查看系統中已安裝的軟體包
yum groupinstall 軟體包組 安裝軟體包組
系統服務管理命令
如果大家之前學習或者使用過RHEL6系統,應該已經習慣了service、chkconfig等命令來管理系統服務,
但是在RHEL7系統中改變了systemctl來管理系統服務。
設置開機啟動相關
必須掌握的/etc下的linux目錄知識
/etc:
這個目錄用來存放所有的系統管理所需要的配置文件和子目錄。
網卡配置文件
/etc/sysconfig/network-script/ifcfg-eth0
修改機器名以及網卡,網管等配置
/etc/sysconfig/network
linux的dns客戶端配置文件,實現功能變數名稱和ip的互相解析
/etc/resolv.conf
本地dns解析文件,設定ip和功能變數名稱的對應解析,開發測試最常用的臨時功能變數名稱解析
/etc/hosts/
系統全局環境變數永久生效的配置文件,如PATH等
/etc/profile
用戶的環境變數
~/.bash_profile
~/.bashrc
存放可執行程式的目錄,大多是系統管理命令
/usr/sbin
存放用戶自編譯安裝軟體的目錄 > 等同於C:\Program files (windows)
/usr/local
關於處理器的信息,還可以top指令查看
/proc/cpuinfo
查看記憶體信息,還可以free -m
/proc/meminfo
Linux下安裝程式的方法
rpm -ivh 包名.rpm 需要手動解決依賴關係
yum install 包名 yum自動處理依賴關係
編譯安裝(源碼安裝)
安裝Lrzsz
安裝此軟體,即可拖拽上傳下載linux代碼到windows
yum install lrzsz
伺服器無法上網錯誤
1.yum報錯
Error couldn't resolve host 'mirrorlist.centos.org'
2.ping www.baidu.com 看是否能上網
3.如果百度不通,ping ip通了
ping 119.29.29.29 ,說明dns有問題