运维工作常见问题处理1-37(一)

本篇目录链接

          • 问题1、-bash: fork: retry: Resource temporarily unavailable
          • 问题2、es集群扩容报错exception caught on transport layer [[id: 0xe5b76b76]], closing connection java.net.NoRouteToHostException: No route to host
          • 问题3、在centos7上克隆虚拟机后,虚拟机无法启动
          • 问题4、防火墙添加/删除富规则命令 ,端口转发
          • 问题5、开机自启(https://www.cnblogs.com/qmfsun/p/3847459.html)
          • 问题6、mysql建库、用户、授权、修改密码
          • 问题7、vnc服务问题
          • 问题8、数据库备份,还原
          • 问题9、rpm强制安装,跳过依赖卸载
          • 问题10、给某个磁盘写入固定大小的文件
          • 问题11、rabbitmq默认端口修改(rpm安装方式)
          • 问题12、mongodb数据库
          • 问题13、Zabbix客户端日志出现(Not all processes could be identified, non-owned process info
          • 问题14、添加sudo权限,无密码验证
          • 问题15、取差集---- b-a
          • 问题16、时钟问题
          • 问题17、docker常用命令
          • 问题18、压缩,解压
          • 问题19、vim 编辑jar包
          • 问题20、linux下的压力测试工具
          • 问题21、利用dd来进行测试:
          • 问题22、清理系统缓存
          • 问题23、redis集群初始化(需要事先启动redis集群)
          • 问题24、shell脚本中echo显示内容带颜色
          • 问题25、解决Python升级以后yum不能使用的问题
          • 问题26、Linux 好用的小工具
          • 问题27、VMware中虚拟机上网问题
          • 问题28、CVS显示No such file or directory
          • 问题29、vim多行注释和取消注释
          • 问题30、shell grep -v 排除多个输出结果
          • 问题31、kvm虚拟机shutdown命令不起作用
          • 问题32、nginx安装
          • 问题33、windows命令重启sqlserver,mysql
          • 问题34、notpad++消除空行
          • 问题35、使用curl和用户名和密码访问
          • 问题36、使用linux命令行界面调用windows远程桌面
          • 问题37、curl和wget的下载区别和使用

问题1、-bash: fork: retry: Resource temporarily unavailable

进程数量问题,通过更改ulimit -u 4096 配置
修改 /etc/security/limits.d/20-nproc.conf
* soft nproc 655350
root soft nproc unlimited

修改/etc/sysctl.conf中的值fs.file-max,为修改成了655350
然后执行sysctl -p

问题2、es集群扩容报错exception caught on transport layer [[id: 0xe5b76b76]], closing connection java.net.NoRouteToHostException: No route to host

防火墙策略问题,通过firewall-cmd --add-rich-rule ‘rule family=“ipv4” source address="***.***.***.***" port port=“端口号” protocol=“tcp” accept’ --permanent

问题3、在centos7上克隆虚拟机后,虚拟机无法启动

报错如下:
error: Failed to start domain 16lnmp
error: unsupported configuration: Unable to find security driver for label selinux
解决办法:将虚拟机的xml配置文件中涉及selinux的配置删掉

问题4、防火墙添加/删除富规则命令 ,端口转发

firewalld
firewall-cmd --add-rich-rule ‘rule family=“ipv4” source address=“192.168.10.42” port port=“4220” protocol=“tcp” accept’ --permanent 添加富规则
firewall-cmd --reload
firewall-cmd --remove-rich-rule ’ rule family=“ipv4” source address=“192.168.10.42” port port=“4220” protocol=“tcp” accept’ --permanent 删除富规则
firewall-cmd --reload
防火墙添加/删除端口命令
firewall-cmd --permanent --add-port=522/tcp --zone=public 开放某个端口
firewall-cmd --zone=public --add-port=80/tcp --permanent 开放多个端口
firewall-cmd --permanent --remove-port=10050/tcp --zone=public 删除某个端口
firewall-cmd --reload
端口转发
firewall-cmd --permanent --add-forward-port=port=8090:proto=tcp:toaddr=192.168.1.161:toport=8090:proto=tcp 把访问本机的9400端口转发到172.26.234.193:9400服务上
firewall-cmd --reload
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.202 --permanent
iptables
iptables -I INPUT -p tcp --dport 80 -j ACCEPT 放通80端口
iptables -I INPUT -s 192.168.10.156 -ptcp --dport 7004 -j ACCEPT 放通本机的7004端口到192.168.10.156
service iptables save 保存配置
service iptables restart
https://www.cnblogs.com/zongfa/p/7967935.html

问题5、开机自启(https://www.cnblogs.com/qmfsun/p/3847459.html)

chkconfig --list #列出所有的系统服务
chkconfig --add httpd #增加httpd服务
chkconfig --del httpd #删除httpd服务
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
chkconfig --list mysqld #列出mysqld服务设置情况
chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,–level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

问题6、mysql建库、用户、授权、修改密码

创建库
create database 数据库名;
CREATE DATABASE wg_media_hot DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
删除库
drop database 数据库名;
建用户
CREATE USER ‘sprint01’@’%’ IDENTIFIED BY ‘Sprint02@mysql’;
CREATE USER ‘test’@’%’ IDENTIFIED BY ‘test123’;
CREATE USER ‘wg_dba’@’%’ IDENTIFIED BY ‘Wgdb%2017’;
username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
删除用户
DROP USER ‘username’@‘host’;
授权
grant all privileges ON databasename.tablename TO ‘username’@‘host’
grant all privileges on . to ‘wg_dba’@’%’;
grant all privileges on . to ‘dba’@’%’;
grant all privileges on . to ‘sprint01’@’%’;
grant all privileges on . to ‘wg_dba’@’%’;
grant select,insert,update,delete on . to wg@% identified by “wg%2017”
FLUSH PRIVILEGES;

privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%

用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO ‘username’@‘host’ WITH GRANT OPTION;

设置与更改用户密码
SET PASSWORD FOR ‘username’@‘host’ = PASSWORD(‘newpassword’);
SET PASSWORD FOR ‘slave’@‘10.80.14.78’ = PASSWORD(‘wenge%2018’);
alter user ‘root’@‘localhost’ identified by ‘root’;
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘10.80.14.%’ IDENTIFIED BY ‘wenge%2018’;
如果是当前登陆用户用:SET PASSWORD = PASSWORD(“newpassword”);
撤销用户权限
REVOKE privilege ON databasename.tablename FROM ‘username’@‘host’;
privilege, databasename, tablename:同授权部分
如:REVOKE SELECT ON . FROM ‘pig’@’%’;

问题7、vnc服务问题

https://blog.csdn.net/zhixingheyi_tian/article/details/82284218

问题8、数据库备份,还原

备份
mysqldump -uroot -p event_view_dist > event_view_dist.sql 备份某个库
mysqldump -h主机名 -u用户名 -p密码 数据库名 表名 > 文件 备份某个库中的某个表
mysqldump -u username -p --databases dbname2 dbname2 > Backup.sql 备份多个库
mysqldump -u username -p -all-databases > BackupName.sql 备份所有库
dbname参数表示数据库的名称;
table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;
BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件
还原(需要存在库)
mysql -u root -p [dbname] < backup.sql
压缩备份
mysqldump -h主机ip -u用户名 -p密码(也可不输入) 数据库名 | gzip > 压缩后文件位置
mysqldump -hhostname -uusername -ppassword databasename | gzip > databasename-date +%Y-%m-%d.sql.gz
还原
gunzip < databasename-2018-07-25.sql.gz | mysql -uroot -proot databasename

问题9、rpm强制安装,跳过依赖卸载

rpm -ivh --force --nodeps 软件包
rpm -e --nodeps 软件包

问题10、给某个磁盘写入固定大小的文件

https://blog.csdn.net/jekenzhuang/article/details/80117131
https://blog.csdn.net/noviblue/article/details/56012275
https://www.cnblogs.com/wpjzh/p/5999363.html
dd指令:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
dd if=/dev/zero of=/test bs=1024k count=20 — 往根/下写入一个20M的test文件
dd if=/dev/hdb of=/dev/hdd — 将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/root/image — 将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/root/image of=/dev/hdb — 将备份文件恢复到指定盘
dd if=/dev/hdb | gzip > /root/image.gz — 备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
gzip -dc /root/image.gz | dd of=/dev/hdb — 将压缩的备份文件恢复到指定盘

测试硬盘的读写速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

修复硬盘:
dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的。

问题11、rabbitmq默认端口修改(rpm安装方式)

通常可以通过修改环境变量
find / -name rabbitmq-env
/usr/lib/rabbitmq/bin/rabbitmq-env
/usr/lib/rabbitmq/lib/rabbitmq_server-3.7.8/sbin/rabbitmq-env
其中/usr/lib/rabbitmq/bin/rabbitmq-env是/usr/lib/rabbitmq/lib/rabbitmq_server-3.7.8/sbin/rabbitmq-env的软连接
然后修改sbin/rabbitmq-env的环境变量(找NODE_PORT即可,将5672换成别的端口)

问题12、mongodb数据库

https://www.cnblogs.com/wywnet/p/5102946.html
https://www.jianshu.com/p/4ecde929b17d
登录
mongo ip (或进入到mongo安装的目录下,如:cd /u01/isi/application/component/mongodb-3.2.8/bin ; ./mongo 192.168.1.138)
show dbs - 查看服务器上的数据库
use 数据库名 - 切换数据库
show collections - 查看当前数据库中的所有集合
创建数据库:mongo中创建数据库采用的也是use命令,如果use后面跟的数据库名不存在,那么mongo将会新建该数据库。不过,实际上只执行use命令后,mongo是不会新建该数据库的,直到你像该数据库中插入了数据
db.dropDatabase() - 删除当前正在使用的数据库
db - 查看当前数据库
db.version() - 查看当前数据库版本
备份数据库
导出
mongodump --host IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件路径
导入
mongorestore --host --port -d 文件路径

问题13、Zabbix客户端日志出现(Not all processes could be identified, non-owned process info

will not be shown, you would have to be root to see it all.)
解决方法 :
chmod +s /bin/netstat
chmod +s 是什么意思
为了方便普通用户执行一些特权命令,SUID/SGID程序允许普通用户以root身份暂时执行该程序,并在执行结束后再恢复身份

问题14、添加sudo权限,无密码验证

编辑/etc/sudoers文件
100行添加“isi ALL=(ALL) NOPASSWD:ALL” 即可
100行添加“isi ALL=(ALL) ALL” #在切换sudo是需要输入密码

isi ALL=(ALL) NOPASSWD: /bin/whoami,/bin/sudo,/bin/su #让isi用户可以使sodu su 命令

问题15、取差集---- b-a

sort a.txt b.txt | uniq -u

问题16、时钟问题

hwclock --show 查看硬件时间
date 查看硬件时间
tzselect 用于自定义设置不同时间的时间(直接命令行tzselect回车后,可自己选择性设置)
export TZ=‘Asia/Shanghai’ 同tzselect一样,只是写在环境变量中

问题17、docker常用命令

docker pull images_name 从公网拉取一个镜像
docker images 查看已有的docker镜像
docker command --help 查看帮助
docker search nginx 查看镜像列表
docker run hello-world 基于hello-world镜像启动一个容器,如果本地没有镜像会从公网拉取过来,这次做为测试用
docker save -o image_name.tar image_name 导出镜像
docker rmi image_name 删除镜像
docker run --name=con_name images 启动一个容器,–name #设置容器名

Docker容器进入的4种方式 https://www.cnblogs.com/xhyan/p/6593075.html
1.使用docker attach进入Docker容器
docker run -it -d ubuntu:14.04 /bin/bash
2.使用SSH进入Docker容器 不推荐
3.使用nsenter进入Docker容器
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
tar -xzvf util-linux-2.24.tar.gz
cd util-linux-2.24/
./configure --without-ncurses
make nsenter
cp nsenter /usr/local/bin

nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程的PID。可以使用docker inspect命令来拿到该PID。

docker ps #拿到容器的pid
docker inspect 容器的pid #docker inspect来查看该容器的详细信息
docker inspect -f {{.State.Pid}} 容器的pid #拿到该进程PID,然后就可以使用nsenter命令访问该容器了
nsenter --target 进程pid --mount --uts --ipc --net --pid
docker inspect命令使用如下:
4.使用docker exec进入Docker容器 推荐
docker exec -it 775c7c9ee1e1 /bin/bash

基于创建好的容器自定义docker镜像
docker commit -m “con_name” con_id image_name
创建一个容器的同时进入这个容器
docker run -it --name=con_name images
-it #在启动之后进入这个容器
创建一个容器,放入后台运行,把物理机80端口映射到容器的80端口
docker run -d -p 81:80 image_name
#-p 参数说明
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort
-p hostPort:containerPort:udp

删除容器
docker ps #找到要停掉容器id
docker stop ccaffb725895 #停掉容器
docker ps -a #查看容器id
docker rm ccaffb725895 #删除容器即可
保存容器
docker ps -a #查看容器id
docker start ccaffb725895 #启动容器
docker attach ccaffb725895 #进入容器
docker images #查看镜像(可忽略)
docker commit -a “liqiu [email protected]” ccaffb725895 ubuntu:ssh-ubuntu # -a 添加容器名称 ccaffb725895为容器id ubuntu:ssh-ubuntu 镜像名称和版本
docker images #查看镜像是否生成

docker port con_id 看容器的端口映射情况
docker ps 查看正在运行的容器,等同于docker container ls
docker ps -a 查看所有的容器,,等同于docker container ls -a
docker logs -f con_name 动态查看容器日志
docker attach con_name 进入容器
退出容器
方法一
exit
方法二
ctrl+p && ctrl+q (一起按,注意顺序,退出后容器依然保持启动状态)

docker rm con_name 删除容器
#强制删除需要加-f,不加-f不能删除正在运行中的容器,非常危险,最好不用

docker network ls 查看docker网络
创建一个docker网络my-docker
docker network create -d bridge
–subnet=192.168.0.0/24
–gateway=192.168.0.100
–ip-range=192.168.0.0/24
my-docker

利用刚才创建的网络启动一个容器
#docker run --network=my-docker --ip=192.168.0.5 -itd --name=con_name -h lb01 image_name
–network #指定容器网络
–ip #设定容器ip地址
-h #给容器设置主机名
查看容器pid
#方法一:
docker top con_name

#方法二:
docker inspect --format “{{.State.Pid}}” con_name
运行dockerfile并给dockerfile创建的镜像建立名字
docker build -t mysql:3.6.34 pwd
mariadb容器启动前需先设置密码方法
docker run -d -P -e MYSQL_ROOT_PASSWORD=password img_id
docker修改镜像名
docker tag imageid name:tag
进入docker容器脚本
[root@docker ~]# cat nsenter.sh
PID=docker inspect --format "{{.State.Pid}}" $1
nsenter -t $PID -u --mount -i -n -p
创建一个网络
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
将容器添加到my_net2网络 connect
docker network connect my_net2 oldboy1
docker日志模块
使用filebeat收集日志

{
“registry-mirrors”: [“https://56px195b.mirror.aliyuncs.com”],
“cluster-store”:“consul://192.168.56.13:8500”,
“cluster-advertise”: “192.168.56.11:2375”,
“log-driver”: “fluentd”,
“log-opts”: {
“fluentd-address”:“192.168.56.13:24224”,
“tag”:“linux-node1.example.com”
}
}

问题18、压缩,解压

gzip用法
-c或–stdout或–to-stdout  把压缩后的文件输出到标准输出设备,不去更动原始文件。
-d或–decompress或----uncompress  解开压缩文件。
-f或–force  强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-l或–list  列出压缩文件的相关信息。
-q或–quiet  不显示警告信息。
-r或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose  显示指令执行过程。
-V或–version  显示版本信息。
-<压缩效率>  压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。
–best  此参数的效果和指定"-9"参数相同。
–fast  此参数的效果和指定"-1"参数相同

问题19、vim 编辑jar包

1)安装unzip yum install -y unzip zip
2)直接vim jar包名
3)/要找的文件名定位修改的文件
4)在定位到后,该配置文件会标黄,直接回车进入编辑模式,即可编辑了
5)在编辑后一定别忘了wq保存成果啊

