Linux Shell 笔记

Linux Shell

Linux文件系统基础

  1. Linux文件系统结构

    • /dev 存放设备驱动程序(如磁盘、USB等。将硬件设备文件化)
    • /etc 存放各种配置文件(服务器、网络设备等)
      • group 存储用户组的相关信息
      • profile 创建全局变量,一般存放的是环境变量
    • /home 普通用户主目录
    • /proc 存放Linux系统所有内核参数以及系统的配置信息(如tcp内核参数等)
      • cpuinfo 存储CPU相关信息
      • meminfo 存储物理内存和交换内存的使用信息
      • devices 当前运行的核心设备驱动列表
      • dma 当前使用的DMA通道
      • loadavg 显示平均负载,指示系统当前工作量
    • /mnt 用于挂载系统之外的文件系统(如光盘、SSD等)
      • 访问/dev只能获取设备的一些信息,要访问设备内容还需要进行挂载
    • /usr 用户目录,存放用户文件
      • /bin 用户可以直接执行的所有命令
      • /sbin 需要root权限才可以执行的命令
    • /var 运行时要改变的数据
  2. 文件类型

    1. 普通文件(-):文本文件、二进制文件等。
    2. 目录文件(d):文件夹
    3. 设备文件( c ):表示Linux系统中的所有硬件设备(b 表示块设备文件,如硬盘;c 表示字符设备文件,如键盘和鼠标)
    4. 链接文件( l ):
      • **硬链接:**相当于创建一个镜像副本,并保持同步的更新
      • 软链接(符号链接):引用的是文件的路径,类似于Windows系统中的快捷方式
  3. 文件属性和权限

    • 所有者权限 所属组权限 其他人权限 (rwx rwx rwx)
    • 根目录 /
    • 用户主目录 /home/ 一般用~表示
    • 当前目录 ./
    • 上级目录 …/
  4. 用户和用户组管理

    Linux是一个多用户多任务的分时操作系统,任何一个想要使用系统资源的人都需要有一个账号。

    • useradd(添加用户)
    • userdel(删除用户)
    • usermod(修改用户)
    • passwd(设置密码)
    • su -[用户] (su 用户)
    • sudo 获得临时权限的提升
    • who
    • which

    实用性:通过添加账户,设置组id等。使得可以通过多个用户远程连接服务器,而不同的用户对服务器具有不同的权限。

  5. 文件和目录操作

    • touch
    • rm
      • -f 强制删除
      • -i 会有询问提示
    • cat(查看整个文件)
    • tail(查看文件末尾)/more(最多显示多少行)/less(至少显示多少行):查看文件
    • wc(统计文件的字符数,行数等信息)
    • pwd
    • mkdir
    • ls -s/-a/-i/-l(显示详细信息)
    • mv(移动或对文件重命名)/cp(复制文件)/rm(删除文件)
    • chmod(权限管理) / chown(改变文件所有者-改为指定的用户或组)
    • file(确定文件的类型)
    • find(在指定目录下查找文件)
    • grep(查找符合特定表达式的字符或字符串)
  6. 处理数据文件

    • 一般是按行处理文件的数据

    • sort(对文件数据进行排序—按行排序)

    • grep(按行匹配文本中的每一行数据)

      • -r 递归
      • -v 反取(输出不匹配的行)
      • -i 忽略大小写
      • -n 显示行号
      • -c 计数
      • -w 匹配一个词
    • 压缩数据(gzip)

      • gzip 文件 :压缩文件
      • gzip -dv 文件 :解压文件
      • gzip -c 待压缩文件 > 压缩名.gz :保留源文件压缩
    • 打包数据(tar命令)

      • https://cloud.tencent.com/developer/article/1454847
      • 打包是将若干个文件打包处理成一个文件,在打包的过程中不改变文件的大小
      • 由于压缩一次只能压缩一个文件,所以一般需要先进行一个打包
      • tar cvf *.tar 待打包文件 :对文件进行打包
      • tar zcvf *.tar.gz 待打包压缩文件 :压缩打包
      • tar ztvf *.tar.gz :查看文件(如被压缩,要加上-z)
      • tar tvf *.tar :查看文件
      • tar zxvf *.tar :解压文件

