Linux运维基础阶段部分复习概要

[jj@oldboy ~]$ hostnamectl set-hostname zj  
主机名只有root用户才有权限修改,普通用户想要修改要知道root密码,sudo提权,重启虚拟机或者打开新的窗口新的主机名才会生效(bash)(重启终端)

mkdir $(date +%F-%R)_$(hostname).etc.tar.gz
mkdir `date +%F-%R`_`hostname`.etc.tar.gz
$() 和`` 都代表先执行里面的内容,最好用$() 因为反引号``不支持嵌套

[root@oldboy /]# tar zcf /backup/$(date +%F)_$(hostname)_etc.tar.gz opt
[root@oldboy /]# cd backup/
[root@oldboy backup]# ll
total 4
-rw-r--r-- 1 root root 167 Apr 27 14:02 2020-04-27_oldboy_etc.tar.gz

sh -x 脚本 

vim a.sh
#!/bin/bash
D=$(date +%F-%R)
H=$(hostname)
touch $D_$H      # 少调用变量了
touch ${D}_${H} >/dev/null  

多次调用变量的时候 用 {} 分割变量,不分割的话可能会造成 有的变量 没用调用(# $连体婴儿),
可以用脚本里的颜色来判断,命令是不是一个整体,能不能执行
#脚本里调用变量的好处:
一次解决多个指向关系,减少命令出错的机率

[root@oldboy backup]# touch $D_$H.tgz2
[root@oldboy backup]# ll -a
-rw-r--r--   1 root root   0 Apr 27 14:12 oldboy.tgz2  #
[root@oldboy backup]# touch ${D}_$H.tgz3
[root@oldboy backup]# ll
-rw-r--r-- 1 root root   0 Apr 27 14:13 2020-04-27-14:08_oldboy.tgz3
---------------------------------------------------------

vim a.sh
#!/bin/bash
D=$(date +%F-%R)
H=$(hostname)
mkdir -p /backup  #不报错,或者/dev/null
cd / && tar zcf /backup/${D}_$H.tgz etc >/dev/null

cd / && \
tar zcf /backup/${D}_$H.tgz etc  \ 表示折行的意思,(&&)两行算一行 (\ 后面必须是空,否则就是转义的意思了)

cd /          
tar zcf /backup/${D}_$H.tgz etc
不能是这样,脚本里的一条cd 命令没用任何意义(# 有的可以执行,有的不可以 ,忘记他)

要打包某个目录,一般先cd到这个目录的上一级目录,这样打包没有 删根 的提示(也相对安全),当然也可以 tar -zcPf 打包,只是这样有覆盖的隐患 # 打包文件的话随意

tar zcf 123.tgz efegr   用tar打包目录或文件,如果目录或文件不存在,那么只会打包一个空目录,空文件
tar cf 456.tgz  gthgt

------------------------------------------------


&& :前面执行成功才会执行后面的,(省略判断),同时也是一个命令行执行多个命令
|| :前面 的 和后面的执行一个, (同样省略了判断)
|  : 
'|'  在单引号里面的管道符,表示或者的意思
,  :awk sed , cut cronatb
;
-

make && make install
cd / && tar zcf etc.tgz etc && mv etc.tgz /tmp/
-------------------------------------------------------



# 判断--单条件
# if [ -d /etc ]; then echo 存在 || echo 不存在;fi  
# if [ ! -f etc ]; then echo 不存在 || echo 存在;fi
# 这样写只能echo前面的,后面的永远不会执行

[root@oldboy opt]# [ -d /op ]; echo 存在||echo 不存在   ||分割为前后,;在这...(错)
存在

[root@oldboy opt]# [ -d /op ]&& echo 存在||echo 不存在  && 和 ||一起分割 (正确)
不存在
[root@oldboy opt]# [ ! -d /op ]&& echo 不存在||echo 存在  && 和 ||一起分割 (正确)
不存在

[ -d /op ] || xx  前面不成功,后面执行xx,,,成功了就啥也不干
[ -d /op ] && xx  前面成功了,后面执行xx,,,不成功就啥也不干

[ -d $DIR ] || mkdir $DIR
[ ! -d $DIR ] && mkdir $DIR

[root@oldboy opt]# vim a.txt    # -d 判断目录是否存在, -f 判断一个文件是否存在
#!/bin/bash
if [ -d /root ];then  
        echo 存在
else
        echo 不存在
fi

#!/bin/bash
if [ -f /syy ];then
        echo 存在
else
        echo 不存在
fi


# 多条件
#!/bin/bash
if [ -f /syy ];then
        echo 存在
elif
        echo 不存在
elif
		echo
fi

echo $a
mkdir $a

[root@oldboy tmp]# which [
/usr/bin/[
[ -d /root ] &&  注意空格
elif 再或者。。else 否则
-------------------------------------------

[root@oldboy opt]# for n in `seq  30`;do date -s "2020-03-$n";touch file$n;done
`seq 30` 必须是反引号,多条命令用;分割,"2020-03-$n" 不能用单引号强引 ,done结尾
[root@oldboy opt]# ll
total 0
-rw-r--r-- 1 root root 0 Mar  1 00:00 file1  不指定时分,就默认是00:00

[root@oldboy opt]# vim /etc/profile.d/m.sh
#!/bin/bash

for n in `seq -w 30`;do
        date -s "2020-4-$n" 
        touch "2020-4-$n"   >/dev/null
done

# 必须用反引号,最好加上双引号,不然头痛 ,不用再像命令行一样用;分割命令

-----------------------------------------------


for n in `seq 10`;do   文件内容,然后以行多次 定义变量(所以叫for循环)
	echo $n
done        
[root@oldboy tmp]# for n in `seq 10`;do echo $n;done   #命令行里面的for循环跟脚本里面的for循环不一样
1
2
3
[root@oldboy tmp]# for n in seq 10;do echo $n;done   #拼凑,排成列
seq
10
[root@oldboy tmp]# for n in "seq 10";do echo $n;done
seq 10
[root@oldboy tmp]# for n in 'seq 10';do echo $n;done
seq 10

### 3个注释  两个绝对路径  1个小尾巴 (先把命令拿出去试一下)
* * * * * /bin/cd / && /bin/sh /bin/tar zcf /pp etc &>/dev/null


当用户家目录的 .bash_* 文件被删除或者移动时,bash之后 命令符状态就会发生改变,
# cp /etc/skel/.bash_* /home
vim编辑文件非正常退出,就会在家目录下生成一个.xx.swp文件,不能查看,当再次使用vim编辑这个文件的时候,就会出现提示界面

---------------------------------------------------------------

## 在安装界面 install centos7上 按tab键
# CentOS 7 要修改网卡名
net.ifnanmes=0
## 如果是dell的服务器 em1  em2  em3  em4
net.ifnames=0 biosdevname=0      (首选)

时区--KDUMP(不要勾)---选stand手动分区  
# 不用在这里修改网卡,可以装好系统之后再改网卡配置文件


## 磁盘分区(512G)
/boot: 500M
swap(虚拟内存):物理内存1~2倍,#最大8G
/:剩下的都给/

# win+R  cmd  ipconfig
以太网适配器 以太网:  # 物理机(网卡1)

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::4072:61e2:bbdb:8b17%17
   IPv4 地址 . . . . . . . . . . . . : 192.168.0.100
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.0.1  (#路由器关口,记录路由器的信息)

以太网适配器 以太网 2:   # 物理机(网卡2)

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 VMware Network Adapter VMnet1:   # 仅主机模式使用的 VMnet1 网卡

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::e4c2:98c0:4388:d7fa%16
   IPv4 地址 . . . . . . . . . . . . : 192.168.137.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :192?

以太网适配器 VMware Network Adapter VMnet8: # NAT模式使用的 VMnet8 网卡

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::5036:31dd:4877:9dab%13
   IPv4 地址 . . . . . . . . . . . . : 10.0.0.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 10?
   
-----------------------------------------------------------

公网ip :115.61.250.173
路由器 :网关(),dhcp 子网(192.168.0.x~192.168.0.x)
网卡 192.168.0.1
物理机ip:
虚拟机 :

桥接   :vmnet0  dhcp  ip可能冲突( 虚拟机的地位跟物理机 相对与路由器 的地位相同)
IP 192.168.0.x  (路由器设置的)
网关 192.168.0.1 (默认)


仅主机  :vmnet1  (#同一个区域网下(路由器)所有的仅主机模式可以通信,但是不能连接外网)(没有网络打的cs)
IP 192.168.0.x  (路由器设置的)
网关 192.168.0.1  (默认的)

vmnet8 :
# 10.0.0 网络位,x 是主机位。
#子网:路由器或者虚拟网络编辑器下的网络,
#网段:网络位相同,主机位不同的IP 属于同一个网段。
#网关(关口)
连接同一块网卡( 路由器或者虚拟网络编辑器 )的虚拟机或者物理机,属于同一个子网,#他们的网段一样
子网 10.0.0.1~10.0.0.255 网卡10.0.0.1 网关10.0.0.2 广播地址10.0.0.255 ,可用的IP地址范围是 10.0.0.3~254
公网IP------动态网络地址转换------路由器DHCP----物理机-----(VM8)动态网络地址转换--虚拟机
公网IP就是家门口那个IP,是移动联通电信给的

虚拟网络编辑器:子网(网段)
子网 10.0.0.x~10.0.0.255
网卡 10.0.0.1
网关 10.0.0.2 (自己在虚拟网络适配器设置的)


子网掩码 255.255.255.0 
DNS 233.5.5.5 223.6.6.6(阿里云给的 www.alidns.com)域名解析(域名解析成ip),/etc/resolv.conf  -人家的
可以自己在/etc/hosts里自己一个一个加进去-----自己的

10.0.0.255广播地址

----------------------------------------------------------

# 关机拍快照占用磁盘空间小,恢复快照是关机状态
🔒 是关机状态的快照 ,三角是开机状态的快照
ping baidu.com (可以看到域名解析)
#ip访问网站 (少用,所以需要DNS)(网站可以设置IP跳转成域名)
www.alidns.com (DNS 223.5.5.5  223.6.6.6)
DNS 的作用就是域名解析(把所有的域名都解析成计算机认识的IP),没有DNS就上不了网,可以自己在/etc/hosts里面手动写入域名解析,也可以使用阿里云的域名解析,就是DNS=

TYPE=Ethernet   网络模式因特网
BOOTPROTO=none  不自动获取IP
DEVICE=eth0     网卡名字
ONBOOT=yes      开机自启动
IPADDR=10.0.0.8 
PREFIX=24          子网掩码
GATEWAY=10.0.0.2   网关 (看虚拟机网络适配器的指定)
DNS1=223.5.5.5     域名解析


# 虚拟机关机的情况下才能克隆
- 完整克隆

完全崭新的一台虚拟机,和母体没有任何关系(母体被删除,照样可以使用,占用磁盘空间大)

- 链接克隆

基于母体的克隆,如果母体被删除,无法使用(占磁盘空间少),
# 所以才要保存好母体机,模板机(母体机)-10.0.0.200

# GNU (GNU is not Unix 的缩写),是自由软件基金会下的一个项目
我们用的Linux系统其实全称叫GNU/Linux
GNU项目+Linux内核=Linux系统

shell :shell有很多种,比如bash shell ,PHP,   PHP不是世界上最好的语言
bash(shell) :人与计算机交互的窗口(可以认为是一门语言)
#!/bin/bash :指定命令解释器(一个虚拟机有多个命令解释器??)

ctrl + u
ctrl + y
esc + .

history -c 

alias wk="vim /etc/sysconfig/network-scrips/ifcfg-eth0"
alias shit="echo `yon don't not speaked shit`"

ps -ef | /usr/bin/grep nginx  不高亮
[root@oldboy ~]# ps -ef | /usr/bin/grep nginx --color=auto


内部命令:PATH 下的 help man
外部命令:程序(nginx) man

[root@oldboy ~]# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@oldboy ~]# export PATH=/app/nginx/sbin/nginx:/usr/bin/:/usr/sbin/:/usr/local/bin/:/usr/local/sbin/:/root/bin

[root@oldboy ~]# hash   缓存(哈希表 是一种算法)
hits	command
   2	/usr/bin/cat


命令执行的流程
当我们执行一个命令, 整个命令执行流程如下:
1.判断命令是否通过绝对路径执行
2.判断命令是否存在别名
3.判断用户输入的是内部命令还是外部命令
4.内部命令直接执行, 外部命令检测是否存在缓存
5.检测PATH路径, 有执行, 无报错

路径--别名--内外部命令--环境变量--外部命令检测缓存

[root@oldboy ~]# which grep      判断执行顺序问题
alias grep='grep --color=auto'
	/usr/bin/grep


cd .
cd ..
cd /
cd ./
cd ../
cd -
cd ~

[root@oldboy ~]# ll 
total 60
drwxr-xr-x  2 root root    20 Apr 26 08:28 1
文件类型 权限(.)硬链接数 属主属组 修改时间 文件名

cat -A a.txt
-T
-E
head -5
tail -5
tail -f =tailf=tail -F
tail -f /var/log/messages
more  虚拟机里面才会用,慢慢加载,不会一下子使用较多的内存
less  虚拟机里面才会用,慢慢加载,不会一下子使用较多的内存

grep -n xx 1.txt
-n  打印行号
-v # 排除取反,过滤系统文件的时候会用到
-i 不区分大小写 #过滤系统文件的时候会用到
-w 指定边界 grep -w 'syy'=grep '\bsyy\b'(使用),默认是包含就行
-o 只显示过滤到的内容
-A1
-B1
-C1
-E  支持扩展正则,查找多个关键字 [A-z] [a-Z]
-rl 过滤文件内容 显示所在文件的文件名

[root@oldboy ~]# grep -w 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboy ~]# grep -w '\broot\b' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

locate:
locate 
update 手动更新数据库
which + 命令
type
whereis

sort 对行进行排序
默认以第一行的首字母或者首数字排序 ( 50,400 )
-t 指定分隔符
-k 指定列
-n 以数字的大小进行排序
-r 倒序

uniq + 文件
-c 去重,显示重复次数 #空行也编号
-d 去重,只显示重复的行
-u 去重,只显示不重复的行 #空行不重复的话也会显示出来

cut 
必须要指定分隔符,指定列
-d 指定分隔符
-f 指定列
-c 截取字符

wc [] 文件
-l  :统计一个文件的行数 
-w  :统计一个文件的单词数
-c  :统计一个文件的字符数

[root@oldboy ~]# wc passwd
 22  30 849 passwd
[root@oldboy ~]# wc passwd -l
22 passwd
[root@oldboy ~]# wc passwd -w
30 passwd
[root@oldboy ~]# wc passwd -c
849 passwd

[root@oldboy /]# ll|wc -l
31


-----------------------------------------------

[root@oldboy ~]# ll 
total 60
drwxr-xr-x  2 root root    20 Apr 26 08:28 1
文件类型 权限(.)硬链接数 属主属组 修改时间 文件名

chmod :
-R
1.数字
chmod 777 1.txt
2.字母
u=
g=
o=
a= 
3.ugo
u+
g+
o+
a+ 

chown :
-R
root.root   属主属组
root.	    属主属组
root .	    属主
.root		属组
root:root	属主属组

硬链接:ln ,inode相同,不可以跨越磁盘分区,只能对文件,删除  ,文件
软连接:ln -s ,inode不同,可以跨越磁盘分区,对文件或目录,删除 ,文件,(可以cd进去的文件)

cp 复制后indode号改变(文件或目录),硬链接indode不变

系统文件inode号一样,那么他们就是硬链接(硬链接除了inode一样 跟cp拷贝一样,结果是文件)

一个目录下的 所有 子目录 :N-2

--------------------------------------- <fond color=red>w</fond>

vim
gg
ngg
G

yy
nyy
p
P
x
X

dd
ndd
p
P
dgg
dG
cc
C

u		#撤销上面一步步的操作,可以撤销整行内容
ctrl+r   #撤销撤回
可视块:
#可以用来,添加注释,以列删除
普通模式--移动光标--ctrl+v---移动光标---shift+i----#---ESC
可视行:
#可以用来 一次删除多行
普通模式--移动光标--shift+v---移动光标---删除
普通模式--移动光标--v---移动光标---删除

:%s###g
:%s///g  (转义,带/的需要转义,所有尽量使用#号分割)

:g#1,$#d
:g#^$#d     只能删除由空格或回车组成的空行

:g#^[[:space:]]*$#d   删除所有空行(空格,回车,TAB,特殊字符)
:g#^\s*$#d

/b  过滤之后高亮显示
/:
-------------------------------------
创建用户名不能以数字开头,不能有中文

/etc/passwd

/etc/shadow

/etc/group

/etc/gshadow


/etc/login.defs

/etc/default/adduser

grep -i '^[a-z]' /etc/login.defs   #过滤系统文件通常要加 -i
egrep -v '^#|^$' /etc/login.defs  
# '|' 引号(单双)里面的管道符表示或者的意思,属于扩展正则

sed -nr '/^[A-Z]/' /etc/login.defs

umask
系统用的umask=0077
命令行的umask=0022

useradd:
-u
-g
-G  指定自己(删除)
-d  请随意
-M
-s
-r   创建一个uid范围201~999的系统运行服务的用户
-c
-p  创建用户的时候给一个密码(要使用加密后的密码,也就是/etc/shadow里的密码登陆)

usermod:
-u
-g
-a
-G
-md
-s

-c
-L
-U

w who whoami uptime free -m

awk '{print $1}' 括号里面只能有 自己的 不带引号的内容
seq -w 10|awk '{print "useradd old"$1 " && " "echo $RANDOM|md5sum|cut -c 1-10|tee -a a.txt|passwd --stdin " "old"$1}'|bash


[root@oldboy /opt]# echo 1 : old1 >oo
[root@oldboy /opt]# cat oo
1 : old1

[root@oldboy /opt]# a=`echo $RANDOM|md5sum|cut -c 1-10 ` | echo $a  无意义
e7418af622
[root@oldboy /opt]# a=`echo $RANDOM|md5sum|cut -c 1-10 ` | echo $a
e7418af622

[root@oldboy /opt]# a=`echo $RANDOM|md5sum|cut -c 1-10 ` && echo $a  密码不一样
cccbb7a356
[root@oldboy /opt]# a=`echo $RANDOM|md5sum|cut -c 1-10 ` && echo $a
e7418af622


[root@oldboy /opt]# useradd old01 && a=`echo $RANDOM|md5sum|cut -c 1-10 ` && echo a|passwd --stdin old01 && echo $a : old01 >>a.txt
Changing password for user old01.
passwd: all authentication tokens updated successfully.  # 命令行测试成功
seq -w 10|awk '{print "useradd old"$1 " && " "a=`echo $RANDOM|md5sum|cut -c 1-10`"  " && " "echo a|passwd --stdin old"$1 " && " "echo $a : old01 >>a.txt"}'|bash

[root@oldboy /opt]# seq -w 10 |awk '{print "userdel -r old"$1}' |bash

# 把一个过程分开来执行,虽然可能麻烦一点,但是往往可以得到自己想要的那一部分

sudo
1.加入自由文件
2.加入自由组
su - root -c
bash
pstree

显示日期和时间 - date
显示日历 - cal
使用计算器 - bc
posted @ 2020-05-01 17:29  看萝卜在飘  阅读(181)  评论(0编辑  收藏  举报