day20 系统优化

yum源的优化

yum源的优化:
    自建yum仓库
	使用一个较为稳定的仓库
	# 安装华为的Base源     或者使用清华的源也可以
	wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
	
	# 编写epel源的地址
	[epel]
	name="huawei epel repo"
	baseurl=https://repo.huaweicloud.com/epel/7/x86_64/
	gpgcheck=0

系统主机名

修改系统主机名的几种方法:
	1、hotnamectl   
	2、vim /etc/hostname   # 修改后,永久生效

系统之间的域名解析

修改系统的域名解析:
	[root@localhost ~]# vim /etc/hosts
	格式:[ip] [主机名]
	192.168.15.200 localhost

关闭selinux和防火墙

关闭selinux:
	1、临时关闭
		[root@localhost ~]# setenforce 0
	2、永久关闭
		[root@localhost ~]# vim /etc/selinux/config
		SELINUX=disabled
		
关闭防火墙:
	[root@localhost ~]# systemctl disable --now firewalld

配置ntp时间同步

系统时间和网络时间不同步解决方法:
	1、安装时间服务软件
		[root@localhost ~]# yum install ntpdate -y   
		
	2、更新网络时间
		[root@localhost ~]# ntpdate ntp.aliyun.com 
        
    网络授时服务器:
    	1、tp.aliyun.com				# 阿里云的
		2、ntp.tuna.tsinghua.edu.cn   # 清华的
		
	如果在企业里只能用内网还可以手动更改时间
		[root@localhost ~]# date -s "2021-10-24 15:51:00"

ulimit:设置系统开启进程或者文件句柄数

ulimit:设置系统开启进程或者文件句柄数(文件打开的次数)
	语法:
		ulimit [参数]
		
	参数:
		-n	:指定同一时间最多可开启的文件句柄数
		-u	:用户最多可开启的进程数目
		
	临时修改句柄数:
		[root@localhost ~]# ulimit -n 20
		
	永久修改句柄数和进程数:
		1)、[root@localhost ~]# 放到命令行执行
		cat >>/etc/security/limits.conf<<EOF
        * soft nofile 102400
        * hard nofile 102400
        * soft nproc 102400
        * hard nproc 102400
        EOF
        
        2)、[root@localhost ~]# sysctl -p  # 重新加载
        3)、[root@localhost ~]# reboot     # 重启后生效
		
案例1:设置系统打开文件最多20个
	[root@localhost ~]# ulimit -n 20
	
案例2:设置用户最多开启10个进程
	[root@localhost ~]# ulimit -u 10

设置最大PID数

设置最大PID数:/proc/sys/kernel/pid_max   # 文件存放位置

查看本机PID数:
    [root@localhost fd]# cat /proc/sys/kernel/pid_max    # 本机一共可以设置131072个PID
    131072

修改PID数的两种方法:
	临时修改:
		 [root@localhost fd]# echo 150000 > /proc/sys/kernel/pid_max
		 
	永久修改:/etc/sysctl.conf  :写到配置文件
		[root@localhost fd]# echo "kernel.pid_max= 4194303" >> /etc/sysctl.conf   # 写到配置文件里
		[root@localhost fd]# sysctl -p  # 测试一下写进去了吗

修改内核参数

[root@localhost fd]# 放到命令行执行
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_forward = 1    
EOF
[root@localhost fd]# sysctl -p  # 测试一下写进去了吗

NetworkManager:网络管理工具

    在CentOS系统上,目前有NetworkManager和network两种网络管理工具。如果两种都配置会引起冲突,而且NetworkManager在网络断开的时候,会清理路由,如果一些自定义的路由,没有加入到NetworkManager的配置文件中,路由就被清理掉,网络连接后需要自定义添加上去。

	推荐;
		[root@localhost ~]# systemctl disable --now NetworkManager  # 首先禁用掉

禁掉ping