管理文件系统

日志文件系统

日志文件系统中开辟了一个特殊的区域,这个区域中记录的都是写入或者修改文件时的步骤。

分区类型及作用

https://blog.csdn.net/sinat_29581293/article/details/61193245

  • 主分区(总共最多只能分为4个)
  • 扩展分区(必须再划分成逻辑分区才能使用)
  • 逻辑分区(IDE Linux最多支持59)(SCSI Linux最多支持11)

fdisk还可以用于分区的创建;创建分区后可以进行文件系统的创建

https://blog.csdn.net/arenn/article/details/78866251

系统管理

网络管理

  • ping(用来判断网络连接是否畅通)
    • Ctrl+C退出
  • ifconfig(网络配置命令)
    • 主要显示的是网卡的信息:MAC地址;IP地址:广播地址:子网掩码;MTU等信息
    • https://www.yiibai.com/linux/ifconfig.html
    • ifconfig [网络设备] [参数]
  • route(显示和配置路由表信息)
    • 显示路由信息和配置路由信息
    • https://www.jianshu.com/p/414e3d6face3
  • netstat(显示网络相关信息,如网络连接、路由表、接口状态等)
    • https://www.runoob.com/linux/linux-comm-netstat.html
    • 用于显示网络状态,可以得知整个Linux网络系统的一个状态
    • netstat -t 显示TCP相关信息
    • netstat -u 显示UDP相关信息
    • netstat -r 显示路由表相关信息
    • netstat -l 显示套接字相关信息

磁盘管理

  • https://www.runoob.com/linux/linux-comm-netstat.html
  • https://www.jianshu.com/p/520b3a405014
  • 功能:显示磁盘信息,如柱面信息、分区数,还能对磁盘进行分区。
  • fdsik -l(查看所有磁盘的信息)

监测程序

  • ps(静态显示当前进程信息)
    • ps -e 和 ps -A 用与显示所有进程信息 https://developer.aliyun.com/article/710681
  • **top **实时监测程序
  • free查看内存使用情况
    • -m(以MB显示)
    • -k (以KB显示)
    • -b (以bytes显示)

监测磁盘空间

