linux系统基础

190 阅读4分钟

基础知识

1、文件系统

文件系统概念

概念
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的 方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进 行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的 存取,安全控制,日志,压缩,加密等
类型
1、linux常见类型:
ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分 区
ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
ext4:是 ext 文件系统的最新版。使用巨型文件 (16TB)、最大1EB的文件系统,EXT4是Linux系统下的日志文件系统
xfs:SGI,支持最大8EB的文件系统,根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
swap   iso9660 光盘   btrfs(Oracle)   reiserfs
2、windows常见类型
FAT32:最多只能支持16TB的文件系统和4GB的文件
NTFS:最多只能支持16EB的文件系统和16EB的文件
exFAT:
3、UNIX
FFS(fast)   UFS(unix)   JFS2
4、网络文件系统
NFS   CIFS
5、集群文件系统
fastdfs   ceph   moosefs  mogilefs   glusterfs   lustre

文件系统管理工具:mkfs.ext4 mkfs.xfs mkfs.vfat

ls  简单查看
-l   详细信息
-h   具体大小
-a   全部文件

2、权限管理

UGO权限

文件权限设置: 可以赋于某个用户或组  能够以何种方式  访问某个文件
属主   属组  其它
 u     g     o
rwx   rwx   rwx	
r  -  可读	(4)
w  -  可写	(2)
x  -  可执行	(1)

更改权限  chmod  注意:修改文件的权限时,要保证有目录的x权限。
更改属主、属组
要求修改a.txt文件的属主为rng 属组为IT ?
# chown rng:IT a.txt

ACL权限

设置单独用户和组对于单个文件的具体rwx基础权限
# setfacl
选项
-m		//添加acl权限
-x		//删除acl权限
-b		//删除所有的acl权限

案例
1、给tom用户设置对a.txt有rw的权限
# setfacl -m u:tom:rw a.txt

2、给IT组设置对a.txt有rx权限
# setfacl -m g:IT:rx a.txt

3、删除tom用户给a.txt 设置的acl权限
# setfacl -x u:tom a.txt

4、删除a.txt文件上的所有acl权限
# setfacl -b a.txt

# getfacl /zabbix/         //查看文件或者目录的acl权限
getfacl: Removing leading '/' from absolute path names
# file: zabbix/         #文件名称
# owner: zabbix			#属主
# group: nagcmd			#属组
user::rwx				#属主权限
user:tomcat:r-x			#tomcat的acl权限
group::r-x				#属组权限
mask::r-x				
other::---				#其他人权限


问题:不小心操作  chmod  a-x  /usr/bin/chmod  ?  怎么恢复 ?
方法1:
 # setfacl -m u:root:rwx /usr/bin/chmod 

 # chmod a+x /usr/bin/chmod 

方法2:
 # cp /usr/bin/cat  /usr/bin/cat.bak
 # cp /usr/bin/chmod /usr/bin/cat.bak      //按y进行覆盖
 # cat.bak a+x /usr/bin/chmod

SUID SGID skity

SUID
给可执行文件设置suid权限,“类似给单个命令进行提权”

# chmod u+s
# chmod 4000

案例:
给whoami命令进行单独提权
# chmod u+s /usr/bin/whoami
# whoami   //显示当然登入的用户是root
# su - zabbix
$ whoami
root       //由于whoami被root用户赋予suid权限,所以相当于现在执行whoami命令还是root本身

SGID
给目录设置,任何用户在该目录下创建文件,会继承其属组
【一定要有x权限存在】
# chmod g+s  目录
# chmod 2000  目录

案例:
配置一个目录,该目录任何用户都可以进行创建文件,但是自动修改文件的属组为IT
# mkdir /test
# groupadd IT
# chown :IT /test
# chmod g+s /test

SKITY
给目录设置,任何用户都不能随意删除其他用户创建的文件
【一定要有x权限存在】

案例
创建目录,并按以下要求设置: /data 目录属于 IT 组 , 目录可以被 IT 的组成员读取、写入和访问,其他任何用户不具备这些权
限(root 用户除外) 在/data 目录中创建的文件的所属组自动变成 IT 组
# mkdir /data
# chmod g=rwx /data
# chmod o=	/data
# chown :IT /data
# chmod g+s /data

