一、Linux介绍
1. Linux学习方向
Linux运维工程师:
Linux嵌入式工程师:
在Linux下的项目开发:Java、Python、C/C++、PHP
2. Linux的应用领域
个人桌面领域应用
服务器领域应用
嵌入式领域应用
3. Linux学习阶段
阶段1:Linux环境下的基本操作命令,包括文件操作、编辑工具、用户管理。
阶段2:配置,包括环境变量配置、网络配置、服务配置。
阶段3:搭建对应语言的开发环境(大数据、JAVA、Python)。
阶段4:编写shell脚本,对Linux服务器进行维护。
阶段5:进行安全设置,防止攻击,对系统进行调优。
阶段6:深入了解Linux,探究内核工作原理,熟悉各个环节的部署和方法等。
二、 Linux基础入门
1. 什么是Linux?
Linux是一款操作系统,免费、开源、安全、高效、稳定,处理高并发非常强,大多数企业级的项目都会部署到Linux/unix服务器上运行。
Linux的主要发行版:CentOSE,RedHat,Ubuntu,Suse,Fedora,红旗Linux。
2. 虚拟机配置
-
网络配置:
- 桥接模式:虚拟机和本母机都有一个ip地址,且在同一局域网内,外界能够任意访问其中的ip地址。所以可能会造成某个网段内ip冲突导致ip地址不够用。
- NAT模式:网络地址转换方式,Linux虚拟机可以访问外网,不会造成ip冲突。(一般选这个)
- 仅主机模式:Linux虚拟机是一个独立的主机,不能访问外网。
-
CPU与内核:
大小不能超过母机的总资源数,可以在资源监视器中查看CPU部分。
3. Vmtools
- 安装
- 在文件中查找vmtools。新版本的centos会自动安装且解压好的。
- 共享文件夹
- 在windows下创建一个文件夹
- 在vm菜单项中依次点击"虚拟机->设置->选项->共享文件夹->总是启用->添加->选择刚才创建好的文件夹路径->点击下一步->完成->确定。
- centos系统上,在计算机/mnt/hgfs下可以找到共享的文件夹。
- 作用
- 可以在windows系统和centos系统之间直接粘贴命令
- 可以给windows和centos之间设置共享文件夹
4. Linux(Centos)文件系统目录结构
- Linux文件系统采用层级式的树状目录结构,此结构最上层是根目录"/",然后在此目录下创建其他子目录。
- Linux世界里,一切皆文件。
- 常用文件夹
- bin:binary,存放经常使用的命令
- dev:设备硬件映射,类似windows的设备管理器,把所有的硬件用文件的形式存储
- etc:所有的系统管理所需要的配置文件和子目录
- home:存放普通用户的主目录,在Linux下每个用户都有一个自己的目录,一半该目录名是以用户的账号名命的
- lib:系统开机需要的最基本的动态连接共享库,其作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库
- lost+found:一般是空的,当系统非法关机的时候,就会存一些文件
- boot:存放的是Linux启动时使用的一些核心文件,包括一些连接文件以及镜像文件
- media:linux会自动识别一些设备,比如U盘,光驱等,识别后,Linux会把识别的设备挂载到这个目录下
- mnt:让用户临时挂载别的文件系统,可以将外部的存储挂载到/mnt/上,然后进入该目录就可以查看里的内容。
- opt:给主机额外安装软件所摆放的目录。比如后面要安装的数据库。
- usr/local:另外一个给主机安装额外软件的目录,一般是通过编译源码方式安装的程序。
- proc:虚拟的目录,是系统内存的映射,访问这个目录来获取系统信息
- srv:service,存放一些服务器启动之后需要提取的数据
- root:该目录为系统管理员的用户主目录
- sbin:超级用户,存放系统管理员使用的系统管理程序
- selinux:一种安全子系统,能控制程序只能访问特定文件。
- sys:系统,安装了2.6版本以上的内核中新出现的一个文件系统
- tmp:临时文件夹
- usr:非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似windows下的program files目录
- var:这个目录存放着不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。
- 注意:
- linux只有一个根目录"/"
- linux的各个目录存放的内容是规划好的,不要乱放文件
- linux是以文件的形式管理我们的设备,因此linux系统,一切皆文件
三、 Linux基础指令实践
1. 远程登录
- Xshell,远程操作。
- Xftp,远程文件传输。
2. vi和vim的使用
适用vi/vim编辑一个文件时,刚进入的时候为一般模式(不能对内容进行编辑),输入a/i等等键进入编辑模式。在一般模式下输入:进入命令模式。
- 常用命令
- esc:从编辑模式切换到一般模式
- wq:退出并保存
- q:退出
- q!:退出不保存
- 快捷键
- 复制粘贴单行:在一般模式下,输入yy将会把光标所在行复制。
- 复制粘贴多行:在一般模式下,输入数字n,然后输入yy,即可复制从光标所在处起的n行。
- 粘贴:使用p将会把复制的内容粘贴到光标所在的下一行。
- 删除一行:输入dd,删除光标所在的行。
- 删除多行:输入数字n,再输入dd,会删除包括光标所在行开始的n行。
- 查找:在一般模式下,输入/,然后在/后面输入要查找的内容,然后回车,即可得到结果。输入字母n,可以对结果进行遍历。
- 设置文件行号:在命令模式下输入set nu显示行号,输入set nonu不显示行号。
- 首行和末行的切换:在一般模式下输入G使得光标跳转到内容末尾,输入gg使得光标跳转到内容头。
- 撤回:在一般模式下,输入字母u,撤回新修改的操作。
- 跳转到指定行号:在一般模式下,先输入数字n,在输入shift+g(或者gg也可),即可使得光标跳转到指定行号首部。
3. Linux关机重启注销及用户管理
-
关机和重启
- shutdown
- shutdown -h now:立即关机
- shutdown -h 1:1分钟后关机
- shutdown -r now:立即重启
- halt:关机
- reboot:重启
- sync:把内存的数据同步保存到磁盘,此命令应该在关机和重启之前都需要运行一遍,防止数据丢失。
- shutdown
-
用户登录和注销
- logout:注销当前用户,在图形运行级别是无效的,需要在运行级别3下才有效果。
-
用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
Linux用户至少属于一个组,一个用户可以属于多个组。
-
添加用户
- useradd 用户名:添加一个用户,且同时生成一个与用户名相同的家目录。
- useradd -d /home/路径名 用户名:在创建用户时指定家目录,该目录必须是不存在的。
-
修改密码
必须在根目录下才能修改密码。修改指令为:passwd+用户名。
-
查看用户所在家目录
pwd + 用户名
-
删除用户
- userdel 用户名:删除用户,不删除其所在家目录。
- userdel -r 用户名:删除用户同时删除其所在家目录。
-
查询用户信息
id 用户名:得到结果依次为用户id,用户所在组id,用户所在组名称。如果没有该用户,则提示无此用户。
-
切换用户
- su 用户名:从高级权限用户切换到低级权限用户时,不需要输入密码。反之,则需要。
- exit:可以切换到上一权限用户。
-
查询当前用户名
whoami:返回当前用户名。
-
用户的组管理
- groupadd:添加用户组
- groupdel:删除用户组
- 创建用户时指定组:useradd -g 组名 用户名。
- 修改用户组:usermod -g 组名 用户名。
-
用户和组信息保存的相关文件
- /etc/passwd文件:用户的配置文件,记录用户的各种信息。每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
- /etc/shadow文件:口令配置文件。每行的含义:登录名:加密口令:最后一次修改的时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志。
- /etc/group文件:组的配置文件,记录linux包含的组信息。每行含义:组名:口令:组标识号:组内用户列表。
-
4. Linux实用指令
1.运行级别
Linux运行级别一共有七个,编号分别为:0,1,2,3,4,5,6。
- 0:关机
- 1:单用户
- 2:多用户无网络服务
- 3:多用户有网络服务
- 4:保留,至今未用
- 5:图形界面
- 6:重启
常用的运行级别是3和5,修改默认运行级别可修改配置文件/etc/inittab。
切换级别指令:init 级别号
2. 找回root密码
开机,在引导输入时按下回车键,进入一个界面,输入e,进入一个新的页面,选择第二行进行内核编辑,输入e进入编辑模式,次数输入(有个空格)1,然后回车,再输入b,即可进入单用户模式(1),passwd root即可修改root密码,最后exit退出该运行级别。远程连接这个方法是不行的,这也保证了Linux一定程度上的安全性。
3. 帮助指令
- man [命令/配置文件]:功能描述,获得帮助信息。如man ls。
- help 命令:功能描述,获得shell内置命令的帮助信息。如 help cd。
4. 文件目录类指令
- pwd:显示当前工作目录的绝对路径。
- ls:
- ls:显示当前目录下的文件(不包括隐藏的)
- ls -a:显示当前目录下的所有文件(包括隐藏的)
- ls -l:以列表的形式显示当前目录下的所有文件(不包括隐藏的)
- ls -al:以列表的形式显示当前目录下所有的文件(包括隐藏的)
- ls -lh:以列表且以人性化的形式显示
- cd:切换到指定目录
- cd/cd ~:回到自己的家目录
- cd …:返回上一级目录
- mkdir:创建目录
- mkdir 指定目录==/新目录名==:在指定目录创建新的目录。如 mkdir /home==/god==
- mkdir -p 指定目录==/新目录名==:在指定目录创建新的多级目录。如mkdir -p /home==/animal/bird==
- rmdir:删除目录
- rmdir 指定目录:删除指定的目录,此目录必须是空的,否则删除会失败。
- rm- rf 指定目录或者文件:删除指定的目录文件,不论它是否为空。
- touch:创建文件
- touch 文件名:创建一个新的文件。如 touch a.txt。
- touch 文件名1 文件名2…:同时创建多个文件。如 touch ok1.txt ok2.txt。
- cp:拷贝文件或目录
- cp 源文件路径a.txt 目的文件路径B:将文件a.txt拷贝到B目录下。
- cp -r 源目录A 目的目录B:将目录A拷贝到B目录下。
- cp -r 源目录A 目的目录B:将目录A拷贝到B目录下,会强制覆盖目的目录下已存在的相同文件。
- rm:删除文件或者目录
- rm -r 指定目录:递归删除目录及其下面所有的文件或目录。删除时有提示信息,输入y或者n进行是否删除的选择。
- rm -rf 指定目录:强制删除目录下所有的文件或目录,删除时没有任何提示信息。
- mv:移动/重命名指定文件或者目录
- mv 指定文件名 新的文件名:将指定文件名进行重命名。
- mv 指定文件目录 目的文件目录:将指定文件或者目录剪切到目的文件目录。
- cat:查看文件内容
- cat 指定文件:以只读的方式查看指定的文件内容。
- cat 指定文件 | more:以分页的形式查看指定文件内容。后续按空格键以一页的大小进行输出,按回车键以一行的大小进行输出。
- more:一个文本过滤器。以一页的大小显示文本内容。语法:more 指定文件。进入该模式后有以下快捷键。
- 空格:以一页的大小进行输出。
- 回车:以一行的大小进行输出。
- q:停止more的内容输入,即退出该模式。
- ctrl+B:向上滚动一页内容。
- ctrl+F:向下滚动一页内容。
- =:输出当前行号
- :f:输出文件名及当前行号
- less:显示文件内容。它不是一次将整个文件加载之后才显示,而是根据需要加载内容。具体操作与more指令类似。
- ‘>‘和’>>’:
- 指令 > 文件:将指令所得的结果覆盖写入到指定文件中。
- 指令>>文件:将指令所得的结果追加写入到指定文件中。
- echo “内容”>>文件:将内容追加写入到指定文件中。
- echo:输出内容到控制台
- head:输出文件头部内容
- head -n 5 文件名:输出指定文件内容的前5行
- head 文件名:输出指定文件内容的前10行(默认10行)。
- tail:输出文件头部内容
- tail -n 5 文件名:输出指定文件内容的后5行。
- tail 文件名:输出指定文件内容的后10行(默认10行)。
- tail -f 文件名:输出指定文件内容的10行,且对该文件进行监控,如果该文件内容发生变化,则会输出变化的内容。
- ln:符号链接,软链接。
- ln -s 原文件/目录 软链接名:给原文件创建一个软链接
- rm -rf 软链接名:删除软链接。
- 当我们使用软链接时,其工作目录仍然在软链接所在目录下。
- history:查看已经执行过的历史指令,也可以执行历史指令
- history:显示所有的历史指令
- history n:显示最近的n条指令
- !n:执行历史指令编号为n的指令
5. 时间日期
- date:显示当前日期
- date:显示当前时间
- date “+%Y”:显示当前年份(4位数)
- date “+%y”:显示当前年份(2位数)
- date “+%m”:显示当前月份
- date “+%d”:显示当前是哪一天
- date “+%Y-%m-%d %H:%M:%S”:显示年月日时分秒
- date -s 字符串时间:设置时间
- cal:查看日历时间
- cal:显示本月日历
- cal 2020:显示2020年一整年的日历
6. 搜索查找
-
find:将从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端。
-
find 指定目录 -name 指定文件名:查找指定目录下指定name的文件。显示给终端的结果是指定文件名的路径。没找到的话,则什么都不显示。
1. find 指定目录 -name *.txt:利用通配符查找名称后缀是txt的文件。
-
find 指定目录 -user 指定用户名:查找指定目录下指定用户所拥有的文件。显示给终端的结果是所有的文件名的路径。没找到的话,则什么都不显示。
-
find 指定目录 -size (-nM/nk/+nM):查找指定目录下大小小于nMB/等于nkB/nMB的文件。显示给终端的结果是指定文件名的路径。没找到的话,则什么都不显示。
注意:M是大写,k是小写,-代表小于,+代表大于。
-
-
locate:快速定位文件路径。原理:在事先建立好的文件系统locate数据库进行查找。
1. 第一次使用前必须运行updatedb进行数据库更新。 2. locate 文件名:得到指定文件名的文件路径。
-
grep:过滤查找。
1. “|”:管道符,将前一个命令的处理结果输出传递给后面的命令处理。 2. cat 指定文件 | grep -n 指定字符:在指定文件中查找指定字符并显示行号。 3. cat 指定文件 | grep -i 指定字符:在指定文件中查找指定字符,不区分大小写。 4. cat 指定文件 | grep -ni 指定字符:在指定文件中查找指定字符并显示行号,不区分大小写。
7. 压缩和解压缩
-
gzip和gungzip
- gzip 文件名:对指定文件进行压缩,结果是:指定文件消失,变成文件名.gz。
- gunzip 文件名:对指定的文件(该文件是.gz类型的)进行解压缩,结果是:指定文件消失,解压成原文件。
-
zip和unzip
- zip -r 文件名.zip 指定文件或目录:对指定的文件或目录递归压缩成.zip文件。
- zip -d 指定目录 指定文件:对指定文件(该文件是.zip类型)解压到指定的目录。
-
tar:打包指令,最后生成的文件是.tar.gz文件类型
-
tar [选项] xxx.tar.gz 打包的内容:打包目录,压缩后的文件各式是.tar.gz。
选项说明:
- -c:产生.tar打包文件
- -v:显示详细信息
- -f:指定压缩后的文件名
- -z:打包同时压缩
- -x:解压.tar文件
-
tar -zcvf xxx.tar.gz 文件名1 文件名2:将文件1和文件2压缩成xxx.tar.gz。
-
tar -zcvf xxx.tar.gz 目录:将一整个目录压缩成xxx.tar.gz文件。
-
tar -zxvf xxx.tar.gz :将xxx.tar.gz文件解压到当前目录。
-
tar -zxvf xxx.tar.gz -C 指定目录:将xxx.tar.gz文件解压到指定目录。该目录必须存在。
-
8. 组管理
-
ls -ahl:查看文件的所有者、所在组,具体分别在第三列、第四列。
-
chown 用户名 文件名:将文件的拥有者改为指定用户名。
当某个用户创建了一个文件,默认该文件所在组就是该用户所在组。
-
chgrp 组名 文件名:将指定的文件所在组修改为指定的组名。
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组。
-
usermod -g 组名 用户名:将指定用户修改为指定组。
9. 权限管理
- rwx的意义
- 作用到文件上
- r:可读取,可查看。
- w:可以修改。
- x:可执行。
- 作用到目录上
- r:可读取,ls查看内容
- w:可修改,目录内创建+删除+重命名
- x:可进入该目录
- 对应的数值
- r=>4
- w=>2
- x=>1
- rwx=>7 rw=>5 x=>1
- 作用到文件上
- 修改权限
- chmod u=rwx,g=rx,o=x 文件目录名:分别给所有者、所在组、其他组设置权限。
- chmod o+w 文件目录名:给其他组增加读的权限。
- chmod a-x 文件目录名:给所有用户去除执行的权限。
- chmod 751:作用同a。
- 修改文件所有者
- chown 用户名 文件目录名:将指定文件或者目录的权限给指定用户。
- chown -R 用户名 文件目录名:将目录及目录下所有文件或目录的权限给指定用户。
- chgrp 组名 文件目录名:将指定的文件所在组修改为指定的组名。
- chgrp -R 组名 文件名:将指定的目录及目录下所有文件或者目录的权限修改为指定的组名。
10. 任务调度
- crontab -e:进入定时任务的设置文件,进行代码编写。
- 代码格式:时间+脚本内容。
- 时间格式:* * * * *分别代表分钟、小时、天、月、周几。比如
- */n * * * *:每n分钟执行一次。
- 0 8,12,16 * * * *:代表每天的8时,12时,16时整执行一次。
- 0 5 * * * 1-6:代表从周一到周六的每天5点整执行一次。
- crontab -r:终止任务调度。
- crontab -l:列出当前有哪些任务调度。
- service crond restart:重启任务调度。
11. 磁盘分区
- 两种分区
- mbr:
- 最多支持四个分区
- 系统只能安装在主分区
- 扩展分区要占一个分区
- mbr最多只支持2TB,但拥有最好的兼容性
- gtp:
- 支持无限多个主分区
- 最大支持18EB的大容量
- windows7 64位以后支持gtp
- mbr:
- linux磁盘分区
- lsblk -f:查看系统分区详情。(不写后面的-f也可以查看大致基本信息)
- 为虚拟机增加一块硬盘
- 虚拟机添加硬盘(在vm上操作,依次点击虚拟机->设置->硬盘(SCSI)->添加->下一步->下一步->下一步->下一步->完成->确定)
- 分区 fdisk /dev/sdb
- 格式化 mkfs -t ext4 /dev/sdb1
- 挂载 先创建一个新的文件夹 /home/newdisk ,挂载 mount /dev/sdb1 /home/newdisk。此操作是临时挂载,重启关机之后会失效
- 永久挂载:vim /etc/fstab编辑该文件,添加新的挂载命令。
- ext4是一种分区类型。
- 卸载:在非卸载磁盘外执行 umount 磁盘所在路径(/dev/sdb1)或者磁盘挂载的工作路径(/home/newdisk) 即可。
- 磁盘情况查询
- df -lh:查询系统整体磁盘使用情况
- du -h /目录:查询指定目录占用的大小情况,参数情况:
- -s:指定目录占用大小汇总
- -h:带计量单位
- -a:含文件
- –max-depth=1:子目录深度
- -c:列出明细的同时,增加汇总值
- 统计/home目录下的指定文件:
- 文件数目:ls -l /home | grep “^-” | wc -l
- 目录数目:ls -l /home | grep “^d” | wc -l
- 文件夹下文件个数(包括子文件夹里的):ls -lR /home | grep “^-” | wc -l
- 文件夹下目录个数(包括子文件夹里的):ls -lR /home | grep “^-” | wc -l
12. 网络配置
- 自动获取
- 操作步骤:在虚拟机内部依次点击系统->首选项->网络连接->System eth0->编辑->自动连接。
- 缺点:每次获取的ip可能会变化。
- 指定固定的ip
- 操作:直接修改配置文件来指定ip。编辑/etc/sysconfig/network-scripts/ifcfg-eth0
- 查看系统网络情况netstat
- netstat
- netstat -an:按一定顺序排列输出
- netstat -p:显示哪个进程在调用
- 一般直接用netstat -anp。
- netstat
13. 进程管理
- ps:查看进程
- 字段
- PID:进程识别号
- TTY:终端机号
- TIME:此进程所消耗CPU的时间
- CMD:正在执行的命令或进程名
- 指令
- ps -a:显示当前终端的所有信息
- ps -u:以用户的格式显示进程信息
- ps -x:显示后台进程运行的参数
- 一般使用ps -aux | more
- ps -aux | grep xxx:查看xxx服务相关的进程。
- ps -ef:查看带有父进程(PPID)的进程信息。e代表所有进程信息,f代表全格式。
- 进程树
- pstree:以树的形式打印进程信息,直观地查看进程信息
- -p:显示进程的PID
- -u:显示进程的所属用户
- pstree:以树的形式打印进程信息,直观地查看进程信息
- 字段
- kill/killall:终止进程
- kill [选项] 进程号:通过进程号杀死进程
- 选项:-9代表强迫进程立即停止
- killall 进程名称:通过进程名称杀死进程,支持通配符
- kill [选项] 进程号:通过进程号杀死进程
- 动态监控进程
- top
- top:显示所有信息,每3s更新一次
- 再输入u:输入用户名即可查找对应用户所有的进程。
- 再输入k:输入指定进程号即可杀死对应进程。
- top -d 10:显示所有信息,每10s更新一次。
- top -i:使top不显示任何闲置或者僵死进程。
- top -p:通过指定监控进程ID来仅仅监控某个进程的状态。
- top:显示所有信息,每3s更新一次
- 交互操作
- P:以CPU的使用率进行排序,默认就是这个选项。
- M:以内存的使用率排序。
- N:以PID排序。
- q:退出top。
- top
14. 服务管理
-
守护进程:通俗的讲,即为在后台运行的进程。
-
管理指令
- service 服务名 [start | stop | restart | reload | status]
- centos7以后用systemctl代替service。
-
查看服务
- ls -l /etc/init.d/,显示系统中的所有服务。
- 输入setup,选择系统服务,显示服务。其中前缀带*的代表开机就会自动启动。
-
服务的运行级别
- vi /etc/inittab:在inittab的文件中修改默认级别(id),默认是5。
-
系统开机流程
开机->BIOS->/boot->init进程1->运行级别->运行对应级别的服务
-
chkconfig指令
- chkconfig --list:显示所有服务在各个运行级别下是否运行的信息。
- chkconfig 服务名 --list:显示指定服务名在各个运行级别下是否运行的信息。
- chkconfig --level 5 服务名 on/off:改变某个服务在某个运行级别下是否运行的状态。
15. 软件包管理
-
RPM包管理
-
介绍
一种用于互联网下载包的打包及安装工具。它生成具有.RMP扩展名的文件。类似windows的setup.exe。
-
简单查询
- rpm -qa | grep xx:查询xx是否已经安装。
- rpm -qa:查询所安装的所有rpm软件包
- rpm -q 软件包名:查询软件包是否安装
- rpm -qi 软件包名:查询包信息
- rpm -ql 软件包名:查询软件包所有安装的文件路径
- rpm -qf 文件名:查询文件属于哪个软件包
-
实操
- rpm -e (–nodeps) RPM包名:删除指定的RPM包,加–nodeps会强制删除。
- rpm -ivh RPM软件包路径:安装指定路径下的RPM软件包。
-
-
YUM包管理(前提是联网)
-
介绍
是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的软件包。
-
常用指令
- yum list | grep xx:查询yum服务器是否有xx软件
- yum install xxx:下载安装指定的yum包
-
四. Linux实战
1. JavaEE环境配置
2. 大数据环境配置
####1.Shell编程
-
什么是Shell?
shell是一个命令行解释器,为用户提高一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。
-
shell脚本格式要求
- 以#!/bin/bash开头(以bash的方式进行解释)
- 脚本需要有可执行权限
-
shell脚本常用的执行方式
- 方式一
- 首先用chmod给shell文件分配可执行的权限
- 用相对路径或者绝对路径执行该文件
- 方式二
- 直接输入 sh+shell文件路径即可。
- 方式一
-
Shell变量
-
系统变量
比如$+“HOME”、“PWD”、“SHELL”、"USER"等等。
-
用户自定义变量
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量,注意:不能unset。
-
显示当前shell所有变量:直接输入set
-
定义变量的规则
- 变量名称可以由字母、数字和下划线组成,不能以数字开头。
- 等号两侧不能有空格
- 变量名称一般习惯为大写
-
将命令的返回值赋给变量
- A = 'ls-la’反引号,运行里面的命令,将结果返回给变量A
- A =$(ls-la)等价于反引号
-
-
设置环境变量
- export 变量名=变量值:将shell变量输出为环境变量
- source 配置文件:刷新配置文件,让修改后的配置信息立即生效
- echo $变量名:查询并输出变量的值
-
位置参数变量
- 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
- 基本语法
- $n:n为数字,0代表命令本身,1-9代表第一个到第九个参数,十以上的参数需要用大括号包含。比如¥{10}。
- $*:代表命令行中所有的参数,把所有参数看成一个整体。
- $@:代表命令行中所有的参数,不过把每个参数区分对待。
- $#:代表命令行中所有参数的个数。
- 验证
- 首先输入执行命令:比如./myshell.sh 67 89
- 则有两个参数和命令本身
- $0 =>./myShell.sh
- $1=>67
- $2=>89
-
预定义变量
-
什么是预定义变量
shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
-
基本语法
- $$:当前进程的进程号PID
- $!:后台运行的最后一个进程的进程号PID
- $?:最后一次执行的命令的返回状态,如果这个变量值为0,证明上一个命令正确执行,如果为非0,则证明上一个命令执行不正确。
-
其他
- myshell.sh &:在可执行的sh文件后添加&,使得该脚本在后台运行。
-
-
运算符
- $((运算式))
- $[运算式]:此法多推荐使用
- expr m - n:减
- expr m + n:加
- expr m \* n:乘
- expr m / n:除
- expr m % n:取余
-
流程控制
-
if then语法
-
if [条件判断] ;then 程序 fi。
-
if [条件判定]
then
程序
elif[条件判断]
then
程序
fi
-
-
case语法
case 变量 in
“条件1”)
程序
;;
“条件2”)
程序
;;
*)
程序
;;
esac
注意:"*)"代表其他情况
-
for语法
-
语法一
for 变量 in 值1 值2 值 3…
do
程序
done
注意:此处可以区别==$*和$@的作用==
-
语法二
for((初始值;循环控制条件;变量变化))
do
程序
done
注意:此处循环控制条件直接用<=>三种符号进行大小判断
-
-
while语法
while [条件判断式]
do
程序
done
注意:循环控制条件和条件判断式的区别
-
循环控制条件
直接使用< > =
-
条件判断式
注意空格,中括号与里面的式子两边都有空格。while与中括号也有空格。
-
-
-
条件判断
- 整数的比较
- =:字符串比较
- -lt:小于
- -le:小于等于
- -eq:等于
- -gt:大于
- -ge:大于等于
- -ne:不等于
- 按照文件权限进行判断
- -r:有读的权限
- -w:有写的权限
- -x:有执行的权限
- 按照文件类型进行判断
- f:文件存在并且是一个常规的文件
- e:文件存在
- d:文件存在并且是一个目录
- 整数的比较
-
read读取控制台输入
-
语法
read(选项)(参数)
-
选项
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。
参数:即变量名。指定读取值得变量。
-
例子
read -t 10 -p “your input is” NUM
echo “your input is $NUM”
-
-
shell系统函数
-
介绍
shell编程和其他编程语言一样,有系统函数,当然我们也可以自定义函数。
-
两个常用的系统函数
-
basename
-
返回完整路径最后/得部分,常,用于获取文件名。
-
basename[pathname][suffix]
basename[string][suffix]
:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
-
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
-
实践
输入命令basename /root/shell/my.sh .sh
结果:my
输入命令basename /root/shell/my.sh
结果:my.sh
-
-
dirname
-
返回完整路径最后/的前面的部分,常用于返回路径部分。
-
dirname 文件绝对路径:从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录部分)。
-
实践
dirname /root/shell/my.sh
结果:/root/shell
-
-
-
-
自定义函数
-
基本语法
-
定义:[function]funname[()]
{
Aciton;
[return int;]
}
-
调用
直接写函数名:funname
-
-
本文参考b站尚硅谷Linux教程视频,做的一个粗略的笔记,仅供参考