问题20、linux下的压力测试工具

在Linux系统的服务器上使用Memtester进行内存压力测试 http://pyropus.ca/software/memtester/
1)下载wget http://pyropus.ca/software/memtester/old-versions/memtester-4.2.2.tar.gz
wget http://pyropus.ca/software/memtester/old-versions/memtester-4.3.0.tar.gz
2)安装
tar zxvf memtester-4.2.2.tar.gz ; cd memtester-4.2.2 ;make && make install
3)参数介绍
memtester [-p PHYSADDR] [ITERATIONS]
MEMORY 申请测试内存的数量,单位默认是megabytes(兆),也可以是B K M G
ITERATIONS 测试的次数,默认是无限
4)开始测试,申请10M内存,测试一次,如下图:
memtester 10M 1
主要想对内存进行压力测试,以上只是试用,可以申请大内存,放入后台无限测试
nohup memtester 2G > /tmp/memtest.log &

压力测试的工具还有stress
yum -y install stress
https://www.cnblogs.com/sparkdev/p/10354947.html

问题21、利用dd来进行测试:

time dd if=/dev/zero of=test bs=1M count=4096
用top和iostat查看wa%及写硬盘速度

问题22、清理系统缓存

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。
Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?
所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。
要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存(一般情况下执行是仅需要输入数字3即可)