特殊权限 chattr

对root用户生效
# chattr +a file100     #只能给文件添加内容,但是不能删除内容  //日志文件
# chattr +i file200     #文件不能更改,不能删除,不能移动

# lsattr file300       #查看特殊权限

3、进程管理

ps -ef
ps -aux
netstat -tnlp


nice值 (-19~20)
nice值越低,抢占资源能力越高
相关命令
    nice  -- 运行时直接设置nice值
        用法: nice -n 数字 command
        
    renice  -- 对于已经运行的,调整nice值
        用法: renice 数字 PID

bg 任务编号  : 指定任务在后台运行
fg 任务编号   : 将后台运行的命令变成前台运行
# jobs     //查看后台进程运行状态
            [2]+  Stopped                 firefox 192.168.1.250
        # bg 2     //激活后台进程
            [2]+ firefox 192.168.1.250 &
        # jobs
            [2]+  Running                 firefox 192.168.1.250 &
        # fg 2
                                          firefox 192.168.1.250
                                          
A. kill案例1: 杀死vim进程
[root@system_manager ~]# ps aux | grep vim
root       5594  0.1  0.2 151492  5120 pts/0    S+   11:37   0:00 vim /root/b.txt
root       5609  0.0  0.0 112720   984 pts/1    S+   11:37   0:00 grep --color=auto vim
[root@system_manager ~]# kill 5594
[root@system_manager ~]# ps aux | grep vim
root       5657  0.0  0.0 112720   984 pts/1    S+   11:38   0:00 grep --color=auto vim

B. kill案例2: 杀死远程sshd连接
[root@system_manager ~]# ps aux | grep sshd
root       1162  0.0  0.2 112796  4296 ?        Ss   10:59   0:00 /usr/sbin/sshd -D
root       3665  0.0  0.2 160884  5716 ?        Ss   11:01   0:00 sshd: root@pts/1
root       5764  0.0  0.0 112708   972 pts/0    S+   11:40   0:00 grep --color=auto sshd
[root@system_manager ~]# kill -9 1162
[root@system_manager ~]# ps aux | grep sshd
root       3665  0.0  0.2 160884  5716 ?        Ss   11:01   0:00 sshd: root@pts/1
root       5795  0.0  0.0 112708   972 pts/0    S+   11:40   0:00 grep --color=auto sshd
[root@system_manager ~]# kill -9 3665

c.killall案例:
[root@system_manager ~]# ps aux | grep vim
root       6000  0.0  0.2 151568  5232 pts/0    S+   11:43   0:00 vim file1.txt
root       6052  0.0  0.2 151564  5224 pts/1    S+   11:44   0:00 vim file2.txt
root       6281  0.0  0.0 112720   980 pts/3    S+   11:46   0:00 grep --color=auto vim
[root@system_manager ~]# killall vim
[root@system_manager ~]# ps aux | grep vim
root       6313  0.0  0.0 112720   980 pts/3    S+   11:46   0:00 grep --color=auto vim


d.pkill案例:
[root@system_manager ~]# w
 17:29:06 up 21 min,  4 users,  load average: 0.00, 0.03, 0.10
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       :0               107月18 ?xdm?  28.49s  0.26s /usr/libexec/gnome-session-binary --sessio
root     pts/0    10.18.41.54      17:18    1:54   0.04s  0.04s -bash
root     pts/1    10.18.41.54      17:10    1:46   0.06s  0.06s -bash
root     pts/2    10.18.41.54      17:11    2.00s  0.12s  0.01s w
[root@system_manager ~]# pkill -9 -t pts/0
[root@system_manager ~]# w
 17:29:35 up 22 min,  3 users,  load average: 0.00, 0.03, 0.10
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       :0               107月18 ?xdm?  28.43s  0.26s /usr/libexec/gnome-session-binary --sessio
root     pts/1    10.18.41.54      17:10    2:15   0.06s  0.06s -bash
root     pts/2    10.18.41.54      17:11    7.00s  0.13s  0.02s w

4、网络设置

网络配置

