ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 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也是自然数.... ![](index_files/4da7d652-c076-41c2-80a4-e653aaba2269.jpg) #### 过滤目录 -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数据盘,所以设置备份和检测策略同系统根目录配置