首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。
00 00 * * * sync && echo 3 > /proc/sys/vm/drop_caches
查看内存条数命令
dmidecode | grep -A16 “Memory Device$”

问题23、redis集群初始化(需要事先启动redis集群)

方法一:通过redis-trib.rb工具,需要安装ruby(版本大于2.3以上)
step1:
yum -y install ruby rubygems #安装ruby工具
ruby --version #检查ruby版本
gem install redis #安装redis集群工具,此步骤执行失败后执行下命令,安装成功后可以ls /usr/local/rvm/scripts/rvm 目录

gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB #用于安装redis集群工具

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
step2:
curl -L get.rvm.io | bash -s stable
step3:
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
step4:
rvm install 2.3.3 #安装一个红宝石版本
rvm use 2.3.3 #使用一个ruby版本
rvm use 2.3.3 --default #设置默认版本
rvm remove 2.0.0 #卸载一个已知版本
ruby --version #查看ruby版本
step5:
gem install redis #安装工具
需要启动集群后座初始化(清理掉原先配置生成的node文件和认证文件)
cd redis-4.0.11/src/
./redis-trib.rb create 172.16.20.12:6379 172.16.20.12:6380 172.16.20.12:6381
输入 yes

方法二:通过自带的redis-cli命令创建
./src/redis-cli --cluster create 192.168.10.139:7001 192.168.10.139:7002 192.168.10.139:7003 192.168.10.140:7001 192.168.10.140:7002 192.168.10.140:7003 --cluster-replicas 1
输入yes

