- 1. Shell常规用法
- 2. CentOS命令
- 3. CentOS7安装软件遇到的问题
- 4. CentOS中配置静态上网的方法
- 5. mac下,安装vbox(内部centos),解决vbox内虚拟机上网问题
- 6. Ubuntu命令
- 7. 遇到的一些问题
- 8. CentOS忘记root密码
- 9. Mac下命令
- 10. Bash Shell常用
1. Shell常规用法
1.1. 基础语法
# 开头放置以下这个,表示用的bash来执行shell
#!/bin/bash
# 获取当前路径
cur_dir=$(cd `dirname $0`; pwd)
# 获取脚本名称
shell_name="$(basename "$0")"
# 递归创建目录
mkdir -p "~/test1/test2"
# 参数传递$*
main $*
1.2. 条件判断
# 判断目录是否存在
if [ ! -d "~/test" ]; then
echo "~/test not exist."
fi
# 判断文件是否存在
if [ ! -f "~/test.txt" ]; then
echo "~/test.txt not exist."
fi
# 判断变量是否有值
if [ ! -n "$var" ]; then
echo "$var is empty"
fi
# 判断变量是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
# 判断命令是否存在
type cmake >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "cmake exist."
else
echo "cmake not exist."
fi
# 判断命令是否存在(更通用)
command -v cmake >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "cmake exist."
else
echo "cmake not exist."
fi
#判断字符串是否相等
if [ "$A" = "$B" ];then
echo "[ = ]"
fi
#判断字符串是否相等,与上面的=等价
if [ "$A" == "$B" ];then
echo "[ == ]"
fi
#注意:==的功能在[[]]和[]中的行为是不同的,如下
#如果$a以”a”开头(模式匹配)那么将为true
if [[ "$A" == a* ]];then
echo "[[ ==a* ]]"
fi
#如果$a等于a*(字符匹配),那么结果为true
if [[ "$A" == "a*" ]];then
echo "==/"a*/""
fi
打日志
info() {
echo -e "\033[36m${1} \033[0m"
}
step() {
echo -e "\033[32m[step] ${1} \033[0m"
}
warn() {
echo -e "\033[33m${1} \033[0m"
}
error() {
echo -e "\033[31m[err] ${1}\033[0m"
}
1.3. 循环
1.4. 参数解析
1.5. 字符串操作
1.5.1. 字符串截取
1.5.2. 大小写转换
1.5.3. 字符串替换
1.6. 文本操作
1.6.1. 文本替换
1.7. 高级通用语法
1.7.1. 增加sudo账户
# 切换到root账户
su root
# 打开sudo配置
visudo
# 增加自己的账户到sudo账户列表
keencentos8 ALL=(ALL) ALL
# 也可以让自身用户无需输入密码来执行任意命令
keencentos8 ALL=(ALL) NOPASSWD: ALL
2. CentOS命令
# 系统信息
查看系统版本号:cat /proc/version
修改主机名字:hostnamectl set-hostname admin_keam
查看主机信息:hostnamectl
查看CentOS版本号:cat /etc/redhat-release
增加账户:useradd admin_keam 设置账户密码:passwd admin_keam 给新账户增加sudo权限命令:visudo(然后在打开的文件里,找到root ALL(ALL) ALL,往下新增一行admin_keam ALL(ALL) ALL)
更改文件或文件夹所属用户组:chown -R admin_keam /etc/elasticsearch
# 便捷工具
以json格式化展示数据(安装jq):cat xxxx.txt | jq
显示时间戳对应的具体时间:date -d @1594088377 "+%Y-%m-%d %H:%M:%S"
动态监控文件修改:tail -f filexxxx
# 资源信息
查看运行进程:ps -aux
查看资源占用情况:top
查看网络资源使用情况(按进程排序展示):nethogs
查看网络端口占用情况:netstat -tunlp
查看磁盘空间:df -h
查看根目录下各个文件占用情况:du -ah --max-depth=1 /
查看某个目录占用:du -bsh /usr/
查看当前目录下所有文件的磁盘占用:ll -Sh
# 安装
查看安装软件:yum list installed | grep elasticsearch.noarch
卸载安装软件:yum remove elasticsearch.noarch
安装软件RPM:rpm -ivh filebeat-1.0.1-x86_64.rpm
# 文件路径
查看隐藏文件:ls -a
查看文件安装路径:whereis logstash
删除目录:rm -rf firefox
全系统查找文件:find / -name rabbitmq
# 服务
关闭服务:systemctl stop firewalld.service
关闭服务自启动:systemctl disable firewalld.service
查看服务状态:systemctl status firewalld.service
# 压缩解压缩
安装zip和unzip命令:yum install zip unzip
解压.zip文件:unzip client.zip
压缩.zip文件:zip -r client.zip client
解压.tgz文件:tar zxvf client.tgz -C client
# ssh
ssh登入:ssh username@ip -p 22
ssh登出:logout
ssh传输:rz -bey
ssh接收:sz xxxx
远程执行命令:sshpass -p passwdxxx ssh -p 22 root@192.168.190.110 "source /etc/profile; cleanenv.sh" # 注意:远程执行的时候,/etc/profile的全局环境变量是不加载的,只加载bashrc的环境变量,所以这里用到了的话,要动态加载一下
自动化命令:expect {cmd_file}
-----------{cmd_file}-------------
#!/usr/bin/expect -f
set timeout 10
set host "10.211.55.3"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
----------------------------------
# 编辑
覆盖写字符串到文件中:echo "xxxxxx" > /root/test.txt
追加写字符串到文件中:echo "xxxxxx" >> /root/test.txt
全文替换:sed -i 's/old string/new string/g' file
删除以什么打头的某行:sed -i '/^something/d' file
# 命令执行
后台运行:nohup ./xxxx &
# 如果想执行一连串命令,发现有各种相互依赖关系,可以按照如下方式执行。例如,这里想把对应的
a="$(who am i | awk '{print $2}')"; who | awk '{print $2}' | grep -v $a | xargs -n 1 pkill -9 -t
# 条件判断
判断是否存在某个命令:if type printf > /dev/null; then todo fi
判断文件是否可执行:if test -x /usr/ucb/echo; then todo fi
3. CentOS7安装软件遇到的问题
CentOS中安装Python3.6简单方法:https://blog.51cto.com/wenguonideshou/2083301
CentOS安装pip失败:https://www.cnblogs.com/saolv/p/6963314.html
4. CentOS中配置静态上网的方法
# 虚拟机中NAT模式下CentOS配置静态ip上网:
(1)首先配置静态ip:vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="00:0C:29:6C:BB:E6"
NM_CONTROLLED="yes"
ONBOOT="no"
NETMASK=255.255.255.0
IPADDR=192.168.0.8
GATEWAY=192.168.0.1 # 网关也必须设置,否则无法上网
BOOTPROTO=static # 这个是核心,默认是dncp
ONBOOT=yes # 这个必须设置,否则network无法工作
PEERDNS=yes
(2)宿主机(windows)找到本机dns服务器:cmd下,ipconfig
以太网适配器 以太网:
DHCPv6 IAID . . . . . . . . . . . : 372284451
DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-24-56-C9-BD-1A-F6-43-46-7D-5B
DNS 服务器 . . . . . . . . . . . : 10.11.56.23
10.11.56.22
10.14.0.131
10.14.0.130
(3)配置CentOS中的dns:vim /etc/resolv.conf
nameserver 10.11.56.23
nameserver 10.11.56.22
nameserver 10.14.0.131
nameserver 10.14.0.130
# 注意,如果是虚拟机,dns可以设置成网关,比如192.168.0.1
(4)重启network服务:service network restart
注意:如果是两台虚拟机拷贝,即使像上面这样修改了,有一台还是无法上网,原因是mac地址冲突了,两台虚拟机的mac地址一样。这个时候需要修改一下mac地址。
关闭虚拟机,然后编辑***.vmx文件,找到:
ethernet0.addressType = "generated"
uuid.bios = "56 4d ed 23 13 8c 96 91-7c 68 b2 09 8b aa bb cc"
ethernet0.generatedAddress = "00:0c:29:aa:bb:cc"
其中,uuid.bios的后6个数字,就是动态生成的网卡地址的后6位,将这后几位修改掉,就可以改变MAC地址值
# windows(10.17.14.12) ——> vm centos(192.168.2.132) ——> vm centos(172.17.0.2),如何建立隧道访问到虚拟机中的虚拟机
参考:https://eternalcenter.com/?p=2843
5. mac下,安装vbox(内部centos),解决vbox内虚拟机上网问题
首先,解决虚拟机内部上网问题,使用NAT网络上网
step1:配置NAT网络。vbox全局设置菜单:VirtualBox ——> 偏好设置 ——> 网络 ——> NAT网络 ——> 添加(假设命名为NatNetwork);不使用dncp,记住网段10.0.2.0
step2:配置vbox虚拟机CentOS的网络设置。网络 ——> 网卡1 ——> 连接方式:NAT网络;界面名称:NatNetwork
step3:进入vbox centos系统内,参照# CentOS中配置静态上网的方法,注意使用10.0.2.1作为网关
step4:test,看虚拟机是否能上网:ping www.baidu.com;看虚拟机是否能联通主机:ping 192.168.31.118
step5:关闭防火墙。systemctl stop firewalld.service(关闭防火墙);systemctl disable firewalld.service(禁止开机启动)
step6:主机尝试ping一下虚拟机(假设静态ip设置为:10.0.2.100),结果是ping不通。此时在宿主机上,ifconfig看不到任何虚拟网卡指向vbox,是因为没有开通host访问。下面步骤是开通虚拟机允许host访问。
step7:创建vbox主机访问虚拟网卡。vbox全局设置菜单 ——> 管理 ——> 主机网络管理器 ——> 创建一个虚拟网卡vboxnet0
step8:配置虚拟机centos设置,网卡2,host主机访问,选中刚创建的vboxnet0
step9:进入centos虚拟机中,cp一份虚拟机内部网卡配置。
cd /etc/sysconfig/network-scripts
cp ifcfg-ensp03 ifcfg-ensp08
vim ifcfg-ensp03
# 增加HWADDR=xx:xx:xx:xx:xx:xx(这个mac地址,在虚拟机centos设置中网卡高级选项中查看,写成:分割形式)uuid两个配置文件要保证不一样
vim ifcfg-ensp08
# 增加HWADDR=xx:xx:xx:xx:xx:xx,注意修改uuid
# 修改ip地址和网关,注意网段是刚刚生成的192.168.56.xx
step10:重启网卡设置。service network restart step11:如果宿主机mac想要ssh到centos,还需要centos开启sshd服务。systemctl restart sshd。然后mac上ssh root@192.168.56.100即可
6. Ubuntu命令
Ubuntu登陆启用root用户登陆:
$ sudo passwd root
$ sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
添加如下:
greeter-show-manual-login=true
# 重启,选中login登陆,输入root和密码即可
不让控制台显示全路径
$ vim ~/.bashrc
将所有的w修改为W即可
注意,还需要将/root/.profile结尾的mesg n那行,替换为tty -s && mesg n
另外,为了能正常ssh连接,需要手动安装apt-get install openssh,同时,为了能正常ssh到root用户,需要修改ssh服务配置,如下:
$ /etc/ssh/sshd_config
#PermitRootLogin without-password
PermitRootLogin yes
然后重启ssh服务即可:service ssh restart
7. 遇到的一些问题
问题1:配置了DHCP导致DNS是动态获取的,但是如果知道动态脚本分发的dns不满足要求,还需要增加一个的话,怎么加呢?直接加到/etc/resolv.conf,因为是动态的,重启network的话,又会回滚掉?
# /etc/sysconfig/network-script/ifcfg-eth0,这个文件是用来控制网络相关,优先级最高的,无论什么脚本,这里有的选项,都必须加上。所以,如果动态分配的dns不满足,则直接增加一个即可
ifconfig # 查看具体对应的iface,加入这里找到的是eth0
cd /etc/sysconfig/network-script/
ls # 查找上面iface:ifg-eth0
vim /etc/sysconfig/network-script/ifcfg-eth0
# 在这里添加一项进去:DNS1=8.8.8.8
# ifg-eth0文件如下:
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=eth1
NM_CONTROLLED=no
ONBOOT=yes
PERSISTENT_DHCLIENT=yes
TYPE=Ethernet
USERCTL=no
DNS1=8.8.8.8 # 我们添加的,还可以增加DNS2、DNS3等
问题2:已知两个网络,telnet对应端口可以连通,但是http不通怎么办?
# 首先,需要排查有无全局代理,或者对应网络走的哪个代理
# 其次,需要排查防火墙的设置
8. CentOS忘记root密码
- Step1:系统启动时,进入选择页面,按[e]进入Step2
- Step2:在“linux16”命令最后加上“init=/bin/sh”,按[Ctrl+x]进入单用户模式
- Step3:执行以下命令,修改密码
# 将所有文件设置为可读写模式 mount -o remount,rw / # 输入以下命令回车,会要求填写新的root密码 passwd # 修改系统时间标签 touch /.autorelabel # 重启系统 exec /sbin/init
9. Mac下命令
# mac os 10.15版本
# 清除dns缓存
sudo dscacheutil -flushcache
10. Bash Shell常用