ifconfig:
1、查看信息
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.105.225  netmask 255.255.255.0  broadcast 192.168.105.255
        inet6 fe80::20c:29ff:fe64:6f0e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:64:6f:0e  txqueuelen 1000  (Ethernet)
        RX packets 534821  bytes 684553169 (652.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 227482  bytes 183585898 (175.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 6  bytes 300 (300.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 300 (300.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
"ens33"中的"en"是""EtherNet”"的缩写,表示网卡类型为以太网,"s"表示热插拔插槽上的设备hot-plugslot 数字“33”表示插槽编号。        
inet 192.168.105.225                              ip地址
inet6 fe80::20c:29ff:fe64:6f0e                    ipv6
netmask 255.255.255.0                             子网掩码
broadcast 192.168.105.255                         广播地址
ether 00:0c:29:64:6f:0e                           mac地址
RX packets 534821  bytes 684553169(652.8MiB)      接受数据包个数、大小统计信息
RX errors 0  dropped 0  overruns 0  frame 0       异常接受包的个数、如丢包量、错误等
TX packets 227482  bytes 183585898 (175.0 MiB)    发送数据包个数、大小统计信息
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0      发送包的个数、如丢包量、错误等

# ifconfig   
# ifconfig -a
# ifconfig ens33
2、设置网络接口的ip地址,子网掩码
ifconfig ens33 ip地址 netmask 子网掩码
ifconfig ens33 ip地址 /子网掩码长度
3、设置虚拟网络接口
ifconfig ens33:1 ip地址
4、禁用或者重新激活网卡
# ifconfig ens33 up/down  开启/关闭网卡
# ifup 激活网卡
# ifdown 彻底禁用网卡,临时网卡地址不存在
hostname:
1、修改主机名
临时生效
# hostname 主机名
永久修改主机名称
# hostnamectl set-hostname 主机名# vim /etc/hostname
【主机名】
2、查看ip
# hostname -I
route:
Linux中的路由表决定着本机向其它主机、其它网络发送数据的去向,是排除网络故障的重要信息

route
1、查看路由表信息
# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
192.168.105.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
# route -n
# ip route
# ip route show
当目标网段为"default"时,表示此行是默认网关记录:当下一跳为""gateway"时,表示目标网段是与本机直接相连的。但是,直接执行"route"命令无法直接看出默认网关地址
destination 对应目标网段的地址
gateway 对应下一跳路由器地址
iface 对应发送数据的网络接口
2、增加/删除到指定网段的路由记录
# route add -net 192.168.43.0/24 gw 192.168.105.1
# route del -net 192.168.43.0/24

# route add default gw 192.168.105.1
# route del default (gw ip地址)  存在多个default地址时使用
netstat
查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具
-t:查看TCP (Transmission Control Protocol,传输控制协议)相关的信息
-n:以数字的形式显示相关的主机地址、端口等信息 
-l:显示处于监听Listenin状态的网络连接及端口信息
-p:显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r:显示路由表信息.
-a:显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-u:显示 UDP (User Datagram Protocol,用户数据报协议〉协议相关的信息
# netstat -tnlp
# netstat -anpt

测试网络连接

ping 
-c:指定次数
-i:每隔多长时间发送数据包
Destination Host Unreachable:表示目的主机不可达,可能目标地址不存在或者主机已经关闭
Metwork is unreachable:表示没有可用的路由记录(如默认网关),无法达到日标主机所在的网络
Request timeout:目标主机有严格的防火墙限制时,或者当网络中存在影响通信过程稳定性的因素(如网卡故障、病毒或网络攻击等)
nslookup  域名解析    bind-utils(包名)
# nslookup www.baidu.com
# vim /etc/resolv.conf    DNS的配置文件

image-20230802135736231.png

注意:最多只能写三行
当然也可以
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# systemctl restart network

image-20230802135944259.png

dig  解析详细过程DNS信息收集    bind-utils(包名)
# dig www.baidu.com

本地主机映射文件 /etc/hosts
当客户端访问域名时,首先搜索本地dns解析(即/etc/hosts下的映射关系,找不到后再从DNS服务器中寻找)
因此许多项目为了方便记忆,会在项目中用自定义的域名来代替开发IP

静态ip

防火墙:                                             
查看状态: # systemctl status firewalld
立即关闭: # systemctl stop firewalld 
开机不启动: # systemctl disable firewalld
SELINUX: 
    查看状态: # getenforce      #enforcing:拦截  permissive:提醒不拦截 disabled:禁用
    立即关闭: # setenforce 0    #将状态改为permissive
    开机不启动: # vim /etc/selinux/config     # SELINUX=disabled
常见网络接口
 enp3s0   以太网接口    eth0,eth1    
 wlan0    无线接口
 lo       本地回环接口    127.0.0.1   localhost
 virbr0   桥接接口  
 vmnet1  vmware提供的
 vmnet8  vmware提供的
修改网络信息
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
ifconfig ens33 192.168.10.100临时配置ip,重启失效。

5、文件管理

基础知识

d0c50-linux2bfile2bsystem2bhierarchy.jpg

bin     存放命令  -  普通用户的命令
boot	linux启动内核文件
dev		存放设备
etc		存放系统配置文件
home	存放普通用户的家目录
root	超级管理员root的家
sbin	存放命令  -   管理员用户的命令
tmp		临时目录
var     动态信息,内存,进程

vim编辑器尾行模式:
:wq		//保存退出
:q      //不保存退出
加上  ! 代表强制

1、替换修改内容
:1 s/root/ROOT/g           //替换第一行里面所有的root为 ROOT
:1,5 s/root/ROOT/			//替换1到5行里面出来的第一个root为ROOT
:% s/root/ROOT/g			//替换所有行里面出现所有root为ROOT
(匹配的内容支持正则匹配)
:% s/[0-9]//g				//删除所有行里面的数字,替换为空=删除

2、功能
: set number			//添加行号
: set list				//列出所有字符

vim编辑器可视块模式:
批量添加:
ctrl + v   ->   方向键选中块  -> 大写的ishift + i-> 输入添加的内容  -> Esc Esc

高级命令

图片.png

管道
上图为管道图示,将上一个命令的输出作为下一个命令的输入
# find / -name mysql | xagrs -I {} rm -rf {}    删除mysql
# cat /etc/passwd | head -5                     查看前五行
# cat /etc/passwd | tail -5                     查看后五行
文件查找find
-name	//文件名称,支持通配符
-type	//文件类型 f 普通文件  b 设备 d 目录 l 链接文
-size 	//文件大小  【+-】【KMG】
-group  //组名
-user	//用户名
-empty	//空文件或者目录
-mtime  //根据n天前修改内容的文件
grep过滤
功能:打印出匹配到"关键字"的行
写法:grep [选项] 关键字  文件

模式:
root 	//含有root的行
^root	//以root开头的行
root$	//以root结尾的行
^$		//空行
选项:
-i		//忽略大小写
-v		//取反
-n		//带行号打印
-q		//不输出
-c		//统计匹配到的行的数量
wc统计
功能:统计行数,字符数,单词数
语法: wc [选项] 文件
选项:
	-l		//统计行数
	-c		//统计字节数
sort排序
功能: 将文件中的行进行排序后输出
语法: sort [选项] 文件
选项:
	-n		//按照数值进行排序
	-r		//逆序排序
	-t		//指定字段分隔符
	-k		//指定按照第几列排序
uniq去重
功能: 过滤掉连续重复的行
语法: uniq [选项] 文件
选项
	-c 		//统计相同的行的行数,行数写在最前面
	-i		//不区分大小写
	-u		//只打印不重复的行
cut处理列
功能:打印列
语法:cut 选项 文件
选项:
	-d		//指定分隔符
	-f		//指定需要打印的字段(列)
tr处理字符
功能: 从标准输入中去替换、缩减或删除字符,并将结果写到标准输出
语法:tr [选项] set1 [set2]
选项:
	-d	//删除set1中所有的字符
	-s  //如果只有set1,将set1中的连续字符缩减为1个;如果有set1和set2则将set1中的字符缩减后替换成set2
	-t	//将set1中的字符对应替换成set2中的字符(set1中的字符不要重复)
tee 
功能:将从标准输入中读取到的内容同时写入到标准输出和文件中
语法:tee [选项]  文件
选项:
	-a   //追加到文件中,默认是覆盖
xargs 传参
# echo "tom jerry"
tom jerry
# echo "tom jerry" | xargs -n1 id
uid=8889(tom) gid=8892(tom) 组=8892(tom),8890(WEB)
uid=1001(jerry) gid=8890(WEB) 组=8890(WEB),10(wheel)

参数以换行隔开
# cat a.txt
123.txt
123.html
123.py

# cat a.txt | xargs -I {} touch {}
# ls
123.html  123.py  123.txt
打包压缩  zip unzip
对于文件夹最好打包上传,文件数量过多时传输会较慢。
# zip -r tmp.zip /tmp   zip压缩目录时加上-r
# unzip tmp.zip
tar
# tar caf tmp.zip /tmp
# tar xf tmp.zip -C /usr/local/

系统安装和配置

1、安装

CentOS-7-x86_64-Minimal-2009.iso
ubuntu-20.04.6-live-server-amd64.iso
openEuler-20.03-LTS-SP1-x86_64-dvd.iso
openKylin-1.0-x86_64.iso
在虚拟机上安装即可

2、分区

分区类型

MBR:
最大支持2TB以内的硬盘
主分区: 编号1-4,与扩展分区的和不能超过4个,可直接格式化使用	
扩展分区:编号1-4,最多只能有一个,不能直接格式化使用
逻辑分区:在扩展分区上划分,编号从5开始, 可格式化使用
分区不是无限分的,对于串口设备,最多15个分区,1-4编号是主分区或者是扩展分区,5-15编号是逻辑分区(MSDOS分区表格式)
GPT   最多可分128个分区,没有主分区扩展分区之说

因此一般来说,有/分区,/boot分区,swap分区,home分区 四个分区,如下图
[root@citycloud dev]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  500G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
├─sda2            8:2    0   99G  0 part 
│ ├─centos-root 253:0    0  450G  0 lvm  /
│ ├─centos-swap 253:1    0  7.9G  0 lvm  [SWAP]
│ └─centos-home 253:2    0 41.1G  0 lvm  /home
└─sda3            8:3    0  400G  0 part 
  └─centos-root 253:0    0  450G  0 lvm  /
sr0              11:0    1 1024M  0 rom  

分区步骤

分区-使用过程:
1.分区              fdisk 设备名
2.通知内核重读分区表  partprobe
3.格式化             mkfs.xfs
4.挂载使用           mount /dev/sda1 /boot

swap分区制作

用文件制作
# dd if=/dev/zero  of=/tmp/swap.txt   bs=1M  count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.92631 s, 547 MB/s
# mkswap /tmp/swap.txt
# swapon /tmp/swap.txt
写入开机自启
# vim /etc/fstab
/tmp/swap.txt swap         swap    defaults        0 0

卸载swap
# swapoff /tmp/swap.txt
# rm -rf /tmp/swap.txt
删除/etc/fstab制作的swap行

# swapoff -a  关闭所有swap

LVM

一、LVM的创建过程
    1)添加硬盘或者创建分区,通知内核
    2)创建物理卷 PV (pvcreate) 
    3)创建卷组 VG    (vgcreate)
    4)创建逻辑卷  LV (lvcreate)
    5)创建文件系统    (mkfs.xfs)
    6)挂载使用            (mount autofs /etc/fstab)

