这篇文章是我观看尚硅谷Linux视频时做的整理,供记忆和以后复习用,有些地方有所省略
第1章 Linux入门
1.1 Linux介绍
- Linux怎么读【李纽克斯,利尼克斯,里纳克斯】
- Linux是一款操作系统,免费,开源,高效,稳定,处理高并发非常强悍,现在很多的企业级项目都部署到Linux/unix服务器运行。
- Linux创始人:linus 林纳斯,吉祥物:企鹅
- Linux主要的发行版:
1.2 Linux和Unix的关系
1.3 Linux和Windows比较
第2章 VM和Centos安装(主要细节部分)
2.1 虚拟机的三种网络模式
https://note.youdao.com/ynoteshare1/index.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note
2.2 Centos的磁盘分区
https://blog.youkuaiyun.com/u012052268/article/details/77145427/
在Linux中挂载时:
必须分区的有:
1、/ (根分区)
2、swap分区 (交换分区,不超过内存2倍)
推荐分区:
3、/boot (启动分区,200M)
2.3 Linux的目录结构
Linux的目录中有且只有一个根目录
Linux是以文件的形式管理设备的
目录 | 具体 |
---|---|
/bin [usr/bin 、/usr/local/bin] | 是Binary的缩写,这个目录存放最经常使用的命令 |
/sbin [usr/sbin 、/usr/local/sbin] | s就是SuperUser的意思,这里存放的是系统管理员使用的账号命名的 |
/root | 该目录为系统管理员,也称超级权限者的用户主目录 |
/bin [usr/bin 、/usr/local/bin] | 是Binary的缩写,这个目录存放最经常使用的命令 |
/lib | 系统开启所需要的最基础的动态连接共享库,其作用类似于Windows中的DLL文件,几乎所有的应用程序都要用到这些共享库 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件 |
/etc | 所有的系统管理所需要的配置文件和字母录 |
/usr | 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录 |
/boot | 存放的启动Linux的一些重要文件,包括一下连接文件和镜像文件 |
/proc | 这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息 |
/srv | service的缩写,该目录存放一些服务启动之后需要提取的数据 |
/sys | 这是Linux2.6内核的一个重大变化,该目录下安装了2.6内核中新出现的一个文件系统 |
/tmp | 这个目录是用来存放一些临时文件的 |
/dev | 类似于Windows的设备管理器,把所有的硬件以文件的形式存储 |
/media | Linux系统会自动识别一些设备,例如U盘,光驱等,当识别后,会把设备挂载到这个目录下 |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以把外部的存储挂载到该目录下,然后进入该目录就可以查看里面的内容了 |
/opt | 这是给主机额外安装软件所摆放的目录,默认为空 |
/usr/local | 这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式来安装的程序 |
/var | 这个目录中存放着不断扩充着的东西,习惯被经常修改的目录放在这个目录下,包含各种日志文件 |
/selinux [security-enhanced linux] | 是一个安全子系统,它能控制程序只能访问特定文件 |
第3章 远程登录Linux系统
XShell:远程登录到Linux 【前提Linux启用了SSHD服务,该服务会监听22端口】
XFtp:上传和下载文件软件
第4章 vi 、vim编辑器
所有的Linux系统都会内置vi文本编辑器
vim具有程序编辑的能力,可以看做是vi的增强版本:字体颜色辨别,代码补全,编译及错误跳转等编程的功能特别丰富。
4.1 三种模式
- 正常模式:可以使用快捷键
- 插入模式:可以输入内容,一般输入 i 进入此模式
- 命令行模式:可以提供相关指令,完成读取,存盘,离开,显示行号等的动作实在此模式中达成的
4.2 常用的快捷键
- 拷贝光标当前行:[yy] ,拷贝当前光标行向下的五行:[5yy], 粘贴到光标处:[p]
- 删除当前行:[dd],删除当前行向下5行:[5dd]
- 在文件中查找某个单词: [/关键字],回车查找,输入n就是查找下一个
- 到文档的最末行:[G] ,最首行:[gg]
- 撤销输入:[u]
- 显示文件的行号:[:set nu] ,不显示文件的行号:[:set nonu]
- 将光标移动到20行[第一步(可以省略):显示行号 :set nu;第二步:输入20;第三步:输入shift+g]
第5章 开机、重启、用户登录注销
5.1 开机&重启命令
shutdown -h now: 表示立刻关机
shutdown -h 1: 表示一分钟后关机
shutdown -r now: 现在重新启动计算机
halt: 直接使用,等价于关机
reboot: 就是重启系统
syn: 把内存的数据同步到磁盘
5.2 用户登录和注销
logout:注销登录用户(在图形运行级别无效)
第6章 用户管理
6.1 基本语法
- useradd 用户名:添加一个用户,当创建用户成功后,会自动创建和用户同名的家目录,也可以通过useradd -d 指定目录 用户名,给新创建的用户指定家目录。
- passwd 用户名:为该用户设置或修改密码。
- userdel 用户名:删除该用户,但保存家目录。
- userdel -r 用户名:删除该用户,同时删除家目录。
- id 用户名:查询用户信息。
如果当前用户的权限不够,需要切换到高权限用户,比如root.
- su - :用户名 :切换用户 【从权限高的用户到低的用户,不需要输入密码,反之需要】。
- whoami【who am i 】:查看当前登录用户。
用户组:类似于角色,系统可以对有共性的多个用户进行统一的管理
- groupadd 组名:创建一个组。
- groupdel 组名:删除一个组。
- useradd -g 用户组 用户名:创建用户时直接加入组。
- usermod -g 用户组 用户名:修改用户的组。
6.2 用户和组的相关文件
- /etc/password文件:用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识符:组标识号:注释性描述:主目录:登录shell。- /etc/shadow文件:口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:
标志.- /etc/group文件:组的配置文件
每行含义:组名:口令:组标识号:组内用户列表
第7章 实用指令
7.1 指定运行级别
系统的运行级别配置文件:/etc/inittab
切换到指定运行级别的指令: init [0123456]
如何找回root密码?
思路:进入到单用户模式,然后修改root密码,然后重启。
7.2 帮助指令
- man [命令或配置文件] :功能描述,获得帮助信息
- help :获得shell内置命令的帮助信息
7.3 文件目录类指令
- pwd:显示当前工作目录的绝对路径。
- ls [目录或文件]:查看当前目录的所有内容信息。
常用选项:-a:显示当前所有的文件和目录。包含隐藏的、-l: 以列表的方式显示信息。- cd [参数]:切换到指定目录,cd ~或者cd:回到自己的家目录,cd …/ 回到当前目录的上一级目录。
- mkdir [选项] 要创建的目录:;常用选项: -p:创建多级目录。
- rmdir [选项] 要删除的空目录:rmdir删除的是空目录,如果目录下有内容时是无法删除的,如果删除非空目录,需要使用 rm -rf 要删除的目录。
- touch 文件名称:创建一个空文件,也尅一一次性创建多个。
- cp [选项] source dest:将source复制到dest中。 常用选项:-r:递归复制整个文件夹,强制覆盖不提示的方法:\cp 。
- rm [选项] 要删除的文件或目录:移除文件或目录。
常用选项:-r:递归删除整个文件夹,-f:强制删除不提示。- mv oldNameFile newNameFile :重命名、mv 目录1 目录2:移动文件 。
- cat [选项] 要查看的文件:查看文件内容,以只读的方式。为了浏览方便,一般会带上 | more
常用选项:-n:显示行号。- more:是一种基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件中的内容
快捷键:space:向下翻一页、Enter:向下翻一行、q:退出、Ctrl+F:向下滚动一屏、Ctrl+B:返回上一屏- less:用来分屏查看文件内容。less指令在先说文件内容时,并不是一次性将整个文件加载之后才显示,而是根据显示加载内容,对于大型文件具有较高的效率。
快捷键:space:向下翻动一页、pagedown:向下翻动一页、pageup:向上翻动一页、q:退出- >输出重定向指令 和 >> 追加指令
基本语法:ls -l > 文件:将列表的内容覆盖写入文件中;ls -l >> 文件:将列表的内容追加到文件的末尾;cat 文件1 > 文件2:将文件1的内容覆盖到文件2中;echo “内容” >> 文件。- echo [选项] [输出内容]: 输出内容到控制台:例如echo $PATH
- head 文件:查看文件头10行内容;head -n 5 文件:查看文件头5行内容
- tail 文件:查看文件后10行内容;tail -n 5 文件:查看文件后5行内容;tail -f 文件:实时追踪该文档的所有更新
- ln指令:软链接也叫符号链接,类似于windows里的快捷方式。 基本语法:ls -s [原文件或目录] [软链接名] 细节说明:当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。
- history指令:查看已经执行过的历史命令。 显示最近的十个指令:history 10; 执行历史编号为5的指令:!5
7.4 时间日期类
- data指令:显示当前日期 基本语法:data:显示当前时候;data “+%Y”:显示当前年份;data “+%m”:显示当前月份; data “+%d”:显示当前是哪一天;data “+%Y-%m-%d %H:%M:%S”:显示年月日时分秒。
设置日期:data -s “2019-10-10 11:11:12”- cal指令:查看日历 基本语法:显示当前日历 :cal;显示2019年的日历:cal 2019
7.5 搜索查找类
- find指令:从指令目录向下递归遍历其子目录,将满足条件的文件或目录显示在终端 基本语法:find [搜索范围] [选项] 选项说明:-name 文件名:按照指定的文件名查找模式查找文件;-user 用户名:查找属于指定用户名所有文件;-size +n/-
n/n size:按照指定的大小查找文件 。- locate指令:可以快速定位文件路径,locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件,locate指令无需遍历整个文件系统,查询速度极快,为了保证查询结果的准确度,管理员必须定期更新locate数据库。
基本语法:locate 搜索文件 特别说明:由于locate指令基于数据库进行查询,所有第一次运行前,必须使用updatedb指令创建locate数据库。- grep指令和管道符号:grep过滤查找,管道符"|",表示将前一个命令的处理结果输出传递给后面的命令处理 基本语法:grep [选项] 查找文件 源文件 选项:-n:显示匹配行及行号;-i:忽略字母大小写
7.6 压缩和解压缩指令
- gzip/gunzip:gzip用于压缩文件,gunzip用于解压缩
基本语法:gzip 文件名 ;gzip 文件名.gz
细节说明:当使用gzip压缩文件后,不再保留原来的文件。- zip/unzip:zip用于压缩文件或目录,unzip用于解压
基本语法:zip [选项] xxx.zip 将要压缩的内容;unzip [选项] xxx.zip
zip常用选项:-r:递归查询,即压缩命令
zip常用选项:-d <目录>:指定解压后文件的存放目录- tar:打包指令,最后打包后的文件是tar.gz的文件
基本语法:tar [选项] xxx.tar.gz 打包的内容
选项说明:-c:产生tar打包文件;-v:显示详细信息;-f:指定压缩后的文件名;-z:打包同时压缩;-x:解包 .tar文件
例子:压缩:tar -zcvf 要打包的文件;解压到指定目录:tar -zxvf a.tar.gc -c 已经存在的目录
7.7 组管理和权限管理
- 文件/目录 所有者:一般为文件的创建者
查看文件所有者指令:ls -ahl- 修改文件所有者:
指令:chown 用户名 文件名- 修改文件所在的组
指令:chgrp 组名 文件名- 修改用户所在组/登录的初始目录
指令:usermod -g 组名 用户名;usermod -d 目录名 用户名 改变该用户登录的初始目录
7.8 权限查看及详解
ls -l 中先显示的内容如下
-rwxrw-r-- 1 root root 12213 Feb 2:09:39 abc.txt
第1位 | 第2-4位 | 第5-7位 | 第8-10位 | 1 | root | root | 12213 | Feb 2:09:39 | abc.txt |
---|---|---|---|---|---|---|---|---|---|
文件的类型:- 普通文件;d 目录;l 软链接;c字符设备【键盘、鼠标】;b 块文件,硬盘 | 表示文件所有者的权限 | 表示所在组的用户的权限 | 表示文件其它组的用户的权限 | 如果是文件,表示硬链接的数,如果是目录,表示该目录的子目录个数 | 文件所属用户 | 文件所属组 | 如果是文件,表示的是文件大小,如果是目录,显示4096 | 文件的最后修改时间 | 文件名 |
rwx [421] 权限详解
文件 | 目录 | |
---|---|---|
[ r ] 代表可读 | 可以读取查看 | 可以读取,ls查看目录内容 |
[ w ] 代表可写 | 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在目录有写权限,才能删除该文件 | 可以修改,目录内创建+删除+重命名目录 |
[ r ] 代表可执行 | 可以被执行 | 可以进入该目录 |
7.9 修改权限-chmod
通过chmod指令。可以修改文件或目录的权限
- 通过 “+、- 、=”变更权限
chmod u=rwx,g=rx,o=x 文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名 (a代表所有)- 通过数子变更权限
rwx = 4+2+1 = 7
chmod 755 文件目录名- 修改文件所有者
chown newowner file :修改文件所有者
chown newowner:newgroup file:改变用户的所有者和所有组
-R 如果是目录,则使其下所有子文件或目录递归生效
第8章 任务调度-crond
任务调度:是指系统在某个时间执行的特定的命令或程序。
基本语法:crontab [选项]
常用选项:
- -e:编辑crontab定时任务;
- -l:查询crontab任务:
- -r:删除当前用户所有者的crontab任务。
例子:
crontab -e
*/1 * * * * ls -l /etc/> /tem/to.txt
当保存退出后执行
在每一分钟都会执行 ls -l /etc/ > tmp/to.txt
说明:- 时间单位从左到右的含义:分钟,小时,天,月,星期。
- 特殊符号的说明:" " * “号:代表任何时间;”,":代表不连续的时间,"-“代表连续的时间;”/n":代表每隔n执行一次。
第9章 磁盘分区、挂载
9.1 分区基本知识
- mbr分区
- 最多支持四个主分区
- 系统只能安装在主分区
- 扩展分区要占一个主分区
- MBR最大只支持2TB,但拥有最好的兼容性
- gtp分区
- 支持无限多个分区(但操作系统可能限制,比如windiws 下最多128个分区)
- 最大支持18EB的最大容量(EB=1024PB,PB=1024TB)
- windows7 64位以后支持gtp
9.2 Linux分区
Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入的一个分区将使它的存储空间在一个目录下获得。
查看系统的分区和挂载情况
9.3 如何增加一块硬盘
步骤: | |
---|---|
1. 虚拟机添加硬盘 | |
2. 分区 | fdisk /dev/sdb |
3. 格式化 | mkfs -t ext4 /dev/sdb1 |
4. 挂载 | 先创建一个要挂载的目录挂载 mount /dev/sdb1 要挂载到的目录 |
5. 设置可以自动挂载(永久挂载) | vim /etc/fstab /dev/sdb1 要挂载到的目录 ext4 defaults 0 0 |
9.4 磁盘情况查询
9.4.1 查看系统整体磁盘使用情况
基本语法:df -h
应用实实例
9.4. 2查看指定目录的磁盘占用情况
基本语法: du -h 目录 查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
-max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
应用实例:查询 /boot 目录的磁盘占用情况,深度为1
9.5 磁盘查询实用指令
- 统计/home 文件夹下目录的个数:[ ls -l /home | grep " ^- " | wc -l ]
- 统计/home 文件夹下文件的个数:[ ls -l /home | grep " ^d " | wc -l ]
- 统计/home 文件夹下文件的个数,包括子文件夹里的:[ ls -lR /home | grep " ^- " | wc -l ]
- 统计/home 文件夹下目录的个数,包括子文件夹里的:[ ls -lR /home | grep " ^d " | wc -l ]
- 以树状显示目录结构:[ yum install tree ; tree ]
10 网络配置
10.1 查看网络IP和网关
10.1.1 查看虚拟机中虚拟网络编辑器
10.1.2 windows中网络适配器
10.2 Linux网络环境配置
10.2.1 自动获取
缺点:linux启动后会自动获取IP,每次获取的IP地址可能不一样,这个不适用于做服务器。因为我们服务器的IP是需要固定的
10.2. 2 指定固定的IP
直接修改配置文件来指定IP,并可以连接到外网,vim /etc/sysconfig/network-scripts/ifcfg-eth()
10 Linux进程管理
10.1进程的基本介绍
- 在Linux中,每个执行的程序都称为一个进程,每个进程都分配一个ID号。
- 每一个进程都对应一个父进程,而这个父进程可以复制多个子进程。
- 每个进程都可能以两种方式存在的:前台与后台所谓前台进程就是用户目前的屏幕上可以操作的,后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式运行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
10.2 显示系统执行的进程
ps命令是用来查看目前系统中正在执行的进程
常用参数:
- -a:显示当前终端的所有进程信息
- -u:以用户的格式显示进程信息
- -x:显示后台进程运行的参数
10.2.1 ps显示的信息选项
字段 | 说明 |
---|---|
USER | 用户名称 |
PID | 进程识别号 |
%CPU | 进程占用CPU的百分比 |
%MEM | 进程占用物理内存的百分比 |
VSZ | 进程占用的虚拟内存大小 单位kb |
PSS | 进程占用的物理内存大小 单位kb |
TTY | 终端名称,缩写 |
STAT | 进程状态,其中s-休眠 ,表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或被停止等等 |
TIME | 此进程所消耗的CPU时间 |
COMMAND | 启动进程所用的命令和参数,如果过长会被截断显示 |
10.2.2 以全格式显示当前所有的进程
指令:ps -ef
- -e :显示所有进程
- -f:全格式
字段 | 说明 |
---|---|
UID | 用户ID |
PID | 进程ID |
PPID | 父进程ID |
C | CPU |
STIME | 进程启动的时间 |
PSS | 进程占用的物理内存大小 单位kb |
TTY | 完整的终端名称 |
TIME | 此进程所消耗的CPU时间 |
CMD | 启动进程所用的命令和参数,如果过长会被截断显示 |
10.3 终止进程kill和killall
若某个进程执行到一半需要停止时,或是消耗了很大的系统资源,此时可以考虑停止该进程。 基本语法:
- kill [选项] 进程号 (通过进程号杀死进程)
- killall 进程名称 (通过进程名杀死进程,也支持通配符) 常用选项:
- 9 :表示强迫进程立即停止
最佳实践:
- 1.踢掉某个非法用户:[ ps -aux | grep sshd ;kill 进程号;]
- 2.终止远程登录服务sshd,在适当的时候再重启sshd服务:[ ps -aux | grep sshd ;kill 进程号;]
- 3.终止多个gedit 编辑器:[ killall gedit;]
- 4.强制杀掉一个终端:[ ps -aux | grep bash ;kill -9 进程号 ;]
10.4 查看进程树
基本语法: pstree [选项] :可以更直观的来看进程信息
常用选项:
- -p :显示进程的PID
- -u :显示进程的所属用户
10.5 Linux 服务管理
10.5.1 介绍
服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如mysql,sshd,防火墙等,因此我们又称为守护进程。
10.5.2 service管理指令
service 服务名 [start | stop | restart | reload | status ] centos7.0后:不再使用service,而是systemctl
10.5.3在windows中测试服务器的某个端口是否开放: telnet ip port
10.5.4 查看服务名
- 使用setup -> 系统服务
- /etc/init.d/服务名称
10.5.5 chkconfig指令
通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭 基本语法:
- 查看服务: chkconfig --list | grep xxx
- chkconfig 服务名 --list
- chkconfig --level 5 服务名 on/ off
10.6 动态监控进程
top与ps命令很相似,它们都用来显示正在执行的进程,区别在于,top执行一段时间可以更新正在执行的进程 基本语法:top [选项]
选项说明:
- -d 秒数 :指定top命令每隔几秒更新,默认是三秒
- -i :使top不显示任何闲置或僵死进程
- -p:通过指定监控进程ID来仅仅监控某个进程的状态
交互操作说明:
- p:以CPU使用率排序,默认就是此项
- M:以内存的占用率排序
- N:以PID排序
- q:退出top
查看系统网络情况 netstat
基本语法:
- netstat [选项]
- netstat -anp
选项说明:
- -an:按一定的顺序排列输出
- -p:显示哪个进程在调用
11 RPM YUM
11.1 rpm包的管理
11.1.1 介绍
一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生产具有。RPM扩展名的文件。RPM是RedHat Package
Manager(RedHat软件包管理工具)的缩写。
11.1.2 简单查询指令
查询已安装的rpm列表:rpm -qa | grep xx
查询rpm软件包信息:rpm -qi xx
查询rpm软件包中的文件:rpm -ql xx
查询文件所属的软件包:rpm -qf 文件路径名
11.1.3 卸载rpm包
基本语法:rpm -e RPM包的名称 如果其他软件
软件包依赖于要卸载的软件包,卸载时会产生错误信息,可以增加参数–nodeps强制删除:rpm -e --nodeps RPM软件包的名称
11.1.4 安装rpm包
基本语法:rpm -ivh RPM软件包
参数说明:
i = install 安装
v = varbose 提示
h = hash 进度条
11.2 rpm包的管理
11.2.1 介绍
Yum是一个shell前端软件管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的软件包.
基本指令:
查询yum服务器是否有需要安装的软件:yum list | grep xxx
安装指定的yum包:yum install xx
12 搭建JavaEE开发环境
12.1 安装JDK
- 官网下载JDK压缩包到 /opt 目录下(可以在Linux系统浏览器直接下载,也可以使用windows下载后使用Xftp上传至Linux系统)
- 解压此JDK压缩包:tar -zxvf 压缩包名
- 配置环境变量:vim /etc/profile
- 注销用户,环境变量配置才能生效
- 编写一个Hello.java,测试编译运行是否成功
12.2 安装Tomcat
- 官网下载Tomcat压缩包到 /opt 目录下(可以在Linux系统浏览器直接下载,也可以使用windows下载后使用Xftp上传至Linux系统)
- 解压此压缩包:tar -zxvf 压缩包名
- 启动tomcat ./startup.sh
4 .在浏览器中出现此页面则说明安装成功
- 开放端口 vim /etc/sysconfig/iptables (只有开放端口,其他机器才可以通过此端口访问这个web服务器)
12.1 安装MySql
使用yum安装特定版本的数据库,此方法w认为是最简便的,下面这篇博客描述的很详细:
https://blog.youkuaiyun.com/weixin_38187469/article/details/79257694
13 Shell编程
13.1 Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起。停止甚至是编写一些程序。
13.2 Shell快速入门-Shell脚本的执行方式
13.2.1 脚本格式要求:
- 脚本以==#!bin/bash== 开头
- 脚本需要有可执行权限
13.2.2 编写第一个Shell脚本
需求说明: 创建一个Shell脚本,输出hello world
13.2.3 执行Shell脚本
13.3 Shell的变量
13.3.1 Shell的变量的介绍
- Linux Shell中的变量分为:系统变量和用户自定义变量。
- 系统变量:$HOME、$PWD、$SHELL、$USER 等等。
- 显示当前Shell中所有变量:set
13.3.2 Shell的变量的定义
基本语法
- 定义变量:变量 = 值
- 撤销变量: unset 变量
- 声明静态变量:readonly 变量,注意:不能unset
变量定义规则
- 变量名称可以由字母数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写
将变量的返回值赋给变量
- A=`ls-la` 反引号,运行里面的命令,并把结果返回给变量A
- A=$(ls-la) 等价于反引号
13.4 设置环境变量
13.4.1 基本语法
- export 变量名=变量值 :将shell变量输出为环境变量
- source /etc/profile :让新添加的环境变量立即生效
- echo $变量名 :查询环境变量的值
13.5 位置参数变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置参数变量 比如:./myshell sh 100 200
,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
基本语法
- $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
- $*:这个变量代表命令行中所有的参数
- $@:这个变量也代表命令行中所有的参数。不过把每个参数区分对待
- $#:这个变量代表命令行中所有参数的个数
13.6 预定义变量
基本介绍:
- . 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
- $$:当前进程的进程号PID
- $! :后台运行的最后一个进程的进程号PID
- $?:最后一次执行的命令的返回状态,如果这个变量的值为0.证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不准确
13.7 运算符
基本语法
- $((运算符)) 或 $[运算式]
- expr m [ + ,-,* ,/ ,%] n :注意expr运算符间要有空格,有些符号需要添加转义符
13.8 条件判断
基本语法 :[ condition ] :注意condition前后要有空格
判断语句
两个整数的比较
= 字符串比较
- lt 小于
- le 小于等于
- eq 等于
- gt 大于
- ge 大于等于
- ne 不等于
按照文件权限进行判断
- -r 有读的权限
- -w 有写的权限
- -x 有执行的权限
按照文件类型进行判断
- -f 文件存在并且是一个常规文件
- -e 文件存在
- -d 文件存在并且是一个目录
13.9 流程控制
13.9.1 if判断
if [ 条件判断式 ]; then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
13.9.2 case语句
基本语法:
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值1,则执行程序2
;;
…省略群其他分支
*)
如果变量的值都不是以上的值,则执行此程序
esac
13.9.3 for循环
基本语法1:
for 变量 in 值1 值2 值3…
do
程序
done
基本语法2:
for ((初始值;循环控制条件;变量变化))
do
程序
done
13.9.3 while循环
基本语法
while [ 条件判断式 ]
do
程序
done
13.10 read读取控制台输入
基本语法
read 选项 变量名
选项:
- -p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定的时间输入,就不在等待了。
13.11 函数
函数介绍
shell编程和其他编程语言一样,有系统函数。也有自定义函数。
13.11.1 系统函数,这里我们介绍两个
- basename 基本语法:返回完整路径最后 / 的部分,常用于获取文件名
- basename [pathname] [suffix]
- basename [string] [suffix]
- suffix为后缀。如果suffix被指定了,basename会将pathname或string中的suffix去掉
- dirname基本语法
功能:返回完整路径最后 / 的前面部分,常用语返回路径部分
13.11.2 自定义函数
基本语法
[function] funname[()]
{
Action
[return int;]
}
调用直接写函数名:funname[值]
14 shell综合案例
将数据库定期备份到特定的目录下