Shell 脚本(Linux)

怕什么真理无穷,进一寸有一寸的精彩

软件包管理
软件包管理
  • /etc/apt/sources.list:为APT提供软件源的位置,以便系统可以正确地获取和管理软件包
  • /var/lib/apt/list/*:该目录下的文件存储了软件包的元数据,为APT提供了有关可用软件包的信息。这些文件使得系统可以快速地搜索、安装、更新和管理软件包,提高了软件包管理的效率和可靠性
  • /var/cache/apt/archives:存储了通过APT下载的软件包文件,提供了缓存功能,可以加快软件包安装和升级的速度,并使离线安装成为可能。这个目录对于优化系统的软件包管理非常有用。
  1. 软件包类型:file命令查看文件类型

    • 二进制软件包(deb):包含可执行文件、库文件、配置文件、man/info页面、版权声明和其他文档
    • 源码包(depsrc):包含软件源代码、版本修改说明、构建指令以及编译工具等。先由 tar工具归档为.tar.gz文件,然后再打包成 .dsc文件
  2. 软件包的命令

    • 软件包名称 软件包版本 修订版本 体系架构

    • 如 sl_3.03-16_i386.deb

  3. 软件包管理工具分类

  • 命令行:dpkg-deb、dpkg、apt

    • 再命令行模式下完成软件包管理任务
    1. dpkg
    • dpkg -i <package>:安装一个在本地文件系统存在的Debian软件包
    • dpkg -r <package>:移除一个已经安装的软件包
    • dpkg -P <package>:移除已安装软件包及配置文件
    • dpkg -L <package>:列出安装的软件包清单
    • dpkg -s <package>:显示软件包安装状态
    1. apt
    • APT工作原理:在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最合适访问的镜像站点地址,为提高效率,需为这些资源列个清单,以便本地主机查询
    • 刷新软件源:apt-get update
    • 管理软件包apt-get 子命令 [选项] pkg
    子命令描述选项描述
    update下载更新软件包列表信息-d仅下载软件包,而不安装或解压
    upgrade将系统中所有的软件包升级到最新版本-f修复系统中存在的软件包依赖性问题
    install下载所需软件包并进行安装配置-m当发现缺少关联软件包时,仍试图继续执行
    remove卸载软件包-q将输出作为日志保留,不获取命令执行进度
    autoremove将不满足依赖关系的软件包自动卸载–purge与remove子命令一起使用,完全卸载软件包
    source下载源码包–reinstall与install子命令一起使用,重新安装软件包
    build-dep为源码包构建所需的编译环境-b在下载完源码包后,编译生成相应的软件包
    dist-upgrade发布版本级-s不做实际操作,只是模拟命令执行结果
    dselect-upgrade根据dselect的选择进行软件包升级-y对所有询问都作肯定的回答,apt-get不再进行任何提示
    clean删除缓存区中所有已下载的包文件-u获取已升级的软件包列表
    autoclean删除缓存区中老版本的已下载的包文件-h获取帮助信息
    check检查系统中依赖关系的完整性-v获取apt-get版本号
    • 查询软件包信息:apt-cache
    • apt-cache 子命令 [选项] pkg
    子命令描述
    showpkg获取二进制软件包的常规描述
    showsrc获取源码包的详细描述信息
    show获取二进制软件包的详细描述信息
    stats获取软件源的基本统计信息
    search根据正则表达式检索软件包
    depends获取该软件包的依赖信息
    rdepends获取所有依赖于该软件包的软件包
    pkgnames列出所有已安装软件包的名字
    policy获取软件包当前的安装状态
  • 文件窗口界面:dselect、aptitude、tasksel

    • 在文件窗口模式中,使用窗口和菜单可以完成软件包管理任务
  • 图形界面:synaptic

    • 在X-Window图形桌面环境中运行,具有更好的交互性、可读性、易用性等特点
Shell命令
Shell基本命令
  1. Shell命令格式
  • 三要素:命令名称(必须)、选项(可选)、参数(可选)

  • Command [-Options] Argument1 Argument2

  • 注意:

    • Shell 提示符:$(超级用户),#(其他用户)
    • Shell命令或程序严格区分大小写
    • 一条命令的三要素之间空格隔开
    • 若将多条命令在一行书写,用分号(;)将各命令隔开
    • 如果一条命令不能在一行写完,在行尾使用反斜杠(\)标明此条命令未结束
  1. Shell命令行操作
  • 连续按两下 TAB键或 ESC键,用于命令补全;按下一次 TAB键。用于文件名补全
命令描述
sudo shutdown -h now(+45) "That is all,game over"立即关机(45min后关机),双引号内为关机提示
sudo shutdown -r now(+60)立即重启(60min后重启)
history [numberline]显示历史命令(默认保留500条)
Shell中的特殊字符
  1. Shell 中的通配符
通配符含义实例
星号(*)匹配任意长度的字符串file_*.txt: file_wang.txt,file_Lee.txt
问号(?)匹配一个长度的字符file_?.txt: file_1.txt,file_2.txt
方括号([…])匹配其中指定的一个字符file_[otr].txt: file_o.txt,file_r.txt
方括号([-])匹配指定的一个字符范围file_[a-z].txt: file_a.txt,file_c.txt
方括号([ ^…])匹配除括号内指定的字符file_[ ^abc].txt: file_d.txt,file_e.txt
  1. Shell 中的管道
  • 管道:可以把一系列命令连接起来,将第一个命令的输出作为第二个命令的输入,以此类推
  • 如:ls /usr/bin | wc -w; 将ls命令的输出直接作为wc命令的输入,得到/usr/bin目录下文件的个数
  1. 输入输出重定向
  • 输入/输出重定向是改变Shell命令或程序默认的标准输入/输出目标。重新定向到新的目标
  • linux中默认的标准输入定义为键盘,标准输出定义为终端窗口
  • 用户可以为当前操作改变输入/输出,迫使某个特定命令的输入/输出来源为外部文件
重定向符含义实例
> file将 file文件重定向为输出源,新建模式ls /usr > Lsoutput.txt ,将ls /usr的执行结果,写到Lsoutput.txt文件中,若有同名文件将被删除
>> file将 file文件重定向为输出源,追加模式ls /usr >> Lsoutput.txt,将ls /usr的执行结果,追加到Lsoutput.txt文件已有内容后
< file将 file文件重定向为输入源wc < file1,将file1中的内容作为输入传给wc命令
2 > 或 & >将由命令产生的错误信息输入到文件中ls noexistingfile.txt 2 > err.log,使用ls命令,查看一个不存在的文件时,将系统错误提示保存在err.log文件中
  1. 命令置换
  • 将一个命令的输出作为另一个命令的参数
  • command1 `command2`
  • 如:ls `pwd`:pwd的运行结果作为ls命令的参数,最终命令执行结果是显示当前目录的文件内容
Shell基本系统维护命令
  1. man、passwd、su、echo 命令的用法
  • man:man commandname;找到特定的联机帮助页,并提供简短的命令说明(按Q键退出)
  • passwd:passwd username;给已有账户重新修改用户密码(超级用户root可以修改所有其他用户密码,而普通用户只能修改自己的用户密码)
  • su:su [-c | -m -] username;临时改变用户身份,具有其他用户的权限
    • -c:表示执行一个命令后就结束;-m:表示仍保留环境变量不变;- :表示转换用户身份,同时使用该用户的环境
  • echo:echo [-n] information:用于在标准输出(显示器)上显示一段文字,一般起到提示作用
  1. date、clear、df、du 命令的用法
  • date:date [-d|-s|-u] datestr:用于显示和设置日期和时间

  • clear:用于清除屏幕上的信息

  • df:df [-a|-T|-h|-k] Filesystem:用于查看磁盘空间的使用情况

    • -a:显示所有物理文件系统的使用情况,包括虚拟文件系统
    • -T:显示物理文件系统的文件格式类型
    • -l:仅列出本地文件系统
    • -h:物理文件系统大小按兆字节为单位显示
    • -k:物理文件系统大小按千字节为单位显示
  • du:列出目录和文件所使用的磁盘块数,每块占512各字节

    • -a:仅列出空闲的文件数
    • -h:列出磁盘的使用情况(KB)
    • -s:列出总的空闲空间(KB)
Linux用户管理
  1. 用户管理相关文件
  • /etc/passwd文件:是系统能够识别的用户清单。用户登录时系统查询这个文件,确定用户的UID并验证用户口令
    • 登录名、经过加密的口令、UID、默认的GID、个人信息、主目录、登录shell
  • /etc/group文件:包含UNIX组的名称和每个组中成员列表
    • 组名、加密的口令、GID号、成员列表(彼此用逗号隔开)
  • /etc/adduser.conf配置文件
    • FIRST_UID=1000, LAST_UID=29999, USERS_GID=100, DHOME=/home, DSHELL=/bin/bash, SKEL=/etc/skel
  • /etc/skel目录:被/user/sbin/useradd使用,把想要新用户拥有的配置文件从/etc/skel目录拷贝
    • 常用的文件:.bash_profile, .bashrc, .bash_logout, .dircolors, .inputrc, .vimrc
  1. 用户管理相关命令
  • adduser <username>:添加用户

  • passwd:修改用户口令

    • passwd [-k] [-l] [u] [-f] [-d] [-S] username
    • 如:passwd username
  • usermod:修改用户属性

    • usermod [-u uid [-o]] [-g group] [-G groupup,…] [-d home [-m]] [-s shell] [-c comment] [-l new_name] [-f inactive] [-e expire] [-p passwd] [-L|-U] name
    • 如用户oldname改名为newname,注意要同时更改家目录:usermod -d /home/newname -m -l newname oldname
  • deluser:删除用户

    • deluser
    • deluser --remove-home user1,删除用户user1的同时删除用户的工作目录
  • addgroup:添加用户组,addgroup groupname

  • delgroup:删除用户组,delgroup groupname

进程管理相关命令
  1. 使用命令查看进程
  • ps命令:显示进程(process)的动态
    • ps [options]
    • ps -elf (普通使用标准)、ps -aux (BSD标准)
进程的状态标志描述
D不可中断的禁止
R正在执行中
S阻塞状态
T暂停执行
Z不存在但暂时无法消除,僵尸进程
<高优先级的进程
N低优先级的进程
L有内存分页分配并锁在内存中
  • top命令:监视进程,能不断更新进程状态
  • pstree命令:以树形方式显示进程之间的关系
  1. 使用kill命令终止进程
  • kill [-signal] PID
    • 默认情况下,kill命令向指令进程发出信号15,正常情况下,将杀死那些不捕捉或不忽略这个信号的进程
文件系统类型和结构
  • 文件系统:用于组织和管理计算机存储设备上的大量文件,并提供用户交互接口
    • 磁盘文件系统:本地主机中实际可以访问到的文件系统
    • 网络文件系统:可以远程访问的文件系统
    • 专有/虚拟文件系统:不驻留在磁盘上的文件系统
  • Ext4是Linux系统广泛使用的一种文件格式,最大特点是日志文件系统
  • sata硬盘的设备名称是"/dev/sda"
  • IDE硬盘的设备名称是"/dev/hda"
  • 交换分区:将内存中的内容写入硬盘或从硬盘中读出,称为内存交换
目录名描述目录名描述
/Linux文件根目录/mediaUbuntu系统自动挂载CD-ROM、软驱、USB存储后,存放临时读入文件
/bin存放系统中最常用的可执行文件(二进制)/mnt该目录通常用于作为被挂载的文件系统的挂载点
/boot存放Linux内核和系统启动文件,包括Grub、lilo启动器程序/opt作为可选文件和程序的存放目录,主要被第三方开发者用来简易地安装和卸载他们的软件包
/dev存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等/proc存放所有标志位文件的进程,它们是通过进程号或其他的系统动态信息进行标识,例如cpuinfo文件存放CPU当前工作状态的数据
/etc存放系统的所有配置文件,例如passwd存放用户账户信息,hostname存放主机名等/root根用户(超级用户)的主目录
/home用户主目录的默认位置/sbin存放更多的可执行文件(二进制),包括系统管理、目录查询等关键命令文件
/initrd存放启动时挂载initrd.img映像文件的目录,以及载入所需设备模块的目录/srv服务目录,存放本地服务的相关文件
/lib存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件/sys系统目录,存放系统硬件信息的相关文件
/lost+found存放由fsck放置的零散文件/tmn存放用户和程序的临时文件,所有用户对该目录都有读写权限
  • /usr:用于存放系统用户直接相关的文件和目录,例如应用程序及支持它们的库文件,以及罗列了/usr中部分重要的目录
目录名描述目录名描述
/usr/X11R6X Window 系统/usr/share存放使用手册等共享文件的目录
/usr/bin用户和管理员的标准命令/usr/share/dict存放词表的目录
/usr/includec/c++等各种开发语言环境的标准include文件/usr/share/man系统使用目录
/usr/lib应用程序及程序包的连续库/usr/share/misc一般数据
/usr/local系统管理员安装的应用程序目录/usr/share/sgmlSGML数据
/usr/local/share系统管理员安装的共享文件/usr/share/xmlXML数据
/usr/sbin用户和管理员的标准命令
  • /var:通常用于存放长度可变的文件,例如日志文件和打印机文件
目录名描述目录名描述
/var/cache应用程序缓存目录/var/mail电子邮件
/var/crash系统错误信息/var/opt/opt目录的变量数据
/var/games游戏数据/var/run进程的标示数据
/var/lib各种状态数据/var/spool存放电子邮件,打印任务等的队列目录
/var/lock文件锁定记录/var/tmp临时文件目录
/var/log日志记录
  • Linux文件系统与Windows文件系统比较
Linux文件系统Windows文件系统
文件格式主要文件格式:EXT2, EXT3, RerserFS, ISO9660, vfat等主要文件格式:FAT16, FAT32, NTFS等
存储结构逻辑结构犹如一颗倒置的树,每个硬件设备视为一个文件,置于树形的文件系统层次结构中逻辑结构犹如多颗树,将硬盘划分为若个分区,与存储设备一起,使用驱动器分盘符标识
与硬盘分区的关系分区在目录结构中目录结构在分区中
文件命名Linux文件系统中严格区分大小写,区分文件类型不依赖文件后缀,可以使用程序file命令判断文件类型windows文件系统中不区分大小写,使用文件后缀来标识文件类型
路径分隔符Linux使用斜杠“/”分隔目录名,绝对路径都是以根目录(/)作为起点Windows使用反斜杠“\”分割目录名,绝对路径都是以驱动器盘符作为起点
文件与目录权限Linux最初的定位是多用户的操作系统,因而有完善文件授权机制,所有的文件和目录都有相应的访问权限Windows最初的定位是单用户的操作系统,内建系统时没有文件权限的概念,后期的Windows逐渐增加了这方面的功能
文件系统的相关命令
  • pwd, ls, cd, touch, cp, mv, rm, cat, head, tail, mkdir, rmdir
  1. file、ln命令
  • file命令:file [filename] ;判定一个文件的类型
  • ln命令:ln [-s] target link_name; 其中选项“-s”为创建软链接,缺省情况下创建硬链接
    • 硬链接:利用Linux中每个文件分配的物理编号(inode)建立链接
    • 软链接:利用文件的路径名建立链接,通常建立软链接使用绝对路径
  1. 文件的归档和压缩
  • 归档文件:将一组文件或目录保存在一个文件中
  • 压缩文件:将一组文件或目录保存一个文件中,并按照某种存储格式保存在磁盘上,所占磁盘空间比其中所有文件总和要少
    • gzip:是Linux中最流行的压缩工具,具有很好的移植性,可在很多不同架构的系统中使用
    • bzip2:在性能上优于gzip,提供了最大限度的压缩比率
    • zip:若需经常在Linux和微软Windows间交换文件,建议使用zip
压缩工具解压工具文件扩展名
gzipgunzip.gz
bzip2bunzip2.bz2
zipunzip.zip
  • gzip 与 gunzip 命令

    • gzip [-l|-d|-num] filename

    • 与zip明显区别在于只能压缩一个文件,无法将多个文件压缩问一个文件

    • -l:查看压缩文件内的信息,包括文件数、大小、压缩比等参数,并不进行文件解压

    • -d:将文件解压,功能与gunzip相同

    • -num:指定压缩比率,num为1~9个等级

    • gunzip [-f] file.gz

    • -f:解压文件时,对覆盖同名文件不做提示

  • tar命令

    • 可实现在合并归档的同时进行压缩
    • tar [选项] tarfile filelist
    • -tvf:查看归档文件中的详细内容;-xjf/-xzf:完成tar文件的释放
选项描述选项描述
-t显示归档文件中的内容-v显示归档和释放的过程信号
-x释放归档文件-f用户指定归档文件的文件名,否则使用默认名称
-u更新归档文件-j由tar生成归档,然后由bzip2压缩
-c创建一个新的归档文件-z由tar生成归档,然后由gzip压缩
Shell脚本编程
变量
  1. Shell脚本的基础知识
  • Shell脚本的本质:解释型语言,Shell命令的有序集合
  • Shell编程的基本过程:建立shell文件,赋予shell文件执行权限,执行shell文件
  1. Shell变量
  • 允许用户建立变量存储数据,但不支持数据类型,将任何赋给变量的值都解释为一串字符
  1. Bourne Shell有四种变量
  • 用户自定义变量

    • 定义:COUNT=1
    • 取消定义:unset COUNT
  • 位置变量即命令行参数

    • $0:与键入的命令行一样,包含脚本文件名
    • $1,$2,…,$9:分布包含第一个到第九个命令行参数
    • $#:包含命令行参数的个数
    • $@:包含所有命令行参数:“$1,$2,…,$9”
    • $?:包含前一个命令的退出状态
    • $*:包含命令行参数:“$1,$2,…,$9”
    • $$:包含正在执行进程的ID号
  • 预定义变量

  • 环境变量

    • HOME:/etc/passwd文件中列出的用户主目录
    • IFS:Internal Field Separator,默认为空格,tab及换行符
    • PATH:shell搜索路径
    • PS1, PS2:默认提示符($)及换行符提示符(>)
    • TERM:终端类型,常用的有vt100,ansi,vt200,xterm等
功能语句
  • shell语句包含三类:说明性语句、功能性语句和结构性语句
    • 说明性语句:以#号开始到改行结束,不被解释执行
    • 功能性语句:任意的shell命令、用户程序或其他shell程序
    • 结构性语句:条件测试语句、多路分支语句、、循环语句、循环控制语句等
  1. 说明性语句

    • #! /bin/sh:告诉OS用哪种类型的shell来解释执行该程序
  2. 常用功能性语句

  • read:read var1 var2 var3

  • expr:算术运算命令,用于进行简单的整数运算,包括加(+)、减(-)、乘(\*),整除(/)和求模(%)等操作

    #!bin/bash
    
    read -p "input two number" val1 val2
    num=`expr $val1 + $val1 \* $val2`
    echo num
    
  1. 测试语句
  • test语句:可测试三种对象:字符串、整数、文件属性

  • 条件成立时,命令返回值为真(0),否者返回值为假(非0)

  • 字符串测试:

    • test "$answer" = "yes":变量answer的值是否为字符串 yes
    • test s1 = s2:测试两个字符串内容是否完全一样
    • test s1!=s2":测试两个字符串内容是否有差异
    • test -z s1":测试s1字符串的长度是否为0
    • test -n s1":测试s1字符串的长度是否不为0
  • 整数测试

    • test $num -eq 18:变量num的值是否为整数18
    • test a -eq b":测试测试a与b是否相等
    • -ne(不等于)、-gt(大于)、-ge(大于等于)、-lt(小于)、-le(小于等于)
  • 文件测试

    • test -d tmp:测试tmp是否为一个目录
选项描述选项描述
-d namename是否为一个目录-w namename文件是否存在且可写
-e name文件是否存在-x namename文件是否存在且可执行
-f namename是否为普通文件-s namename文件是否存在且其长度不为0
-L name是否为符号链接f1 -nt f2文件f1是否比文件f2更新
-r namename文件是否存在且可读f1 -ot f2文件f1是否比文件f2更旧
  • test命令是使用
方式1:test $name -ep $1; echo $?
方式2: if test -f $filename  // if [ -f $filename ]  注意:中括号前后要有空格
		then
			......
		fi
分支语句
  1. 条件语句
  • 结构性语句:条件测试语句(两路分支)、多路分支语句、循环语句、循环控制语句和后台执行语句等
if 表达式1
then 命令表1 
elif 表达式2 
then 命令表2 
else 命令表3 
fi
  1. 多路分支语句
case 字符串变量 in	//case语句只能检测字符串变量
	模式1)		  //以右括号结束
		命令表1	 
		;;
	模式2|模式3)	//一次可以匹配多个模式用“|”分开
		命令表2
		;;
	模式n)		 //模式n常写为字符*表示所有其他模式
		命令表n
		;;
esac
循环语句
  1. for的用法
for 变量名 in 单词表  // for ((val=1; val <= 5; val=$val + 1))
do
	命令表
done
  1. while的用法
while  命令或表达式	//while (($NUM < 10))
	do
		命令表
	done
  • while语句的退出状态为命令表终被执行的最后一条命令的退出状态
  1. 循环控制语句
  • break
  • continue
函数
  1. Shell函数调用
  2. 函数变量作用域
fun1()
{
	命令表
}
fun1        //函数调用
fun2()
{
	A=$1        //为全局变量,整个文件均可用
	local B=$2  //局部变量,函数内才可调用
	NUM=`expr $A+$B`
	#echo "NUM=$NUM"
	return $NUM
}
fun2  4 5  //带参数调用
echo "\$?=$?"
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵逼树下的懵逼果

谢谢谢谢谢,好人一生平安

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值