lvm扩容
pvcreate /dev/sdb2
vgextend centos /dev/sdb2
lvextnd -L 原始大小+扩容大小 /dev/centos/root  
注意:xfs不支持缩容

3、文件系统格式化

mkfs即可

4、网络设置

做桥接和NAT地址转换均可,能保证在局域网内都能访问

用户和权限管理

1、创建用户、组

存放用户和组的文件
/etc/passwd			//存放用户信息
/etc/group			//存放组信息

创建用户
# useradd 用户名
选项
-u		//指定UID
-d		//指定家目录
-M		//不创建家目录
-g		//指定创建的基本组ID或者组名称
-G		//指定创建用户的附加组
-s		//指定用户登入的shell, 默认是/bin/bash 允许登入,  /sbin/nologin  不允许登入

创建组
# groupadd 组名
---选项
-g		//指定UID

删除用户
# userdel 用户名
选项
-r 		//删除干净,邮件、家目录等等

删除组
# groupdel 组名
【注意:如果组作为用户的基本组,不可被删除】

2、组成员管理

# usermod  选项  用户名
选项
-g		//更换基本组
-G		//更换附加组
-aG		//添加新的附加组

# gpasswd   选项	组名
选项
-a		//给组添加用户   ~  usermod -aG
-d		//从组里删除用户
-M		//给组批量去添加用户

