#### ssh免交互生成密鑰及遠程ssh
```
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh -o stricthostkeychecking=no root@ip -p port
```
#### Centos 4T以上硬盤分區
感謝[codemanship](https://blog.csdn.net/codemanship/article/details/47056673 "codemanship")
```
parted /dev/sde
p(打印)
mklabel gpt
mkpart primary 0 -1
Ignore
quit
mkfs.ext4 /dev/sde1
```
#### iotop使用
```shell
# 選項
-o:只顯示有io操作的進程
-b:批量顯示,無交互,主要用作記錄到文件。
-n NUM:顯示NUM次,主要用于非交互式模式。
-d SEC:間隔SEC秒顯示一次。
-p PID:監控的進程pid。
-u USER:監控的進程用戶。
# iotop常用快捷鍵
左右箭頭:改變排序方式,默認是按IO排序。
r:改變排序順序。
o:只顯示有IO輸出的進程。
p:進程/線程的顯示方式的切換。
a:顯示累積使用量。
q:退出。
```
#### MegaCLI 使用
```
# 查看每塊硬盤的狀態,主要看是否重建完成和是否正常加入
# 如果沒有加入,證明里面有臟raid信息,建議使用MegaRaid操作
/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL|grep 'Firmware state'
```
#### Centos安裝中文
```
CentOS6:yum -y install fonts-chinese
CentOS7: yum groupinstall "fonts"
```
#### Centos7 修改時區
```
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime</pre>
```
#### Centos7 修改主機名
```
hostnamectl set-hostname C7-Basic
```
#### vim編輯器中文亂碼
```
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
```
查看正常是系統字符集,編輯是vim字符集
#### 系統歷史命令要加大
>HISTFILESIZE與HISTSIZE的區別
在linux系統中,history命令可以輸出歷史命令,歷史命令默認保存在文件~/.bash_history中。
>HISTFILESIZE 與 HISTSIZE都是history命令需要用到的兩個shell變量,這兩個變量到底有什么區別呢?
>HISTFILESIZE 定義了在 .bash_history 中保存命令的記錄總數,可以理解為.bash_history文件中最多只有HISTFILESIZE行
>HISTSIZE 定義了 history 命令輸出的記錄數,即輸出.bash_history文件中的最后HISTSIZE行
```shell
HISTFILESIZE=4000
HISTSIZE=4000
```
#### CentOS 7添加開機啟動服務/腳本
##### 默認
```shell
systemctl enable jenkins.service #設置jenkins服務為自啟動服務
sysstemctl start jenkins.service #啟動jenkins服務
```
##### 傳統方式一
```shell
# 賦予腳本可執行權限(/opt/script/autostart.sh是你的腳本路徑)
chmod +x /opt/script/autostart.sh
# 打開/etc/rc.d/rc/local文件,在末尾增加如下內容
/opt/script/autostart.sh
# 在centos7中,/etc/rc.d/rc.local的權限被降低了,所以需要執行如下命令賦予其可執行權限
chmod +x /etc/rc.d/rc.local
```
##### 傳統方式二
```shell
# 將腳本移動到/etc/rc.d/init.d目錄下
mv /opt/script/autostart.sh /etc/rc.d/init.d
# 增加腳本的可執行權限
chmod +x /etc/rc.d/init.d/autostart.sh
# 添加腳本到開機自動啟動項目中
cd /etc/rc.d/init.d
chkconfig --add autostart.sh
chkconfig autostart.sh on
```
[以上內容摘自Linux公社](https://www.linuxidc.com/Linux/2016-12/138079.htm "以上內容摘自Linux公社")
#### 切割文件
5位,數字,100行一個文件
```
split -a 5 -d -l 100 /data/bak_resouce/20190319_kimissbbs.sql kmbbs_
```
#### 文件系統只讀
一般沒什么用,如果系統運行時出現,先去排查系統磁盤問題
```
mount -o rw,remount /
```
#### Nginx awk分析
```
awk '{a[$2]++;if(a[$2]>100){b[$2]++}}END{for(i in b){print i,a[i]}}' my.access.log
```
#### Centos7 常用命令
```shell
# 獲取主機名
hostnamectl
# 修改主機名
hostnamectl set-hostname dev
或
vim /etc/hostname
```
#### shell將文本轉換為整齊的表格,格式化
```shell
命令: Column
使用的參數:
-t :表格,默認以空格間隔
-s:需要配合-t使用,指定分隔符
```
#### Xargs向后引用
```shell
xargs 后向引用 xargs -i cp {} /tmp
```
#### 臨時增加IP
```shell
ifconfig eth0 192.168.1.1 netmask 255.255.255.0
```
#### 單網卡多IP
```shell
# 臨時增加
ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 up
# 永久增加
# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT="yes"
IPADDR=192.168.1.1
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
# 永久增加2
IPADDR0="192.168.1.150"
IPADDR1="192.168.1.151"
IPADDR2="192.168.1.152"
```
以上內容來自[敲代碼的C羅](https://blog.csdn.net/lv302677589/article/details/79087893 "敲代碼的C羅")
#### 命令行格式
```shell
column -t
使用的參數:
-t :表格,默認以空格間隔
-s:需要配合-t使用,指定分隔符
```
#### 快速掃描端口
```shell
nc -nvz 192.168.1.100 1-65535
```
#### 獲取當前IDC出口IP
```shell
curl ifconfig.me
curl http://members.3322.org/dyndns/getip
elinks www.123cha.com | awk -F '[][]' '/ip:/{print $4}'
```
#### 查看網絡運行情況
##### 獲取連接情況
```shell
ss -ant|awk '{++S[$1]}END{for (a in S)print a,S[a]}'
```
注釋:
```shell
{++S[$2]} 將某列作為數據存進S
END{for (a in S) 結束后,執行for循環
print a,S[a]} 打印數據中的元素和統計數
```
>http://blog.csdn.net/hustsselbj/article/details/47438781
#### 系統中統計連接數前10的IP
```shell
ss -ant|awk -F '[ :]+' '{print $4}'|awk '/^[0-9]/{++S[$0]}END{for (a in S)print a,S[a]}'|sort -nk 2 -r |head -10|awk '{sum+=$2}END{print sum}'
1.用分號和空格間隔,獲取IP列(去掉端口)
2.把內容輸入到awk隊列,然后自增后輸出到第二列
3.sort基于第2列,降序排列
4.head 取前10行
5.把第二列統計
#如果需要統計所有數量,把head -10去掉就可以了
```
#### 隨機生成強密碼
方法一 使用openssl
```shell
for i in `seq 100`;do openssl rand -base64 12;done;
```
方法二 使用mkpasswd
摘自[三口酥屋](http://blog.csdn.net/liangdsh "三口酥屋"),感謝分享
```shell
#光盤自帶
yum install expect tcl
```
```shell
-l (密碼的長度定義, 默認是 9)
-d (數字個數, 默認是 2)
-c (小寫字符, 默認是 3)
-C (大寫字符, 默認是 2)
-s (特殊字符, 默認是 1)
-v (詳細。。。)
```
創建了一個長度為20位,包括數字個數,包含小寫字母個數,包含大寫字母個數,包含特殊符號個數。
```shell
mkpasswd -l 20 -d 5 -c 5 -C 5 -s 5
0f>pLe27GF8\tRA$v(/9
```
修改一個用戶的密碼為強密碼
```shell
mkpasswd -l 20 -d 5 -c 5 -C 5 -s 5 -v ding
spawn /bin/passwd boxhill
Changing password for user boxhill.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
password for ding is \nP}2UPF7jf]O:51{yf5
```
#### 查看系統硬件資源
服務器品牌和型號
```shell
dmidecode |grep -A4 'System Information'
```
查看主板信息
```shell
dmidecode -t 2
```
查詢內存信息
```shell
dmidecode -t 16
```
查看當前內存數和插槽數
```shell
dmidecode|grep -P -A5 "Memory Device" |grep Size
```
查看內存插槽詳細信息
```shell
dmidecode -t 17
```
查看CPU信息
```shell
dmidecode -t 4
```
查看RAID或磁盤信息
```shell
cat /proc/scsi/scsi
```
查看內存速率
```shell
dmidecode|grep -A16 "Memory Device"|grep 'Speed'
```
#### 常用命令
```
系統
# uname -a # 查看內核/操作系統/CPU信息
# head -n 1 /etc/issue # 查看操作系統版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看計算機名
# lspci -tv # 列出所有PCI設備
# lsusb -tv # 列出所有USB設備
# lsmod # 列出加載的內核模塊
# env # 查看環境變量
資源
# free -m # 查看內存使用量和交換區使用量
# df -h # 查看各分區使用情況
# du -sh <目錄名> # 查看指定目錄的大小
# grep MemTotal /proc/meminfo # 查看內存總量
# grep MemFree /proc/meminfo # 查看空閑內存量
# uptime # 查看系統運行時間、用戶數、負載
# cat /proc/loadavg # 查看系統負載
磁盤和分區
# mount | column -t # 查看掛接的分區狀態
# fdisk -l # 查看所有分區
# swapon -s # 查看所有交換分區
# hdparm -i /dev/hda # 查看磁盤參數(僅適用于IDE設備)
# dmesg | grep IDE # 查看啟動時IDE設備檢測狀況
網絡
# ifconfig # 查看所有網絡接口的屬性
# iptables -L # 查看防火墻設置
# route -n # 查看路由表
# netstat -lntp # 查看所有監聽端口
# netstat -antp # 查看所有已經建立的連接
# netstat -s # 查看網絡統計信息
進程
# ps -ef # 查看所有進程
# top # 實時顯示進程狀態
用戶
# w # 查看活動用戶
# id <用戶名> # 查看指定用戶信息
# last # 查看用戶登錄日志
# cut -d: -f1 /etc/passwd # 查看系統所有用戶
# cut -d: -f1 /etc/group # 查看系統所有組
# crontab -l # 查看當前用戶的計劃任務
服務
# chkconfig --list # 列出所有系統服務
# chkconfig --list | grep on # 列出所有啟動的系統服務
程序
# rpm -qa # 查看所有安裝的軟件包
其他常用命令整理如下:
查看主板的序列號:dmidecode | grep -i 'serial number'
用硬件檢測程序kuduz探測新硬件:service kudzu start ( or restart)
查看CPU信息:cat /proc/cpuinfo [dmesg | grep -i 'cpu'][dmidecode -t processor]
查看內存信息:cat /proc/meminfo [free -m][vmstat]
查看板卡信息:cat /proc/pci
查看顯卡/聲卡信息:lspci |grep -i 'VGA'[dmesg | grep -i 'VGA']
查看網卡信息:dmesg | grep -i 'eth'[cat /etc/sysconfig/hwconf | grep -i eth][lspci | grep -i 'eth']
查看PCI信息:lspci (相比cat /proc/pci更直觀)
查看USB設備:cat /proc/bus/usb/devices
查看鍵盤和鼠標:cat /proc/bus/input/devices
查看系統硬盤信息和使用情況:fdisk & disk – l & df
查看各設備的中斷請求(IRQ):cat /proc/interrupts
查看系統體系結構:uname -a
查看及啟動系統的32位或64位內核模式:isalist –v [isainfo –v][isainfo –b]
查看硬件信息,包括bios、cpu、內存等信息:dmidecode
測定當前的顯示器刷新頻率:/usr/sbin/ffbconfig –rev ?
查看系統配置:/usr/platform/sun4u/sbin/prtdiag –v
查看當前系統中已經應用的補丁:showrev –p
顯示當前的運行級別:who –rH
查看當前的bind版本信息:nslookup –class=chaos –q=txt version.bind
查看硬件信息:dmesg | more
顯示外設信息, 如usb,網卡等信息:lspci
查看已加載的驅動:
lsnod
lshw
查看當前處理器的類型和速度(主頻):psrinfo -v
打印當前的OBP版本號:prtconf -v
查看硬盤物理信息(vendor, RPM, Capacity):iostat –E
查看磁盤的幾何參數和分區信息:prtvtoc /dev/rdsk/c0t0d0s
顯示已經使用和未使用的i-node數目:
df –F ufs –o i
isalist –v
對于“/proc”中文件可使用文件查看命令瀏覽其內容,文件中包含系統特定信息:
主機CPU信息:Cpuinfo
主機DMA通道信息:Dma
文件系統信息:Filesystems
主機中斷信息:Interrupts
主機I/O端口號信息:Ioprots
主機內存信息:Meninfo
Linux內存版本信息:Version
備注: proc – process information pseudo-filesystem 進程信息偽裝文件系統
```
#### 機房帶寬測速
大促來臨,需要為外網IP增加帶寬,需要測試是否生效
##### 軟件選擇
```shell
# speedtest-cli
https://github.com/sivel/speedtest-cli
# 下載
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
```
執行
```shell
# 直接執行測試,自動選擇節點
python speedtest.py
# 查看所有節點,獲取ID
./speedtest.py --list|grep -i beijing
# 指定節點測試
python speedtest.py --server 18462
```
#### 增加前后對比
增加前
```shell
Download: 458.67 Mbit/s
Upload: 154.39 Mbit/s
```
增加后
```shell
Download: 458.67 Mbit/s
Upload: 154.39 Mbit/s
```
#### 備注
>機房通常在帶寬充足的時候會放開限制,當帶寬資源不足時,才會限制帶寬,所以,如果你的帶寬是300M,可能測試出500M的數據也是正常,可以和機房確認
>speedtest-cli測試不是很準確,需要多次測量求平均值
>iperf是另外的工具,機房建議使用,有興趣的可以學習下
https://iperf.fr/
#### /var/logs/文件解讀
```shell
var/log/messages #包括整體系統信息,其中也包含系統啟動期間的日志。
#此外,mail,cron,daemon,kern和auth等內容也記錄在var/log/messages日志中。
/var/log/dmesg #包含內核緩沖信息(kernel ring buffer)。在系統啟動時,會在屏幕上顯示許多與硬件有關的信息。可以用dmesg查看它們。
/var/log/auth.log #包含系統授權信息,包括用戶登錄和使用的權限機制等。
/var/log/boot.log #包含系統啟動時的日志。
/var/log/daemon.log #包含各種系統后臺守護進程日志信息。
/var/log/dpkg.log #包括安裝或dpkg命令清除軟件包的日志。
/var/log/kern.log #包含內核產生的日志,有助于在定制內核時解決問題。
/var/log/lastlog #記錄所有用戶的最近信息。這不是一個ASCII文件,因此需要用lastlog命令查看內容。
/var/log/maillog /var/log/mail.log #包含來著系統運行電子郵件服務器的日志信息。例如,sendmail日志信息就全部送到這個文件中。
/var/log/user.log #記錄所有等級用戶信息的日志。
/var/log/Xorg.x.log #來自X的日志信息。
/var/log/alternatives.log #更新替代信息都記錄在這個文件中。
/var/log/btmp #記錄所有失敗登錄信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
/var/log/cups #涉及所有打印信息的日志。
/var/log/anaconda.log #在安裝Linux時,所有安裝信息都儲存在這個文件中。
/var/log/yum.log #包含使用yum安裝的軟件包信息。
/var/log/cron #每當cron進程開始一個工作時,就會將相關信息記錄在這個文件中。
/var/log/secure #包含驗證和授權方面信息。例如,sshd會將所有信息記錄(其中包括失敗登錄)在這里。
/var/log/wtmp或/var/log/utmp #包含登錄信息。使用wtmp可以找出誰正在登陸進入系統,誰使用命令顯示這個文件或信息等。
/var/log/faillog #包含用戶登錄失敗信息。此外,錯誤登錄命令也會記錄在本文件中。
```
除了上述Log文件以外, /var/log還基于系統的具體應用包含以下一些子目錄:
```
/var/log/httpd/或/var/log/apache2 #包含服務器access_log和error_log信息。
/var/log/lighttpd/ #包含light HTTPD的access_log和error_log。
/var/log/mail/ #這個子目錄包含郵件服務器的額外日志。
/var/log/prelink/ #包含.so文件被prelink修改的信息。
/var/log/audit/ #包含被 Linux audit daemon儲存的信息。
/var/log/samba/ #包含由samba存儲的信息。
/var/log/sa/ #包含每日由sysstat軟件包收集的sar文件。
/var/log/sssd/ #用于守護進程安全服務。
```
除了手動存檔和清除這些日志文件以外,還可以使用logrotate在文件達到一定大小后自動刪除。可以嘗試用vi,tail,grep和less等命令查看這些日志文件。
#### 解鎖Fail2ban封鎖的一個IP,sshd是配置文件中的域名字
```
fail2ban-client set sshd unbanip 10.15.203.50
```
#### 用法
```
find . -mtime N
# 實際上你應該這樣理解..
N * 24
+1 內表示 1 * 24 +24小時以外..
+0 才表示 0 * 24 +24小時以外
1 表示 1*24 + 24 到 24 之間..
0 表示 0*24 + 24 到 0 之間..
-1 表示 0*24 +24 內,甚至為未來時間...
```
記住0也是自然數....

#### 過濾目錄
-path ./a -o -path ./b -prune -o -type f
#### 磁盤測速hdparm
```shell
-a<快取分區> 設定讀取文件時,預先存入塊區的分區數,若不加上<快取分區>選項,則顯示目前的設定。
-A<0或1> 啟動或關閉讀取文件時的快取功能。
-c<I/O模式> 設定IDE32位I/O模式。
-C 檢測IDE硬盤的電源管理模式。
-d<0或1> 設定磁盤的DMA模式。
-f 將內存緩沖區的數據寫入硬盤,并清楚緩沖區。
-g 顯示硬盤的磁軌,磁頭,磁區等參數。
-h 顯示幫助。
-i 顯示硬盤的硬件規格信息,這些信息是在開機時由硬盤本身所提供。
-I 直接讀取硬盤所提供的硬件規格信息。
-k<0或1> 重設硬盤時,保留-dmu參數的設定。
-K<0或1> 重設硬盤時,保留-APSWXZ參數的設定。
-m<磁區數> 設定硬盤多重分區存取的分區數。
-n<0或1> 忽略硬盤寫入時所發生的錯誤。
-p<PIO模式> 設定硬盤的PIO模式。
-P<磁區數> 設定硬盤內部快取的分區數。
-q 在執行后續的參數時,不在屏幕上顯示任何信息。
-r<0或1> 設定硬盤的讀寫模式。
-S<時間> 設定硬盤進入省電模式前的等待時間。
-t 評估硬盤的讀取效率(不經過磁盤cache)。
-T 平估硬盤快取的讀取效率。
-u<0或1> 在硬盤存取時,允許其他中斷要求同時執行。
-v 顯示硬盤的相關設定。
-W<0或1> 設定硬盤的寫入快取。
-X<傳輸模式> 設定硬盤的傳輸模式。
-y 使IDE硬盤進入省電模式。
-Y 使IDE硬盤進入睡眠模式。
-Z 關閉某些Seagate硬盤的自動省電功能。
```
測試
```shell
hdparm -tT /dev/vdc1
```
#### page allocation failure
https://yq.aliyun.com/articles/228285
```
vm.zone_reclaim_mode = 1
vm.min_free_kbytes = 512000
```
#### 磁盤空間占滿的排查思路
cannot create temp file for here-document: No space left on device
由于磁盤空間不夠導致,一般是代日志滿了,檢查服務日志和系統日志
#### 磁盤修復
```shell
fsck -y -C -t ext3 /dev/sda1
一般情況下修復完成后,所有文件移動到 lost+found目錄,文件名會被改變
-C 顯示進度條
-t 指定文件系統類型
-y 默認自動yes修復
```
以上內容摘自[琴酒網絡](https://www.cnblogs.com/ginvip/ "琴酒網絡")
#### 磁盤系統只讀
簡單處理
```shell
mount -o rw,remount /
```
如果提示device is busy 使用fuser解決占用
```shell
fuser -m /boot ##將會顯示使用這個模塊的pid
fuser -mk /boot ##將會直接kill那個pid
```
有的時候也不好使,只能重啟了
以上內容摘自[琴酒網絡](https://www.cnblogs.com/ginvip/ "琴酒網絡")
#### linux 掛載錯誤Transport endpoint is not connected
```
mount了mfs后,重新掛載之后,出現如下錯誤:
/usr/local/mfs/bin/mfsmount -H 192.168.103.101 /mnt/
fuse: bad mount point `/mnt/': Transport endpoint is not connected
see: /usr/local/mfs/bin/mfsmount -h for help
解決方法:
1、kill進程;
2、umount
3、重新mount
ps aux | grep mfs
umount –l /mnt
/usr/local/mfs/bin/mfsmount -H 192.168.103.101 /mnt/
```
#### Centos SSH自動斷開
```shell
修改/etc/ssh/sshd_config文件
ClientAliveCountMax 3 服務器發出請求后客戶端沒有響應的次數, 就自動斷開
ClientAliveInterval 60 表示每分鐘發送一次
```
#### 制作Swap分區,MySQL被OOM
```shell
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
# /etc/fstab增加
/swapfile swap swap defaults 0 0
```
#### 關閉IPV6
##### 方法 1
/etc/sysctl.conf 添加
```shell
net.ipv6.conf.all.disable_ipv6 =1
net.ipv6.conf.default.disable_ipv6 =1
```
如果想要為特定的網卡禁止IPv6,比如,對于enp0s3,添加下面的行。
```shell
net.ipv6.conf.enp0s3.disable_ipv6 =1
```
執行下面的命令來使設置生效。
```shell
sysctl -p
```
##### 方法 2(未測試)
要在運行的系統中禁止IPv6,依次輸入下面的命令:
```shell
echo 1>/proc/sys/net/ipv6/conf/all/disable_ipv6
echo 1>/proc/sys/net/ipv6/conf/default/disable_ipv6
或者
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
```
就是這樣。現在IPv6已經禁止了。
#### 修改系統運行級別
#### 操作系統:Centos5/6
```shell
修改/etc/inittab
```
#### 操作系統:Centos7
##### 方法一
```shell
systemctl isolate multi-user.target
```
##### 方法二
```shell
systemctl set-default multi-user.target
```
本質是修改/etc/systemd/system/default.target的軟鏈接
##### 手動
```shell
rm -f /etc/systemd/system/default.target
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
```
#### Linux下刪除大文件(硬連接方式)
>原理:
當多個文件共同指向同一inode、inode鏈接數N>1、刪除任何一個文件都是巨快。因為、此時刪除的僅僅是指向inode的指針,而當N=1時、則不一樣了、此時刪除的文件相關的所有數據塊、所以慢
測試:
```shell
root@ # ln stock.ibd stock.id.hdlk
root@ # ls stock.* -l
-rw-rw—- 1 mysql mysql 9196 Apr 14 23:03 stock.frm
-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.ibd
-rw-r–r– 2 mysql mysql 19096666112 Apr 15 09:55 stock.id.hdlk
```
你會發現stock.ibd的INODES屬性變成了2;
```shell
root@127.0.0.1 : test 21:39:34> drop table stock ;
Query OK, 0 rows affected (0.99 sec)
```
1秒不到就刪除完成; 也就是DROP TABLE不用再HANG這么久了。
但table是刪除了,數據文件還在,所以你還需要最后數據文件給刪除。
```shell
root # rm stock.id.hdlk
```
最后一步刪除原始大文件也可以選擇rsync來刪除、比rm快多了
#### 壓縮傳輸數據
服務器兩臺A和B,A可以免密鑰登錄B
```shell
yum install pv lz4
time tar -c Oracle9i-32-win/ |pv|lz4 -B4|ssh -c arcfour128 -o"MACs umac-64@openssh.com" 192.168.0.244 "lz4 -d |tar -xC /tmp"
```
#### 文件描述符設置
在bash中,有個ulimit命令,提供了對shell及該shell啟動的進程的可用資源控制。主要包括打開文件描述符數量、用戶的最大進程數量、coredump文件的大小等。
>在centos 5/6 等版本中,資源限制的配置可以在 /etc/security/limits.conf 設置,針對root/user等各個用戶或者*代表所有用戶來設置。 當然,/etc/security/limits.d/ 中可以配置,系統是先加載limits.conf然后按照英文字母順序加載limits.d目錄下的配置文件,后加載配置覆蓋之前的配置。 一個配置示例如下:
```shell
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
```
>不過,在CentOS 7/RHEL 7的系統中,使用Systemd替代了之前的SysV,因此 /etc/security/limits.conf 文件的配置作用域縮小了一些。
limits.conf只適用于通過PAM認證登錄用戶的資源限制,它對systemd的service的資源限制不生效。登錄用戶的限制,與上面講的一樣,通過 /etc/security/limits.conf 和 limits.d 來配置即可。
對于systemd service的資源限制,如何配置呢?
全局的配置,放在文件
```shell
/etc/systemd/system.conf
和
/etc/systemd/user.conf
```
同時,也會加載兩個對應的目錄中的所有.conf文件(默認沒有)
```shell
/etc/systemd/system.conf.d/*.conf
和
/etc/systemd/user.conf.d/*.conf
```
其中
```shell
system.conf 是系統實例使用的,
user.conf用戶實例使用的。
一般的sevice,使用system.conf中的配置即可。
systemd.conf.d/*.conf中配置會覆蓋system.conf。
```
```shell
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
```
注意:修改了system.conf后,需要重啟系統才會生效。
針對單個Service,也可以設置,以nginx為例。
```shell
編輯
/usr/lib/systemd/system/nginx.service
或者
/usr/lib/systemd/system/nginx.service.d/my-limit.conf 文件,做如下配置:
```
```shell
[Service]
LimitCORE=infinity
LimitNOFILE=65535
LimitNPROC=65535
```
運行如下命令,才能生效。
```shell
sudo systemctl daemon-reload
sudo systemctl restart nginx.service
```
> 注意:CentOS7自帶的/etc/security/limits.d/20-nproc.conf里面默認設置了非root用戶的最大進程數為4096,limits.conf設置沒效果,limit.d目錄中的配置覆蓋了。
參考文檔:
man systemd
man systemd-system.conf
man bash 搜索一下ulimit
#### Centos 6 x86_64 glibc 2.12 升級2.14
```shell
rpm -Uvh glibc-2.14.1-6.x86_64.rpm glibc-common-2.14.1-6.x86_64.rpm glibc-headers-2.14.1-6.x86_64.rpm glibc-devel-2.14.1-6.x86_64.rpm nscd-2.14.1-6.x86_64.rpm
```
#### U盤部署系統經驗
>U盤安裝系統時候,要注意引導設置中選擇硬盤,而不是U盤,要不引導信息被寫入U盤,系統就白裝了
#### 增加硬盤(阿里云環境)
備注:阿里云購買磁盤,注意和服務器相同分區
```shell
# 格式化磁盤
fdisk -l
fdisk /dev/sdb
輸入n
輸入p
輸入1,添加主分區
回車到結束
wq保存退出
# 格式化磁盤
mkfs.ext4 /dev/sdb1
# 手動掛載
mount /dev/sdb1 /data
# 設置開機啟動(/etc/fstab增加)
/dev/sdb1 /data ext4 defaults 0 0
```
#### 失敗案例
>情況: 阿里云購買100GB磁盤,準備擴容,在分區保存時用了10多分鐘,非常不正常,格式化時間也用了10多分鐘。這兩個過程應該非常快,大家遇到一定注意,釋放后重新購買。
>故障:本著懷疑的態度,對硬盤測速,hdparm -tT /dev/vdc1 執行后服務器直接中斷,系統重啟用了20分鐘,起來后,心磁盤掛載不上,提示沒有格式化。
建議1:阿里云工程師響應遲緩(不正面響應問題),建議大家做好備份,別太指望阿里云的工程師解決這種偶然性的底層故障。
建議2:遷移數據前,做好快照。
#### 增加硬盤(服務器環境)
環境介紹
- 西數4T紅盤
- 公司內部FTP服務器用(臺式機)
#### 格式化
```shell
同阿里云分區
```
> ##### 注意一個細節:由于默認操作系統中沒有綁定磁盤盤符,增加一塊磁盤后,重啟后的4T磁盤的盤符變成了sda,而原有硬盤變成了sdb,
> ##### 解決:通過UUID方式掛載磁盤
#### blkid獲取磁盤UUID
```shell
#blkid
/dev/sdb1: UUID="46a60431-9969-4567-be9c-c3c33eb5af17" TYPE="ext4"
/dev/sdb2: UUID="1b50ba56-a085-468d-8913-f434d84989c7" TYPE="swap"
/dev/sdb3: UUID="e3244801-7922-4a97-aa52-edbc5a4b82b0" TYPE="ext4"
/dev/sda: UUID="3f1fe202-9575-4c64-9d9b-16674ef9f350" TYPE="ext4"
```
將UUID寫在fstab中,避免多塊磁盤產生的磁盤盤符變化
```shell
UUID="3f1fe202-9575-4c64-9d9b-16674ef9f350" /data/ftp_data ext4 defaults 1 1
```
>備注:由于是FTP數據盤,所以設置備份和檢測策略同系統根目錄配置
- 獻給樂于奉獻的你
- 一、工作感悟
- 1.1 工作感悟
- 1.2 數據庫工作總結
- 二、運維專題(非技術)
- 2.1 公有云運維
- 2.1.1 阿里云采坑記.md
- 三、運維專題(技術類)
- 3.1 Linux(操作系統)
- 3.1.1 常見工作總結
- 3.1.2 常見服務使用和部署
- 3.1.3 操作系統優化
- 3.1.4 常用命令(Centos8)
- 3.2 Docker & K8s(容器技術)
- 3.2.1 Docker
- 1. Docker
- 1-1 容器基礎
- 1-2 部署和加速
- 1-3 常用命令
- 1-4 Dockerfile編寫
- 1-5 容器網絡
- 1-6 數據持久化
- 2. docker-compose
- 2-1 基礎
- 3.2.2 kubernetes
- 1. 導讀-請先看我
- 2. kubeadm部署集群
- 1-1 k8s-1.14-基于calico
- 1-2 k8s-1.17-基于flanne
- 3. 二進制部署集群
- 4. 日常工作及故障處理
- 4-1 常用命令
- 4-2 故障處理
- 3.2.3 依賴服務部署
- 1. Harbor(鏡像倉庫)
- 1-1 harbor-2.1.0(單節點)
- 3.3 CICD(持續集成/部署)
- 3.3.1 GitLab
- 1. 服務部署
- 1-1 Gitlab-CE-13.3.4(單節點)
- 2. Git基礎
- 3.3.2 Ansible
- 1. 服務部署
- 1-2 ansible-2.5(pip部署)
- 3. ansible-playbook
- 3-1 基于Roles的Playbook
- 3-3 循環語法
- 3.3.3 Jnekins
- 1. Jenkins部署
- 1-1 Jenkins-2.65部署
- 1-2 Jenkins-2.249部署
- 2. Jenkins項目初始化
- 3. Jenkins集成
- 3-1 Jenkins-2.65集成Sonar
- 3.4 LB/HA(負載均衡,反向代理)
- 3.4.1 LVS+Keepalive
- 1. LVS為MySQL讀提供負載均衡
- 3.4.2 Pacemaker(HA)
- 1. 常用命令(轉)
- 3.5 Runtime(代碼運行環境)
- 3.5.1 Tomcat(Web中間件)
- 1. Tomcat部署手冊
- 1-1 Tomcat-7.0.76部署
- 2. Tomcat常用腳本
- 3.6 NoSQL(非關系型數據庫)
- 3.6.1 redis(非關系數據庫)
- 1. Redis 基礎
- 2. Redis 4.0變化
- 3. Codis實現Redis的集群
- 4. Redis故障處理
- 5. redis安全第一步
- 6. Redis集群搭建
- 7. CacheCloud部署
- 3.6.1 Redis挑戰
- 3.6.2 MongoDB(文檔數據庫)
- 1. Mongodb基礎
- 1-1 Mongodb4.0新特性
- 1-2 支持多大數據量
- 2. Mongodb安裝
- 2-1 Mac OS安裝Mongodb
- 2-2 Yum安裝Mongodb
- 2-3 二進制安裝Mongodb
- 2-4 docker容器安裝Mongodb
- 2-5 Mongodb 配置文件詳解
- 2-6 Mongodb 生產安全清單
- 2-7 用戶身份認證和授權
- 3. Mongodb副本集
- 3-1 副本集搭建
- 3-2 用戶身份認證與授權
- 4. 日常維護工作
- 4-1 Mongodb磁盤回收
- 4-2 Mongodb備份恢復到任意時間點
- 4-3 Mongodb慢查詢分析
- 4-4 Mongodb版本升級
- 4-5 Mongodb副本集成員狀態
- 4-6 Mongodb備份恢復工具使用
- 4-7 Mongodb服務啟動和停止
- 4-8 修改副本集成員oplog大小
- 4-9 Mongodb 副本集Oplog
- 3.7 MQ(消息隊列)
- 3.7.1 Zookeeper(分布式協調系統)
- 1. ZooKeeper基礎
- 2. ZooKeeper集群搭建
- 2-1 ZK-3.4.10部署
- 3.2 RabbitMQ(消息隊列)
- 1. 服務部署
- 1-1 RabbitMQ-3.8部署
- 2. 常用命令
- 3.8 Monitor(數據收集,監控)
- 3.8.1 Zabbix(運維監控)
- 1. 服務部署
- 1-1 服務端部署
- 1-2 客戶端部署
- 2. 監控服務
- 2-1 監控Apache
- 2-2 監控IIS
- 2-3 監控Ningx
- 2-4 監控Tomcat(6/7/8)
- 2-5 監控WebSphere 7
- 2-6 監控MySQL
- 2-7 監控Oracle
- 2-8 監控SQL Servre
- 2-9 監控Weblogic
- 2-10 監控Windows
- 2-11 自定義監控項
- 3. 告警推送
- 3-1 郵件告警
- 3-2 短信告警
- 3-3 告警推到Syslog
- 4. 日常工作
- 4-1 數據庫優化(TokuDB)
- 4-2 數據庫優化(分區表)
- 4-3 前端定制(Grafana)
- 5. 與Grafana結合
- 3.8.2 ELKBstack(日志收集展示)
- 1. 服務部署
- 1-1 ELK 5.5部署及配置
- 1-1-1 ELKBstack介紹
- 1-1-2 Elasticsearch部署
- 1-1-3 Logstash部署
- 1-1-4 Kibana部署
- 1-1-5 X-pack部署
- 1-1-6 Filebeat部署
- 2. ELK高級配置
- 1. Elasticsearch實戰
- 2. Logstash實戰
- 3. Filebeat實戰
- 5. 引入隊列
- 3.9 Virtualization(虛擬化)
- 3.10 Basic(基礎服務)
- 3.10.1 Piwik-Matomo(用戶行為分析)
- 1. Piwik前期分析
- 2. Piwik介紹和部署
- 2-1 Piwik-3.x版本(早期)
- 3. Piwik 功能配置
- 4. Piwik 模擬數據和壓測
- 5. Piwik運轉原理
- 6. Piwik數據庫模式(一)
- 6-1 第一部分
- 6-2 第二部分
- 3.10.2 Cobbler(系統自動部署)
- 1. Cobbler 可以干什么?
- 2. Cobbler 基礎原理
- 3. Cobbler 安裝
- 3-1 Cobbler-2.8部署
- 4. Cobbler 基礎配置
- 5. Cobbler 配置文件
- 6. 一鍵優化腳本
- 3.10.3 Rsync(數據同步服務)
- 1. Rsync基礎
- 2. 案例:頁面部署(服務端拉取)
- 3.10.4 NFS(共享存儲)
- 1. NFS部署手冊
- 2. 客戶端NFS備份腳本
- 3.10.5 Grafana(可視化)
- 1. 安裝(8.2.x)
- 3.11 Tools(軟件工具)
- 3.11.1 基準測試
- 1. 基準測試方法論
- 2. 壓測工具 - Siege
- 3. 壓測工具 - http_load
- 3.12 DB(關系型數據庫)
- 3.12.1 MySQL(關系數據庫)
- 1. MySQL部署
- 1-1 MySQL-5.7部署
- 1-2 Percona-5.7 + TokuDB 部署
- 2. MySQL復制
- 2-1 MySQL異步復制
- 3. MySQL備份恢復
- 3-1 xtrabackup 備份恢復
- 4. MySQL 高可用
- 4-1 MHA(HA)
- 4-1-1 MHA 架構介紹和原理
- 4-1-2 MHA日常管理
- 4-1-3 MHA 自動Failover
- 4-1-4 MHA常用參數
- 4-1-5 MHA 報錯
- 4-1-6 MHA相關配置文件和腳本
- 4-2 MyCAT
- 4-2-1 MyCAT 介紹和部署
- 4-1-3 MyCAT讀寫分離案例解析
- 5. MySQL 常用腳本
- 5-1 MySQL常用統計語句
- 5-2 MySQL性能分析腳本
- 6. MySQL 日常及故障處理
- 6-1 MySQL死鎖排查
- 6-2 復制故障
- 6-3 MySQL 升級注意事項
- 6-3 MySQL授權
- 3.12.2 Oracle(關系數據庫)
- 1. Oracle部署
- 1-1 Oracle11g單實例部署
- 1-2 Oracle12c單實例部署
- 2. Oracle常用腳本
- 3. Oracle 知識點
- 六、Ansible開源項目
- 6.1 項目初始化手冊
- 6.1.1 Ansible錯誤處理
- 6.1.2 一種預先判斷是否操作的方法
- 6.2 System初始化
- 6.3 Nginx/Tnginx部署
- 6.4 Python部署
- 6.5 PHP部署
- 6.6 MySQL部署
- 6.7 Docker部署
- 6.8 Haproxy部署
- 6.9 Redis部署
- 1. 變量和tags信息
- 3. Redis主從部署
- 4. Redis集群部署
- 5. 清理數據
- 6.10 Software軟件部署
- 6.11 Zabbix部署
- 6.12 Elastic部署
- 6.13 Tomcat
- 6.14 Kafka部署
- 6.15 Zookeeper部署
- 6.16 Etcd集群部署
- 6.17 M3DB部署
- 6.18 Pormetheus部署
- 七、學習資源推薦
- 八、從瞎搞到放棄
- 8.1 CodeQL(語義代碼分析引擎)
- 8.1.1 背景及計劃
- 8.1.2 CodeQL概述
- 8.1.3 簡單部署和使用
- 8.1.4 后續
- 8.2 dbdeployer(輕松部署MySQL)
- 歸檔筆記
- 三、常用服務部署(遷移中)
- 3.4 Nginx & PHP(Web服務)
- 3.4.1 Nginx(Web)
- 1. Nginx基礎和部署
- 2. Nginx 我的一些思考
- 3. Nginx(Web)配置
- 4. Nginx(Proxy)配置
- 5. Nginx日常管理
- 3.4.3 PHP
- 1. PHP 7.1 部署
- 2. PHP5.6 部署
- 4. PHP原理
- 5. PHP 常用模塊
- 二、運維項目實戰(遷移中)
- 2.1 標準化 & 工具化項目
- 2.1.1 系統部署和優化
- 2.1.5 全網日志收集展示平臺項目
- 1. 項目需求
- 2. 整體方案規劃
- 3. 日志收集配置
- 4. 消息緩沖隊列
- 5. 日志處理轉發
- 6. 日志數據展示(待補充)
- 7. ELK安全配置(上)
- 8. ELK安全配置(下)
- 9. 項目總結
- 2.2 高性能Web項目
- 2.2.1 網站需求(完善中)