为什么要禁掉ping?
	不让别人ping自己主机,防止别人攻击你。有利于提高操作系统安全
	
	禁止主机被ping的方法:
		[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
		0	:代表可以被别人ping
		1	:禁止别人ping自己主机

用户提权sudo

sudo命令:当普通用户临时使用root用户的权限时使用
	格式:
		sudo  [参数非必选] [命令或文件路径]
	
	参数:
        -b	:在后台执行指令;
        -h	:显示帮助;
        -H	:将HOME环境变量设为新身份的HOME环境变量;
        -k	:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
        -l	:列出目前用户可执行与无法执行的指令;
        -p	:改变询问密码的提示符号;
        -u	:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
        -v	:延长密码有效期限5分钟;
        
	在没有权限下修改:
        1、[test@localhost tmp]$ ll
            total 8
            -rw-r--r-- 1 root root  43 Oct 11 19:02 2.txt    # 可以看到其他人只有可读的权限
        
        # 这个用户必须在/etc/sudoer文件中添加权限
        2、[root@localhost ~]# vim /etc/sudoers 
        	test ALL=(ALL) ALL    # 用户名添加到这里
        
        3、[root@localhost ~]# sudo vim 2.txt  # 现在暂时使用的是root权限修改文件
        
	可能出现的错误:
		1、普通用户要先设置一个密码
			[root@localhost ~]# passwd test
			
		2、没有在/etc/sudoer文件中添加权限就要修改文件
			# 测试不在sudoers文件中。这一事件将被报道。
			test is not in the sudoers file.  This incident will be reported.

字符处理

sort命令:排序

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
	语法:
		sort [参数]
	
	参数:
		-n	:依照数值的大小排序
		-o	:将排序后的结果存入制定的文件
		-r	:以相反的顺序来排序
		-t	:指定排序时所用的栏位分隔字符;
		-k	:以某列进行排序(默认的分隔符是空格)
		
	#注:sort不加参数默认是使用第一个字符进行排序
	案例1:将1.txt按照数值大小排序
		[root@localhost ~]# cat 1.txt | sort -n
		[root@localhost ~]#  sort -n 1.txt
		
	案例2:将1.txt以相反的顺序来排序
		[root@localhost ~]# cat 1.txt | sort -nr   # 第一种方法
		[root@localhost ~]#  sort -nr 1.txt        # 第二种方法
		
	案例3:将1.txt以第二列进行排序(默认的分隔符是空格)
		[root@localhost ~]# cat 1.txt | sort -n -k2
		
	案例4:将1.txt指定分割符:,进行排序
		[root@localhost ~]# cat 1.txt | sort -n -k2 -t:
		
	案例5:将1.txt按照数值大小排序,存入指定的文件里
		[root@localhost ~]# cat 1.txt | sort -n -k2 -t: -o 2.txt

uniq命令:去重

uniq 命令(去重,默认只去重相邻的数据)   # 需要配合sort使用
	语法:
		uniq [参数]
	
	参数:
        -c	:在每列旁边显示该行重复出现的次数;
        -d	:仅显示重复出现的行列;
        -u	:仅显示出一次的行列;

	案例1:将1.txt中重复的去掉
		[root@localhost ~]#  sort -n 1.txt | uniq   # 必须跟sort结合使用
		
	案例2:将1.txt中重复的去掉并显示出重复的次数
		[root@localhost ~]#  sort -n 1.txt | uniq -c
		
	案例3:仅显示重复出现的行列,仅显示重复出现的
		[root@localhost ~]#  sort -n 1.txt | uniq -cd
		
	案例4:仅显示重复出现的行列,仅显示出现一次的
		[root@localhost ~]#  sort -n 1.txt | uniq -cu

cut命令:分割字符

cut命令:用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于下的type命令。
	语法:
		cut [参数] [文件]
		
	参数:
        -d	:指定字段的分隔符,默认的字段分隔符为“TAB”;
        -f	:显示指定字段的内容;
	
	案例1:打印/etc/passwd第一列
		[root@localhost ~]# cut -d: -f 1 /etc/passwd

tr命令:替换字符

    tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。
    语法:
    	tr [参数] [原字符集] [替换字符集]
    	
    参数:
        -c	:取代所有不属于第一字符集的字符;
        -d	:删除所有属于第一字符集的字符;
        -s	:把连续重复的字符以单独一个字符表示;
        -t	:先删除第一字符集较第二字符集多出的字符。
        
		案例1:将输入字符由大写转换为小写:
        	[root@localhost ~]# echo "HELLO WORLD" | tr 'A-Z' 'a-z'   # 
             hello world   # 'A-Z' 和 'a-z'都是集合,集合是可以自己制定的
             
		案例2:将输入字符的数字删除
			[root@localhost ~]# echo "hello 123 world 456" | tr -d '0-9'
			hello world
			
		案例3:字符集补集,从输入文本中将不在补集中的所有字符删除:
			[root@localhost ~]# echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'
             1  2  3  4

wc命令:统计字符

wc命令:用来统计字符的
	语法:
		wc [参数] [统计文件]
		
	参数:
        -c	:只显示Bytes数;# 换行符也算
        -l	:只显示列数;
        -w	:统计文件中单词的个数,默认以空白字符做为分隔符。
        
	案例1:统计1.txt
		[root@localhost ~]# cat 1.txt | wc -c
		
	案例2:统计1.txt的列数
		[root@localhost ~]# cat 1.txt | wc -l
		
	案例3:统计/etc/nginx/nginx.conf有多少单词
		[root@localhost ~]# cat /etc/nginx/nginx.conf | wc -w

date命令:设置系统时间和日期

date命令是显示或设置系统时间与日期。
	语法:
		date [参数] [日期时间格式]   # 年-月-日 时:分:秒  date +"%Y-%m-%d %H:%M:%S"
		# date +%c
		
	参数:
        -d	:显示字符串所指的日期与时间。字符串前后必须加上双引号;
        -s	:根据字符串来设置日期与时间。字符串前后必须加上双引号;
	
	
日期格式字符串列表:
        %Y 	: 完整年份 (0000..9999)		
        %m 	:月份(01~12)
        %d 	:一个月的第几天(01~31)
        %H 	:小时,24小时制(00~23)
        %M 	:分钟(00~59)
        %S 	:显示秒(00~59)
        %I 	:小时,12小时制(01~12)
        %s 	:从1970年1月1日00:00:00到目前经历的秒数
        %T 	:显示时间,24小时制(hh:mm:ss)
        %X 	:显示时间的格式(%H:%M:%S)
        %c	:日期和时间(Tue Nov 20 14:12:58 2012)
        %j 	:一年的第几天(001~366)
        %w 	:一个星期的第几天(0代表星期天)
        %W 	:一年的第几个星期(00~53,星期一为第一天)
        %y 	:年的最后两个数字(1999则是99)

        
        案例1:要求打印当前时间 :2021-3-3 00:00:00
            [root@localhost ~]# date +"%Y-%m-%d %H:%M:%S"
            2021-10-14 20:19:26
            
        案例2:设置本机的时间
        	 [root@localhost ~]# date -s "2021-10-14 20:19:26"
        	
        案例3:输出昨天的日期
        	[root@localhost ~]# date -d "1 day ago" +"%Y-%m-%d"