Centos使用
1. Shell基礎
1.1 Shell類型
- bash (Bourne-Again Shell, linux默認shell,sh的增強版 包括centos ubuntu,sh軟鏈到bash, GNU組織研發) http://www.gnu.org/software/bash/manual/html_node/index.html
- ash (Almquist shell,Kenneth Almquist與1980年代,除OpenWrt等嵌入式linux使用外,幾乎被bash取代,但近來由docker alpine系統使用,也新增的應用場景) https://www.in-ulm.de/~mascheck/various/ash/
- csh (C Shell,加州大學伯克利分校研發)
- sh (歷史:Bourne Shell, unix默認shell, bell實驗室研發)
# 查看所有的shell
cat /etc/shells
# 查看當前使用的shell
echo $SHELL
1.2 命令符
- 管道符(pipe character) | 第一個命令的輸出作爲第二個命令的輸入
https://en.wikipedia.org/wiki/Pipeline_(Unix)
- 重定向符(通過修改進程打開文件列表中對應描述符對應的實際文件來實現,可在/proc//fd中看到實際的重定向情況)
# [文件描述符]>[文件名|&文件描述符] >表示清空原有文件的數據 >>表示追加到原有內容的後面 輸入文件默認爲標準輸出(STDOUT 1)
命令 > 文件:將標準輸出重定向到一個文件中(清空原有文件的數據)
命令 2> 文件:將錯誤輸出重定向到一個文件中(清空原有文件的數據)
命令 >> 文件:將標準輸出重定向到一個文件中(追加到原有內容的後面)
命令 2>> 文件:將錯誤準輸出重定向到一個文件中(追加到原有內容的後面)
命令 >> 文件 2>&1 或 命令 &> 文件:將標準輸出與錯誤輸出共同寫入到文件中(追加到原有內容的後面)
# 雙重重定向 tee
將輸出重定向到標準輸出的同時也重定向到文件
http://blog.csdn.net/Wee_Mita/article/details/52728285
2. 環境
PATH 系統用於尋找二進制可執行文件的路徑 (/etc/profile.d/配置 profile文件會因系統升級而被還原)
LD_LIBRARY_PATH (/etc/ld.so.conf.d/配置 防止全局污染)
行內有效的環境變量
SQLITE3_BINARY_SITE=http://npm.taobao.org/mirrors/sqlite3 npm install sqlite3
系統配置參數
系統配置參數位於 /etc/sysctl.conf文件,通常不建議修改此文件,因此文件會在系統升級後被還原
建議用戶配置放置於/etc/sysctl.d/文件夾內
## 臨時配置
sysctl -w net.ipv4.tcp_keepalive_time = 900
## 永久配置
配置寫入/etc/sysctl.d/文件夾
sysctl -p /etc/sysctl.d/xxx.conf
注意,sysctl -p 不加參數只會應用/etc/sysctl.conf文件內的配置,而不會應用/etc/sysctl.d/內的配置,/etc/sysctl.d/的配置只會在啓動時檢查,重啓生效
2. 文件管理
- 查看文件夾大小
du -sh
- 系統間文件複製
#建議 處於安全考慮,應使用rsync賬戶進行備份,因ssh權限過大 -r表示遞歸 -l表示保持軟鏈 --progress可用於命令行輸入時顯示進度和速度
yum -y install rsync
## -l 保留軟鏈 -t保留修改時間 -p保留權限 -g 保留group -o 保留onwer -v顯示傳輸細節 文件名 -P顯示每個文件的傳輸進度
## --exclude 'sources' 排除文件夾
rsync -rltpgov [源] [目標]
rsync -rl lighttpd-mirrors [email protected]:/data/docker/data/volume/ (複製可能出現權限丟失)
rsync -rl -e 'ssh -p 46358' /data/* [email protected]:/data/ #修改端口發送
#軟鏈會丟失,複製原始文件
scp -r /data/docker-volume/mariadb-1 [email protected]:/data/docker-volume/ (速度可達到80-100M/s)
- 文件下載
## 最常見的下載
curl -o gradle-5.2.1-bin.zip https://mirrors.d.com/gradle/gradle-5.2.1-bin.zip
## 如果鏈接地址包含 302跳轉
curl -L -o gradle-5.2.1-bin.zip https://mirrors.d.com/gradle/gradle-5.2.1-bin.zip
## 如果鏈接地址爲採用受信任的賬戶簽發
curl -k -o gradle-5.2.1-bin.zip https://mirrors.d.com/gradle/gradle-5.2.1-bin.zip
## 如果目標地址要求http basic auth
curl --user username:password -o gradle-5.2.1-bin.zip https://mirrors.d.com/gradle/gradle-5.2.1-bin.zip
## 如果目標地址cert身份驗證
3. 進程間通信(IPC)
- 域套接字(AF_UNIX)
UNIX域套接字 (Unix Domain Socket,UDS) 通常爲.sock擴展名,使用文件系統API(但只用inode來標識,無實際硬盤讀寫)來代替網絡進行進程間通信的方式
限制:- 僅限同一主機內的進程間通信
- 速度比共享內存方式要慢
- 無法採用tcpdump方式進行監聽調試(因無實際數據包經過物理或虛擬網卡)
優勢:
1.無需網絡協議棧,無需打包拆包,校驗和應答,性能好,快,傳統同主機性能爲internet socket的兩倍
2.可利用文件權限做權限控制
http://www.bubuko.com/infodetail-1286548.html
http://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-unix-domain-socket/
https://blog.csdn.net/timebomb/article/details/38417547
https://stackoverflow.com/questions/36118693/does-unix-domain-socket-perform-any-file-system-read-write/36118927#36118927
- 管道和命名管道
參見命令提示符 - 消息隊列
- 共享內存(SHM)
- internet socket
- 文件
- 同步機制
- 內存映射文件
磁盤調整
lvm管理
umount /home #卸載邏輯卷
/etc/fstab #刪除掛載信息 否則重啓會自動掛載
lvremove /dev/centos/home #使用lvpath刪除邏輯卷 lvdispay查看
lvextend -L +40G /dev/centos/root #增加40G (非xfs文件系統)
lvresize -L +100G /dev/centos/root #增加100G (非xfs文件系統)
resize2fs /dev/mapper/centos-root(非xfs文件系統)
xfs_growfs /dev/mapper/centos-root (xfs文件系統)
分區格式化
mkfs.xfs -f /dev/sdb1
分區掛載到目錄
mount /dev/sdb1 /data/nfs
網絡管理
- 查看端口對應程序
netstat -nlp | grep 179
計劃任務
yum install crontabs
vi /etc/pam.d/crond required改爲sufficient
https://my.oschina.net/thmz/blog/468327
/etc/crontab # 系統任務調度的配置文件(不建議使用)
/var/spool/cron/username # 用戶任務調度的配置文件 應使用crontab -e編輯 不建議直接修改
/etc/crontab 格式
# 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 -e -u user 格式(無user)
# 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
# | | | | |
# * * * * * command to be executed
常用調試手段,輸出echo cron中的環境變量 $PATH >> /data/path.log
- 計劃任務手動開啓
/usr/sbin/crond
防火牆管理
iptables
查看規則 -t表名 -n數字形式顯示ip和端口 -v顯示詳細信息(例如接口名) --line-numbers 顯示rule-num
iptables -t nat --list -nv --line-numbers
- -j target-chain 調用目標自定義規則鏈(返回時返回被調用規則)
- user-defined chain (用戶自定義鏈)
-j chainname 進入用戶自定義鏈處理 - iptables-extensions defined target(iptables拓展目標)
-m matching-module-name -j target-name - special values(最常用-特殊目標)
-j values
【values】
ACCEPT 允許(允許通過),並進入下一鏈繼續處理
DROP 禁止(禁止通過),直接丟棄數據包
RETURN 返回(忽略本鏈),忽略本鏈的處理,並返回上一級鏈的下一條規則處理
- -g target-chain 跳轉到目標自定義規則鏈(返回時返回前一個由-j調用的規則,而不一定是前一個規則)
日誌查看
## 以utc時間查看系統服務日誌
journalctl --utc
## 查看引導進程日誌
journalctl -b
## 查看某段時間範圍內的日誌
journalctl --since "2015-01-10" --until "2015-01-11 03:00" --utc
journalctl --since yesterday --utc
## 按時間倒序查看
journalctl -r
## 查看某個服務的日誌
journalctl -u nginx.service
## 看日誌級別查看
journalctl -p err
開機自啓
/etc/rc.local
系統服務
環境變量
日誌定位
用戶管理
- 區分應用權限時的用戶
儘量最小權限,如果一定要允許本地登錄,則給shell和home,設置密碼爲空,並禁止空密碼用戶的遠程登錄
強制重啓
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
桌面安裝
vnc VS xrdp (推薦使用xrdp)
https://www.linuxidc.com/Linux/2017-09/147112.htm
Ubuntu系統
apt-get install x-window-system-core(圖形基礎)
apt-get install gdm(登錄管理器)
apt-get install ubuntu-desktop
apt-get install unity (需先安裝ubuntu-desktop)
xrdp (RDP,remote desktop protocol服務包,轉換爲vnc協議)
console
Linux桌面環境
|-X Display Manager(XDM)
|-gdm https://wiki.gnome.org/Projects/GDM
|-kdm https://www.kde.org/
|-xdm https://wiki.archlinux.org/index.php/XDM
|-lightdm (Light Display Manager)
|-X Server (Linux X Window System) 窗口管理器 版本11 通常稱爲X11 使用startx腳本啓動
|-xorg 依賴(xserver-xorg) (不具備遠程訪問的能力)
|-x-window-system-core(現在一般不需要了)
|-ubuntu-desktop(桌面環境)
|-unity(ubuntu17後默認不裝,Canonical開發,已經放棄開發)
|-Kubunut-desktop(桌面環境, kdm)
|-gnome-core
|-gnome2
|-gnome3 (桌面環境)
|-gnome-session (會話管理)
|-Xfce
|-Xubuntu-desktop(桌面環境) https://xubuntu.org/
|-X11rdp
xserver-common
|-xserver-xorg-core
|-xserver-xorg
|-xorg (XOrg Foundation Open Source Public Implementatio 是一個X Server的實現)
MATE
Cinnamon
vnc4server (vnc的服務端,RFB協議)
tightvncserver
x11vnc
sudo apt-get install xubuntu-desktop
xrdp
軟件管理
## Radhat 對應的軟件包 RPM(Redhat Package Manager) YUM(Yellow dog Updater, Modified, 最早用於yellow dog linux操作系統)
[root@lineto ~]# rpm -qf /usr/bin/vmstat
procps-ng-3.3.10-10.el7.x86_64
## 查找包含某個命令的yum包
[root@docker140 ~]# yum provides */nslookup
1:bash-completion-extras-2.1-11.el7.noarch : Additional programmable completions
: for Bash
Repo : epel
Matched from:
Filename : /usr/share/bash-completion/completions/nslookup
32:bind-utils-9.9.4-61.el7.x86_64 : Utilities for querying DNS name servers
Repo : base
Matched from:
Filename : /usr/bin/nslookup
## Ubuntu APT (Advanced Packaging Tool) dpkg(Debain Package)
dpkg -l | grep name
apt list --installed
## Alpine APK (Alpine Linux Package Keeper, called, a-packs)
## OpenWrt opkg (Open PacKaGe management) fork與 ipkg(Itsy PacKaGe management system)項目 因此其軟件包擴展名爲ipk,效仿與ubuntu dpkg
## DNF (Fedora)
## Tiny DNF, (Tiny Dandified Yum) Vmware PhotonOS
## Moc OS (brew)
網絡代理
利用SSH加速國外訪問(SOCKS5代理)
ssh -f -C2qTnN -D 127.0.0.1:1080 root@國外服務器IP -p Port
使用privoxy對SOCKS代理進行HTTP代理轉換, 並利用全局變量設置代理
https://blog.csdn.net/brenda2314/article/details/88320012