3、权限和访问控制

# passwd 修改用户密码
给普通用户提权
方法1、把普通用户添加到wheel组
# usermod -aG wheel  普通用户
方法2、修改配置文件  /etc/sudoers 
# vim /etc/sudoers  (添加以下内容)
普通用户     ALL=(ALL)       ALL

软件包管理

我们在实际使用过程中要学会线上安装和离线安装
线上用yum,线下下载rpm包(如mysql安装)、tar.gz

1、yum使用

# cd /etc/yum.repos.d/
想安装啥软件,添加repo仓库即可,aliyun仓库源能满足大部分需求,小部分的需要我们自己寻找。
# yum makecache     做缓存
# yum clean all     清除缓存
# yum search 包名    找包
# yum repolist      校验repo仓库有无问题
# yum remove 包名 -y 删除包
# rpm -qa | grep 包名 | xargs -I {} rpm -e {} --nodeps   删除包
 
打开Yum缓存功能:安装完软件之后,软件不会被删除(默认安装完之后,不会保留安装包)
    # vim /etc/yum.conf  修改下面参数的值为1,软件会被保存到cachedir指定的目录下
    keepcache=1

自己制作yum源
	#mkdir /myyum
	把想用yum安装的软件包拷贝到目录下
	#createrepo /myyum         //此目录就可以作为yum源了。

