3.1.1 常见工作总结
最后更新于:2022-04-02 07:36:35
#### 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
```
#### 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也是自然数....
![](index_files/4da7d652-c076-41c2-80a4-e653aaba2269.jpg)
#### 过滤目录
-path ./a -o -path ./b -prune -o -type f
#### 磁盘测速hdparm
```shell
-a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
-A<0或1> 启动或关闭读取文件时的快取功能。
-c 设定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模式。
-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数据盘,所以设置备份和检测策略同系统根目录配置
';