linux运维基础
1、时间同步
方案1:
ntpdate asia.pool.ntp.org 时间校准、时间同步
方案2:
#!/bin/bash #安装chrony: yum install -y chrony #注释默认ntp服务器 sed -i 's/^server/#&/' /etc/chrony.conf #指定上游公共 ntp 服务器,并容许其余节点同步时间 cat >> /etc/chrony.conf << EOF server 0.asia.pool.ntp.org iburst server 1.asia.pool.ntp.org iburst server 2.asia.pool.ntp.org iburst server 3.asia.pool.ntp.org iburst allow all EOF #重启chronyd服务并设为开机启动: systemctl enable chronyd && systemctl restart chronyd #开启网络时间同步功能 timedatectl set-ntp true
2、systemctl\service\chckconfig 关系与区别 以及开机启动的设置办法
Systemctl和service、chkconfig命令的关系 systemctl命令:是一个systemd工具,主要负责控制systemd系统和服务管理器。 service命令:可以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。 chkconfig命令:是管理系统服务(service)的命令行工具。所谓系统服务(service),就是随系统启动而启动,随系统关闭而关闭的程序。 systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。 所以systemctl命令是service命令和chkconfig命令的集合和代替。 一、service命令 service命令其实是去/etc/init.d目录下,去执行相关程序 # service命令启动redis脚本 service redis start # 直接启动redis脚本 /etc/init.d/redis start # 开机自启动 update-rc.d redis defaults 其中脚本需要我们自己编写 二、systemctl命令 systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。 systemd对应的进程管理命令是systemctl 1)systemctl命令兼容了service 即systemctl也会去/etc/init.d目录下,查看,执行相关程序 2) 使用 systemctl redis start systemctl redis stop # 开机自启动 systemctl enable redis systemctl 管理服务的启动、重启、停止、重载、查看状态等常用命令区分 System V init 命令(RHEL 6) systemctl 命令(RHEL 7) 作用 service foo start systemctl start foo.service 启动服务 service foo restart systemctl restart foo.service 重启服务 service foo stop systemctl stop foo.service 停止服务 service foo reload systemctl reload foo.service 重新加载配置文件(不终止服务) service foo status systemctl status foo.service 查看服务状态 三、demo 将命令添加为service并设置开机启动: vi /etc/systemd/system/redis.service [Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl start redis.service systemctl enable redis.service 服务操作命令 systemctl start redis.service #启动redis服务 systemctl stop redis.service #停止redis服务 systemctl restart redis.service #重新启动服务 systemctl status redis.service #查看服务当前状态 systemctl enable redis.service #设置开机自启动 systemctl disable redis.service #停止开机自启动
开机启动: 1、给权限 chmod +x /etc/rc.d/rc.local 2、把要启动的内容放到/etc/rc.d/rc.local 注意:要是绝对路径
3、虚拟ip
Linux建立虚拟ip的方法 1、虚拟ip的介绍 虚拟IP地址(VIP) 是一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址。数据包被发送到这个VIP地址,但是所有的数据还是经过真实的网络接口。 上边是百度的定义。 就是一块网卡上边有两个ip,然后无论到哪个ip的流量都会经过物理网卡。 2、虚拟ip的作用 大部分虚拟ip基本上都用于高可用的架构上边。主机启用虚拟ip,所有访问的请求都会到主机。当主机宕机的时候,高可用软件会将主机的虚拟ip down掉,然后在备机上启用虚拟ip。这样就完成了主备切换。从而保证业务的可用性。 3、linux中创建虚拟ip的方法 在linux中创建虚拟ip有两种方法,分别是:别名IP和辅助IP。
(1)别名ip 别名ip是通过ifconfig命令去创建和操作的虚拟ip。 <1>创建虚拟ip 使用ifconfig命令查看 使用命令创建 ifconfig eth0:1 192.168.8.5 netmask 255.255.255.0 up 上边可以看到生成了eth0:1然后ip是192.168.8.5的虚拟网卡。 <2>删除别名ip ifconfig eth0:1 192.168.8.5 netmask 255.255.255.0 down 很简单只要将后边的up改为down就可以了。 <3>开机生成虚拟ip 想要开机就有虚拟ip,可以在网卡的配置目录中去建立一个新的网卡的配置文件 centos和红帽都是在这个目录下/etc/sysconfig/network-scripts cp ifcfg-eth0 ifcfg-eth0:1 然后更改其中的ip即可,重启网卡就行。
(2)辅助ip 辅助ip是由linux的ip命令去创建和操作的。 <1>创建辅助ip ip addr add 192.168.8.5/24 dev eth0 <2>查看辅助ip 使用命令ip a就可以查看,但是不能使用ifconfig –a去查看。 <3>删除辅助ip ip addr del 192.168.8.5/24 dev eth0 也很简单,将add改为del即可。 <4>永久生效 这种方式创建的虚拟ip,可以将生成虚拟ip的命令写到/etc/rc.local中去。 开机即可自动加载。在配置redis-sentinel的时候可能会使用到
4、查找find&grep
一、find 可以找到你想要的文件 格式: find [目录] [选项] [选项值] 目录:去哪找,可以不写,默认代表当前目录 选项:怎么找 >> -name 按照名字找 可以使用通配符 -size 按照大小找 单位为 kmg 10k(等于10k) +10k(大于10k) -10k(小于10k) -user 按照用户名 -group 按照组名 -maxdepth -mindepth 限制查找的目录层级,默认递归查找所有 -ctime 按照创建时间查找 单位是天 选项值:找什么 find / -name demo.txt find / -name \*.txt find / -size +10k find / -user demo.txt find / -group demo.txt find / -mindepth 4 -name \*.txt find / -mindepth 3 -maxdepth 5 -name \*.tx 二、grep grep 查找的内容 文件路径 grep movie demo.txt grep that ~/*.txt 选项 --color=auto 将颜色高亮显示 给 grep 指令起一个别名 vi ~/.bashrc 添加一行 alias grep='grep --color=auto' 让配置文件立即生效 source ~/.bashrc -c 得到内容的个数 -i 不区分大小写的查找 -n 显示在文档中的行号 -r 递归查找,但是不能限制后缀,只能遍历所有 grep -r that ~/* -l 只显示文件名,不显示内容 grep -l 你好 ~/test/*.txt 正则表达式进行查找(少用) \w(数字字母下划线) \W(除了上面) \d(数字) \D(非数字) .(除了换行符) *(任意多个) +(至少1个) ?(0个或者1个) te-st@163.com abc_def@qq.com lala@sina.cn benben@meme.net grep -E .*? demo.txt -E 使用正则表达式来进行匹配 三、demo find / -type f -name 'vars.example' 查找名字为vars.example的文件 find / -type f -size +100M 查找大于100M的文件 find 文件目录 -type f |xargs grep "查询内容"; 查找包含指定内容的文件 du -h --max-depth=1 / | grep '[0-9]G\>' 查找1g以上的文件
5、任务的前后台运行方式的控制
(1) nohup 加在一个命令的最前面,表示不挂断的运行命令 (2) & 加载一个命令的最后面,表示这个命令放在后台执行 如何查看&后台运行的任务: jobs -l (1)fg命令将后台中的命令调至前台继续运行 如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。 (2)Ctrl + z 命令将一个正在前台执行的命令放到后台,并且处于暂停状态 (3)bg命令将一个在后台暂停的命令,变成在后台继续执行
6、服务器内免密登录其他主机
免密登录: 步骤1:主机生成公共签名文件 默认存在这个目录:(/root/.ssh/id_rsa) ssh-keygen -t rsa 步骤2:将公共签名文件发给从机某个目录,比如root目录下 scp /root/.ssh/id_rsa.pub root@101.201.122.239:/root/id_rsa.pub 步骤3:从机处理下签名文件 追加到信任主机列表:cat /root/id_rsa.pub >> /root/.ssh/authorized_keys 修改权限:chmod 600 /root/.ssh/authorized_keys 步骤4:验证 ssh root@101.201.122.239 如果不需要密码可以登录就是成功的
7、rsync同步工具
rsync 1、主机 步骤1:yum install rsync inotify-tools 步骤2: 创建rsync client和inotify合体脚本 /app/rsync/rsync.passwd: echo "Tong123InChina@abc" > /app/rsync/rsync.passwd /app/rsync/rsync_do.sh : src='/home/zzl/' passwordfile='/app/rsync/rsync.passwd' user='root' host='101.200.122.239' rsync_module='uploads' /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,delete,create,attrib ${src} | while read DATE TIME DIR file do /usr/bin/rsync -vzrtopg --delete --progress ${src} ${user}@${host}:/home/zzl echo "${file} was rsynced at ${DATE}_${TIME} in ${DIR}" >> /var/log/rsync.log 2>&1 done 步骤3:后台运行rsync nohup /app/rsync/rsync_do.sh & 步骤4:如何结束后台的rsync任务 jobs -l kill -9 ** 2、从机 步骤1:yum install rsync 步骤2: 创建secrets file验证文件 并且设置权限为600 echo "root:Tong123InChina@abc" > /app/rsync/rsync.passwd chmod 0600 /app/rsync/rsync.passwd 步骤3:创建rsync server的配置文件 /app/rsync/rsync.conf uid = root gid = root use chroot = no max connections = 3 timeout = 800 pid file = /var/run/rsyncd.pid lockfile = /var/run/rsyncd.lock log file = /var/log/rsyncd.log [uploads] path = /home/zzl/ ignore errors = no hosts allow = 47.105.93.58 hosts deny = * read only = no write only = no list = yes uid = root gid = root auth users = root secrets file = /app/rsync/rsync.passwd 步骤4:运行daemon模式 rsync --daemon --config=/app/rsync/rsync.conf
8、nginx平滑升级
步骤0:测试新的执行文件 对老的nginx.conf是否正常 /opt/nginx-1.21.1/objs/nginx -t -c /usr/local/nginx/conf/nginx.conf 步骤1:备份旧的可执行文件,将新的版本拷贝到sbin目录 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old cp /opt/nginx-1.21.1/objs/nginx /usr/local/nginx/sbin/ 步骤2:kill –USR2 旧版本的nginx主进程号 ps aux | grep nginx//查看进程号 kill -usr2 *** 步骤3:观察新版本是否正常,如果正常就结束旧版本nginx的运行 kill -winch 旧版主进程号 kill -quit 旧版主进程号
9、脚本处理某pid的进程
找到端口为8050的进程id,结束任务 pid=`netstat -anp|grep 8050|awk '{printf $7}'|cut -d/ -f1` kill -9 $pid 10 03 * * * /usr/bin/bash /opt/atlassian/jira/bin/zzl_stop_jira.sh 20 03 * * * /usr/bin/bash /opt/atlassian/jira/bin/startup.sh
10、硬盘处理与分析
1、查看所有磁盘信息,即可以查看到我们的u盘的状态 (主要看分区还有文件系统)输入指令 sudo fdisk -l 2、挂载U盘 假如我们的优盘是fat32格式的 输入指令:mount -t vfat /dev/sdb1 /media 如果是NTFS格式的话 输入指令:mount -t nfs /dev/sdb1 /media 这样就把u盘挂载到media目录了(注意/dev/sdb1 是指u盘的分区 ,你的可能不同) 最后我们只要使用命令:cd /media 再 ls 就ok 了 (注意以上操作需要root权限) 3、卸载u盘 只需要执行:sudo umount /media/ 磁盘分析神器: wget http://dev.yorhel.nl/download/ncdu-1.11.tar.gz tar -zxf ncdu-1.11.tar.gz yum install glibc yum install ncurses ncurses-devel ./configure && make && make install ncdu -x -q
11、abc网络划分
A、B、C网 A类地址、B类地址、C类地址、D类地址和E类地址他们区别和划分是根据IP地址根据网络ID的不同。最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个id,即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。 以下是他们分别的意义: 1.A类IP地址 :一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。 2. B类IP地址 :一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。 3. C类IP地址 :一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
12、网络追踪与排查
1. traceroute的作用 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。 当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走 的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。 linux系统中,我们称之为traceroute。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。 一条路径上的每个设备traceroute要测3次。 输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。 2. traceroute的执行 大多数情况下,我们会在linux主机系统下,直接执行命令行:traceroute hostname -d 使用Socket层级的排错功能。 -f 设置第一个检测数据包的存活数值TTL的大小。 -F 设置勿离断位。 -g 设置来源路由网关,最多可设置8个。 -i 使用指定的网络界面送出数据包。 -I 使用ICMP回应取代UDP资料信息。 -m 设置检测数据包的最大存活数值TTL的大小。 -n 直接使用IP地址而非主机名称。 -p 设置UDP传输协议的通信端口。 -r 忽略普通的Routing Table,直接将数据包送到远端主机上。 -s 设置本地主机送出数据包的IP地址。 -t 设置检测数据包的TOS数值。 -v 详细显示指令的执行过程。 -w 设置等待远端主机回报的时间。 -x 开启或关闭数据包的正确性检验。
13、定时任务处理
设置定时任务: ①创建定时脚本 vi /home/wwwroot/public/timertask.sh /usr/bin/php /homw/wwwroot/public/code/getNewsToDatabase.php ②指定定时任务 crontab -e // 进入到编辑用户的定时任务界面 */2 * * * * /bin/sh /homw/wwwroot/public/timertash.sh ③查看当前用户的定时任务 crontab -l ④查看定时任务执行的日志信息 cat /var/log/cron 0 */1 * * * /usr/sbin/ntpdate asia.pool.ntp.org 每隔1小时执行 * */1 * * * /usr/sbin/ntpdate asia.pool.ntp.org 每1分钟执行 0 0 * * * /usr/bin/python3 /root/web_spider/news/configs/every_day_NumerId.py 每天0时0分执行
# 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 前四行是用来配置crond任务运行的环境变量 第一行SHELL变量指定了系统要使用哪个shell,这里是bash 第二行PATH变量指定了系统执行命令的路径 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户 如果MAILTO变量的值为空,则表示不发送任务执行信息给用户 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。 星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
14、系统日志查看
journalctl 查询系统日志的工具 查看某时间段的日志 journalctl --since "2020-01-01 20:00:00" --until "2020-02-01 20:15:00" 查看某个服务的日志 journalctl -u rsyslog.servrice journalctl -xe是什么意思 -xe是排查问题时最常用的参数:-e 从结尾开始看 -x 相关目录(如:问题相关的网址) 滚屏输出日志 journalctl -f -n 20;
15、常见系统日志及目录
linux中有一个重要的目录就是:/var/log/目录,主要存放的是系统日志文件: /var/log/message :系统启动后的信息和错误日志,是Linux中最常用的日志之一 /var/log/secure :与安全相关的日志信息 /var/log/maillog :与邮件相关的日志信息 /var/log/cron :与定时任务相关的日志信息 /var/log/spooler :与UUCP和news设备相关的日志信息 /var/log/boot.log :守护进程启动和停止相关的日志消息 其他常见目录: bin :存放普通用户可执行的指令,即使在单用户模式下也能够执行处理 boot :开机引导目录,包括Linux内核文件与开机所需要的文件 dev :设备目录,所有的硬件设备及周边均放置在这个设备目录中 etc:各种配置文件目录,大部分配置属性均存放在这里 home:这里主要存放你的个人数据,具体每个用户的设置文件,用户的桌面文件夹,还有用户的数据都放在这里。每个用户都有自己的用户目录,位置为:/home/用户名。当然,root用户除外。 lib:开机时常用的动态链接库,bin及sbin指令也会调用对应的lib库 lib64:开机时常用的动态链接库64位,bin及sbin指令也会调用对应的lib库 lost+found:是一个特殊目录,用途是用来存放文件系统错误导致文件丢失后找回数据的;如果你不小心删除了lost+found目录,不用使用mkdir命令创建lost+found目录,应该使用 mklost+found命令创建lost+found目录。 media:可移除设备挂载目录,类似软盘 U盘 光盘等临时挂放目录 mnt:用户临时挂载其他的文件系统,额外的设备可挂载在这里,相对临时而言 opt:第三方软件安装目录,现在习惯性的放置在/usr/local中 proc:虚拟文件系统,通常是内存中的映射,特别注意在误删除数据文件后,比如DB,只要系 统不重启,还是有很大几率能将数据找回来 root:系统管理员主目录,除root之外,其他用户均放置在/home目录下 run:系统运行是所需文件,以前防止在/var/run中,后来拆分成独立的/run目录。重启后重新生成对应的目录数据 sbin:只有root才能运行的管理指令,跟bin类似,但只属于root管理员 srv:服务启动后需要访问的数据目录, sys:跟proc一样虚拟文件系统,记录核心系统硬件信息 tmp:存放临时文件目录,所有用户对该目录均可读写 usr:应用程序放置目录, var :存放系统执行过程经常改变的文件, vmlinuz : 是可引导的,压缩的linux内核,“vm”代表的“virtual memory”,一般是一个软连接.