2、rpm 使用

安装
# rpm -ivh 包全名		//安装软件包
# rpm -Uvh 包全名		//升级安装包,如果本来没有安装,则安装

卸载
# rpm -e 包名
	--nodeps			//只卸载当前软件,不检查依赖关系
	
rpm包无法自动解决依赖性问题,需要手动解决,非常麻烦..

Shell脚本编写与自动化

1、shell基础

shell是一种命令解释器,shell也是一种编程语言,shell,python,perl三种
# cat /etc/shells

图片.png

算术运算
        \+  -  *  /  %(取余,取模)   幂(**/^)
    1). echo $[] 或 echo $(())     只能计算整数   
    2). bc                                 可计算小数   ; 例: # echo 2.5+2.5 | bc  
    3). expr 10 + $num         运算符两边要有空格,通常用来判断参数是否整数
    4). let                                 通常作变量赋值

调试shell脚本
# sh -x  脚本路径

2、shell变量

1.本地变量
本地变量也叫自定义变量,用户根据自己的需求自己去定义的变量
作用范围(作用域):在整个shell脚本中生效. 如果是在命令行定义的变量,作用范围是当前shell
定义变量:变量名字=变量值   //注意:等号两边一定不能有空格
2.环境变量
    作用范围:当前shell及其子shell
常用环境变量:
 USER      /当前登录的用户
 UID       /当前登录的用户uid
 HOME      /当前登录的用户家目录
 HOSTNAME  /当前的主机名 
 PWD       /当前所在的目录
 PS1       /
3.位置变量
$0 —— 表示当前运行的脚本或者命令本身
$1~${10} —— 表示脚本的位置参数,$1就是第一个参数,依此类推   变量传参
$# —— 表示参数个数
$@$* —— 表示参数的列表
"$@" —— 将每一个参数看成独立的字符串打印,(纵向打印)
"$*" —— 将所有参数看成一个字符串,(横向打印)
4.预定义变量
$$ ——查看当前shell的pid   
$? —— 上一条命令执行状态的返回值
执行状态返回值(0-255),分两类
0:正确执行
1-255:错误执行