Centos的使用札記

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來標識,無實際硬盤讀寫)來代替網絡進行進程間通信的方式
    限制:
    1. 僅限同一主機內的進程間通信
    2. 速度比共享內存方式要慢
    3. 無法採用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
  1. -j target-chain 調用目標自定義規則鏈(返回時返回被調用規則)
  1. user-defined chain (用戶自定義鏈)
    -j chainname 進入用戶自定義鏈處理
  2. iptables-extensions defined target(iptables拓展目標)
    -m matching-module-name -j target-name
  3. special values(最常用-特殊目標)
    -j values
    【values】
    ACCEPT 允許(允許通過),並進入下一鏈繼續處理
    DROP 禁止(禁止通過),直接丟棄數據包
    RETURN 返回(忽略本鏈),忽略本鏈的處理,並返回上一級鏈的下一條規則處理
  1. -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
系統服務

環境變量

日誌定位

用戶管理

  1. 區分應用權限時的用戶
    儘量最小權限,如果一定要允許本地登錄,則給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

利用Proxychains實現對linux軟件的代理訪問(部分軟件不支持)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章