已经使用了多少空间,还有多少空间可以使用

  • 挂载外部存储 mount命令
    • 基本格式 mount [-t vfstype] [-o options] 设备名称 挂载目录
  • 卸载外部存储umount命令
    • umount [挂载目录|设备名称]
  • 显示剩余磁盘空间
    • 查看磁盘的使用信息,包括已用空间、可用空间、挂载点等信息
    • df (https://www.runoob.com/linux/linux-comm-df.html)
  • 计算磁盘使用量——du命令
    • 计算机文件大小;显示指定的目录或文件所占用的磁盘空间

Linux Shell

shell基本命令

  • echo的作用是将命令后面的字符串输入到显示器上,一般用来显示提示性的信息或是命令或语句的执行结果
  • #!/bin/bash 告知Shell终端执行当前Shell脚本需要用哪种Shell
  • $SHELL 获取当前系统默认的SHELL类型

变量与环境变量

  1. 变量
    • 变量名=变量值(等式两边不能有空格)
    • 整形:num=10
    • 浮点类型:float=1.2
    • 字符串:str=“10”
    • 显示:echo $num
  2. 变量的输入
    • read [option] 变量名
      • 读取一个数:read num
      • 同时为多个变量赋值: read -p “输入三个数值:” num1,num2,num3 #为多个变量赋值
      • 限定输入的时间: read -t4 num1 #限定等待时间为4秒
      • 限定输入字符个数: read -n4 num1 #限定为四个字符
      • 输入的内容不显示在终端: read -s passwd
  3. 变量的输出
    • echo -n “hello” 输出文字后不换行-n
    • echo -e 输出某些特殊字符
      • echo -e warning:\a 发出警告声,一般是蜂鸣声

shell中的特殊变量

  • $0 脚本名称
  • $1~$9 脚本执行时输入第一至第九个参数
  • $# 输入的参数个数
  • $? 脚本返回值
  • $* 参数的具体内容–看成一个字符串
  • $@ 参数的具体内容–看成一个个的对象
  • $$ 终端进程号

环境变量

https://www.jianshu.com/p/3faacdf979e5

env:显示全局环境变量

set:显示本地环境变量

  • /etc/profile 系统默认的shell配置文件
  • $HOME/.bash_profile 主目录下的profile文件
  • $HOME/.profile 用户自身使用的SHELL信息
环境变量的设定

通过export命令进行环境变量的配置

  • export MYHOME=/home/test
  • echo $MYHOME

使用source命令可以使得环境变量立即生效

环境变量的取消

unset命令

特殊符号

引号的使用

  • 单引号
    • 将单引号中的所有内容都作为普通字符处理(即使里面的符号时特殊符号)
  • 双引号
    • 用于字符串的输出。但是美元符号($),倒引号(`)和反斜线(\)仍作为特殊符号对待
  • 倒引号
    • 以引号中命令的执行结果代替命令本身

通配符和元字符

https://www.linuxidc.com/Linux/2017-08/146463.htm

  • 一:基本正则表达式

    • 1)使用点字符(.)匹配单字符
    • 2)使用定位符
      • ^string 匹配以string开头的字符串
      • string$ 匹配以string结尾的字符串
      • 如果需要匹配以脱字符或美元字符(^、$)开头或结尾的字符需要用转移字符(^,$)
    • 3)使用“*”匹配字符串中的单字符或其重复序列
      • *可以匹配任意多个字符
  • 二:扩展正则表达式

    • 1)使用“[]”匹配一个范围或集合
      • [a-c] 匹配a,b,c
      • [5-9] 匹配5,6,7,8,9
    • 2)使用“{}”匹配模式结果出现的次数
      • string {n} string正好匹配n次
      • string {n,} string至少匹配n次
      • string {n,m} string出现次数必须在n~m之间
      • 例子:
      • A {2}B 匹配AAB
      • A {2,}B 匹配AAB,AAAB,AAAAB…
      • A {2,3}B 匹配AAB,AAAB,但不匹配AAAAB
    • 3)问号的使用
      • 匹配出现一次或0次的情况

管道

" | ":竖线前面的命令的执行结果将作为后面命令的执行参数

  • 后台运行符:& ---->实现脚本或命令的后台启动
  • **大括号{}:用于变量的分辨 ${name} **
  • **小括号(): 用于命令的替换 ,等同于倒引号 $(who) 相当于 who **
  • 分号;: 用于分割语句

shell结构化命令

测试命令

  • test expression
  • [ expression ] :符号 " [ " 是启动测试命令,“ [ “后和” ] "前都要有空格

test的返回结果只能是整数值,1(true),0(false)

  1. 使用test命令判断文件属性

    • -e 是否存在 test -e test.txt
    • -f 是否是文件
    • -d 是否是目录文件
    • -c 是否是字符设备文件
    • -S 是否是Scoket文件
    • -p 是否是管道文件
    • -L 是否是链接文件
  2. 使用test命令判断文件权限

    • -r 判断是否有读的权限 test -r test.txt
    • -w 是否有写的权限
    • -x 是否有可执行的权限
  3. 使用test命令对文件间的操作

    • -nt 判断file1是否比file2新
    • -ot …旧
    • -ef 是否相同
  4. 测试字符串

    • -n 测试字符串是否部位空
    • -z 测试字符串是否为空
    • = 测试字符串是否相同
    • != 测试字符串是否不同
  5. 测试数值

    • equal ,greater,lesser

    • -eq 是否相等

    • -ge 大于等于

    • -gt 大于

    • -le 小于等于

    • -lt 小于

    • -ne 不等于

    复合测试条件

    • ! 非 !experssion

    • -a 且 experssion1 -a experssion2

    • -o 或 experssion1 -o experssion2

if分支结构

1.if-then结构

if expression
then
commands
fi

expression是一个逻辑表达式,可以用test表示,也可以用 [] 表示。

2.if-then-else结构
if expression
then
	conmmands1
else
	conmmands2
fi

3.嵌套结构
if expression1
then
	if expression2
	then
		conmmands1
	fi
conmmands2
fi

case多条件分支结构

case 变量 in
pattern1) commands1;;
pattern2|pattern3)conmmands2;;
*)commands3;;
esac

注意
1.在使用case结构时,在结尾处要添加esac作为case结构的结尾
2.在每一条执行语句后面需要添加两个分号作为分支结束的标志

select命令的使用

作用:引导用户做出选择

select 变量 in 变量列表
do 
	命令
done
#用户的选择会放入choose变量中
$choose

shell中的循环结构

for循环

1.for-in循环
for 变量 in 取值列表
do 
	conmmands;
done

注意
1.取值列表  
1 2 3 4 5 6 7 8
spring summer autumn winter


2.C式 for 结构
for((expression1;expression2;expression3))
{
	循环体;
}

expression1:用于变量的初始化
expression2:逻辑表达式,判断条件
expression3:循环变量的变化操作

while命令的使用

while test expression
do
	conmmands
done

#例子
num=1
echo while 循环开始
while [ $num -le 6 ]
do 
	echo "the current num is $num"
	let num++
done
echo while 循环结束
#使用until命令
until test expression
do 
	conmmands;
done;

循环控制符

  • break:中断
  • continue:继续

创建函数

脚本函数的基本用法

#函数的创建和使用
1.第一种方式
function name
{
	conmmands;
}
2.第二种方式
name()
{
	conmmands;
}
#函数的调用
函数名 [函数参数列表]
#函数的参数
由标准参数变量表示并且有命令行传递给函数的参数
$0(函数名) $1 $2 ...
$# 表示传递给函数参数的个数

#函数的返回值
1.要想获得命令的返回值,一般用 $?
2.默认情况下,函数的返回值式最后一条命令的返回值
3.return values;(values是函数的返回值,这个返回值必须在0~255之间)
4.var="function" #将函数function的执行结果返回给变量var

函数族红的全局变量和局部变量

#全局变量:在整个脚本执行的过程中都有效的变量
变量定义时默认为全局变量
#局部变量:local定义的变量只能在函数内使用
local valnum

数组与函数

1.数组示例
·定义
num1=(1,2,3,4,5)
num2=(a,b,c,d,e)
·使用
${array1[*]}

脚本函数递归与嵌套调用

处理数据输入

命令行参数

#例子
./add.sh 1 2
#格式
./相对路径下的脚本名称 命令行参数
./绝对路径下的脚本名称 命令行参数
$(basename $0)#将执行的shell脚本名称从其绝对路径中剥离出来

特殊参数变量

1.参数统计
$#
2.获取所有参数
$* #将所有参数当作一个单词处理
$@ #将参数看成是多个对象

特殊输入方式

移动变量
shift n #移动n个变量位置--作用可以获得$9之后的变量
#例子
./12-11.sh  a b c d e f g h i j 
$*  a b c d e f g h i j 
$1 a
shift 2
$* c d e f g h i j  
$1 c
读取文件
cat 文件名 | while read lineInfo
do
	conmmand;
done
#每次读取文件的一行并做处理

选项标准化

  • -a 全部对象
  • -d 针对目录对象
  • -c 计数
  • -f 针对文件做处理
  • -h 帮助信息
  • -r 递归操作
  • -v 生成性详细信息输出
  • -y 对所有问题回答yes

处理数据的输出

在执行每一个Shell命令行时通常会打开3个标准问价

  • 标准输入文件(STDIN):通常对应终端的键盘,对应标准文件输入符0
  • 标准输出文件(STDOUT):对应终端的屏幕,1
  • 标准错误输出文件(STDERR):对应终端的屏幕,2

重定向

#I/O重定向
ls -l /home 1>home.txt
#格式
命名 > 文件名 
#如果重定向的文件名不存在,会创建该文件
#当文件存在时,当前命令执行的结果会将文件中的原内容进行覆盖

#追加重定向
命令 >>文件名#当文件存在时,将命令的执行结果追加到内容之后,而不会覆盖

#永久重定向
exec 命令 > 文件名

#在脚本中重定向输入
命令 < 文件名
#例子
wc -l < data.txt #显示data.txt中的行数

#创建自己的重定向
#创建输入文件描述符
Linux系统一般可以打开9个文件描述符,而每个进程启动时,除了自动打开标准输入、标准输出、标准错误3个文件描述符之外,用户还可以创建属于自己的文件描述符
#例子
exec 3 > 13-6.log
echo '输入文字到13-6.log中' > &3

#创建输出文件描述符
#例子
exec 3 < &0

#关闭文件描述符
#将要关闭的文件描述符重定向到 &-



losf命令

查看进程打开的文件、目录,还可以查看进程监听的端口等socket相关的信息

技术|Linux 命令神器:lsof 入门

tee

将记录同时发送到两个地方,一个是发送到文件,一个是发送到标准屏幕上。

date | tee 13-9.log#获取当前时间,并输出到13-9.log文件中,同时发送到标准屏幕上

grep命令

grep命令的主要作用是实现文本的检索。
grep [选项] [匹配样本] [文件列表]
用于在指定的文件列表中查找指定的匹配样本。

  1. 1)如果不指定文件名或“-”,那么grep指定会从标准输入设备读取数据进行匹配
  2. 2)选项:-c 只输出匹配行的计数
    • -E 允许使用扩展模式匹配
    • -i 不区分大小写
    • -v 反向匹配,输出不匹配的行
    • -n 显示匹配行和行号
  • 类名的使用
  • 国际匹配的类名
    • [[:upper:]] [A-Z]
    • [[:lower:]] [a-z]
    • [[:digit:]] [0-9]
    • [[:alnum:]] [0-9a-zA-Z]
    • [[:space:]] 空格和TAB
    • [[:alpha:]] [a-zA-Z]

egrep命令的使用
egrep [选项] [匹配模板] [查找文件列表]

  • 匹配一个或多个字符 ‘a+[a-z]+[0-9]’
    (|) 匹配任意字符串 (root|ubntu)

ps -ef 查看进程状态

脚本控制

Linux信号机制

捕捉信号

  • trap “cmds” signals : 当shell接收到signals命令时,执行cmds命令
  • trap -p signal : 打印当前信号的trap设置

进程的控制

后台运行符号 &:此时程序只是在该终端的后台运行,而没有真正的实现后台运行。如果终端关闭,该程序也会被关闭

nohup 命令 &:真正的实现了程序的后台运行。此时需要输入到屏幕上的标准输出会直接输出到文件名为nohup.out的文件中

例子:

  • nohup ./20.3.sh &
  • ./20-3.sh &
运行进程的控制
  • jobs命令的主要作用时显示当前环境中的所有任务,配合不同的选项可以显示不同的任务信息
    • -l 列出进程ID
    • -n 只列出哪些自从上次用户修改状态后的进程信息
    • -r 只列出状态时running的任务
    • -s 只列出状态时stoped的任务
  • fg:使得后台运行的命令调至前台来运行
  • Ctrl +Z :暂停前台程序的运行 bg:继续执行暂停的命令

脚本运行的优先级

在Linux2.6中,实时进程的优先级范围为099,而普通进程的优先级范围时100139.数值越小,进程的优先级越高

  • 可以通过 ps 命令来查看进程的优先级
  • 字段PRI 是进程优先级,值越小,优先级别越高
使用nice指定优先级

nice值时进程优先级的修正值

PRI值=PRI值(旧值)+NICE值

  • nice [-n <优先等级> ]
  • renice [优先等级] [-p <程序识别码>] [-g <程序群组名称> ] [-u <用户名称>]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值