cluster info #查看集群信息
cluster nodes #查看集群的节点

问题24、shell脚本中echo显示内容带颜色

shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e
echo -e “\033[字背景颜色;文字颜色m字符串\033[0m”
注:
  1、字背景颜色和文字颜色之间是英文的""
  2、文字颜色后面有个m
  3、字符串前后可以没有空格,如果有的话,输出也是同样有空格
  下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”

问题25、解决Python升级以后yum不能使用的问题

原因:因为yum是基于Python编写的,而Python3和Python2有部分语法是不同的
修改yum配置文件/usr/bin/yum,把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.7
修改/usr/libexec/urlgrabber-ext-down文件,将python同样指向python2.7

sed -i ‘s%#!/usr/bin/python%#!/usr/bin/python2.6%g’ /usr/bin/yum
sed -i ‘s%#!/usr/bin/python%#!/usr/bin/python2.6%g’ /usr/libexec/urlgrabber-ext-down

问题26、Linux 好用的小工具

可以自动补齐命令 yum -y install bash-completion
非交互SSH密码验证-sshpass
tar -zxvf sshpass-1.05.tar.gz;cd sshpass-1.05;./configure --prefix=/usr/local/sshpass;make;make install;cp /usr/local/sshpass/bin/sshpass /usr/bin/
sshpass -p ‘123456’ ssh user_name@host_ip
sshpass -p ‘123456’ scp root@host_ip:/home/test/t ./tmp/

问题27、VMware中虚拟机上网问题

NAT模式
step1:
打开VMware-编辑-虚拟网络编辑器-选择NAT模式(并查看NAT设置,DHCP设置)-确定
step2:
选择所在的虚拟机-右键设置-编辑虚拟机设置-网络适配器-选择NAT模式-确定
step3:进所在的虚拟机命令行,cd /etc/sysconfig/network-script/ifcfg-ens33
主要配置项
将ONBOOT改为yes
将BOOTPROTO改为static(dhcp也可以;如果需要静态ip,改为static或者none)
配置ip地址、子网掩码、网关等。配置ip一定要是在step1中的ip范围;网关一定是step1中NAT设置中的ip

问题28、CVS显示No such file or directory

解决版本:存在仓库的链接显示问题

问题29、vim多行注释和取消注释

多行注释:
step1: 进入命令行模式,按ctrl + v进入 visual block模式(可视快模式),然后按j, 或者k选中多行,把需要注释的行标记起来
step2:按大写字母i,再插入注释符,例如//
step3: 按esc键就会全部注释了(按两下)
取消多行注释:
step1:进入命令行模式,按ctrl + v进入 visual block模式(可视快模式),按小写字母L横向选中列的个数,例如 // 需要选中2列
step2: 按字母j,或者k选中注释符号
step3:按d键就可全部取消注释

问题30、shell grep -v 排除多个输出结果

ps -fe|grep pktgen | grep -vE ‘(grep|/bin/bash)’
-v:显示不包含匹配文本的所有行。反向查找。
-E:使用扩展正则表达式

问题31、kvm虚拟机shutdown命令不起作用

解决:
在vmhost虚拟机里面安装acpid服务,因为shutdown通过这个来给虚拟机发送关机指令。
yum install acpid acpid-sysvinit -y
reboot
然后就可以正常使用
virsh shutdown vmhost
来关闭虚拟机了
virsh start snale 开启虚拟机
virsh autostart snale 开机启动
virsh shutdown snale 关闭虚拟机
virsh reboot snale 重启关闭虚拟机
virsh destroy snale 强制关闭虚拟机
virsh suspend snale 暂停(挂起)KVM 虚拟机
virsh resume snale 恢复被挂起的 KVM 虚拟机
virsh undefine snale 删除KVM 虚拟机,先shutdown或者destroy虚拟机
注:KVM 虚拟机默认是无法用virsh shutdown 进行关机的,如果要想使用该命令关机,则必须在kvm 虚拟机上安装acpid acpid-sysvinit 两个包,启动acpid 服务,并且加入随机启动,如下:
yum install -y acpid acpid-sysvinit
systemtl start acpid && systemtl start acpid
将虚拟机重启后,再使用virsh shutdown 即可关机

问题32、nginx安装

软件包见 E:\工作\工作\软件包\组件\nginx
dir=$(pwd)
cd ${dir}
yum -y install gcc gcc-c++ make unzip pcre pcre-devel zlib zlib-devel libxml2 libxml2-devel readline readline-devel ncurses ncurses-devel perl-devel perl-ExtUtils-Embed openssl-devel bash-complation net-tools lrzsz upzip zip
tar -xf nginx-1.14.2.tar.gz
groupadd www
useradd -g www www
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-stream --without-http_rewrite_module
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-stream
make -j 4 && make install
cd …
unzip nginx-rtmp-module-master.zip -d /usr/local/nginx
cd /usr/local/nginx/
./sbin/nginx
user root;
worker_processes 4;
events {
worker_connections 51200;
accept_mutex on;
multi_accept on;
use epoll;
}

gzip on;
gzip_min_length 5k;
gzip_buffers 4 16k;
gzip_comp_level 3;



include /usr/local/nginx/conf/conf.d/*.conf;

问题33、windows命令重启sqlserver,mysql

net stop/start mssqlserver
net stop/start mysql

问题34、notpad++消除空行

去除行尾空格和空白行 选择正则表达式 – 查找目标:\s+$ 替换为空。\s的意思是匹配任何空白字符,包括制表符、空格、换页符;等价于[ \f\n\r\t\v]
去除行首空格 选择正则表达式 – 查找目标:^\s+ 替换为空。
匹配中文 选择正则表达式 – 查找目标:[一-龥!-~]
匹配含某个字符串的行 选择正则表达式 – 查找目标:.Do succuess on.

问题35、使用curl和用户名和密码访问

https://www.cnblogs.com/seasonzone/p/7527218.html
curl -u username http://example.com 会提示输入密码
curl -u username:password http://example.com

问题36、使用linux命令行界面调用windows远程桌面

yum install -y xterm xauth rdesktop
在/etc/ssh/sshd_config里的添加配置项:
X11Forwarding yes
重启ssh
rdesktop这是一个x-client
rdesktop -f -a 16 -u administrator -p passwrod feelamcheung 192.168.0.2
或者直接
rdesktop 192.168.0.2
rdesktop -u administrator -p isi%2018 192.168.0.2

问题37、curl和wget的下载区别和使用

curl和wget基础功能有诸多重叠,如下载等。
非要说区别的话,curl由于可自定义各种请求参数所以在模拟web请求方面更擅长;wget由于支持ftp和Recursive所以在下载文件方面更擅长。类比的话curl是浏览器,而wget是迅雷9。
1.下载文件
curl -O http://man.linuxde.net/text.iso #O大写,不用O只是打印内容不会下载
wget http://www.linuxde.net/text.iso #不用参数,直接下载文件
2.下载文件并重命名
curl -o rename.iso http://man.linuxde.net/text.iso #o小写
wget -O rename.zip http://www.linuxde.net/text.iso #O大写
3.断点续传
curl -O -C -URL http://man.linuxde.net/text.iso #C大写
wget -c http://www.linuxde.net/text.iso #c小写
4.限速下载
curl --limit-rate 50k -O http://man.linuxde.net/text.iso
wget --limit-rate=50k http://www.linuxde.net/text.iso
5.显示响应头部信息
curl -I http://man.linuxde.net/text.iso
wget --server-response http://www.linuxde.net/test.iso
6.wget利器–打包下载网站
wget --mirror -p --convert-links -P /var/www/html http://man.linuxde.net/

都到这儿了,更多文章,详见个人微信公众号ALL In Linux,来扫一扫吧!
运维工作常见问题处理1-37(一)_第1张图片

你可能感兴趣的:(运维常见问题处理)