GNU/Linux学习笔记
一、Linux概述
1、Unix来源:
2、Linux来源:3、Unix和Linux关系:4、安装:一般都安装在Windows虚拟机Vmware上,傻瓜式安装。
二、重要知识点
1、网络链接的三种模式:
2、Linux世界里,一切皆文件。
3、绝对路径和相对路径:
三、常用指令与功能
1、目录结构
- /bin (/usr/bin、/usr/local/bin)存放经常使用的命令
- /sbin (/sur/sbin、/usr/local/sbin) 存放系统管理员使用的系统管理程序。
- /home 存放普通用户的主目录,Linux中每个用户都有自己的目录,以用户账号命名。
- /root 系统管理员的主目录。
- /lib 系统开机所需的动态共享库。
- /etc 所有系统管理所需的配置文件和子目录,如安装mysql数据库my.conf。
- /usr 存放用户的应用程序和文件,功能类似window下的program files。
- /opt 存放主机额外安装软件所安装的目录。一般通过编译源码的方式安装程序。
2、远程登陆到Linux
- 公司开发场景:
一般是小组成员共享开发,项目运行在公网上,程序员需要远程登录到Linux进行管理和开发;常用工具有:Xshwll6(windows远程登录到公司的服务器,操作)、Xftp6(远程在服务器上传、下载文件)
3、Vim编辑器
Linux系统内置Vi编辑器,vim是vi的增强版
-
vim的三种模式:
- 正常模式:以vim打开一个文档就可进入,如vim hello.java ,使用【上下左右】按键移动光标,可以【删除字符】或【删除整行】也可以【复制、粘贴】文件内容
- 插入模式:要对文本进行编辑,输入i即可。
- 命令行模式:输入esc再输入:即可。该模式可以读取、保存、替换、离开vim、显示行号等。
- 各模式切换图:
-
常用快捷键:
4、关机&重启
shutdown -h now 立刻关机
shutdown -h 1 "hello,1分钟后会关机了"
shutdown -r now 重启
halt 关机
reboot 重启
sync 把内存数据同步到磁盘(建议关机前先运行此命令)
5、用户登录&注销
- 超级用户:root;如何由普通用户切换到root:“su - root”
- 注销:logout
6、用户&用户组管理
(1)用户
- 添加账户: useradd 用户名(此时默认在家目录创建用户); user -d 指定目录
- 指定/修改密码:passwd 用户名;
- 显示当前用户所在目录:pwd;
- 删除用户:userdel 用户名(删除用户但保留用户家目录);userdel -r 用户名(删除家目录及其用户)
- 查询用户信息:id 用户名;
- 切换用户:su - 切换用户名
- 查看当前用户/登录用户:who am i
(2)用户组
- 概念:系统对有共性\权限的多个用户进行统一管理。一般建立用户时,默认和建立者的组一致。
- 新增组:groupadd 组名;
- 删除组:groupdel 组名;
- 为用户分配组:useradd -g 组名 用户名
- 更改用户所在组:usermod -g 新组名 用户名
7、实用指令
(1)运行级别
0:关机;
1:单用户【找回丢失密码】;
2:多用户状态没有网络服务;
3:多用户状态有网络服务(非图形化界面,常用);
4:系统未使用保留给用户;
5:图形界面(与3切换使用);
6:系统重启;
- 指令切换:init [123456]
(2)ls指令
ls [选项] [目录或文件]
- 常用选项:-a:显示所有文件和目录,包括隐藏目录 ; -l :以列表的方式显示
(3)cd指令
-
cd ~或者cd : 回到自己的家目录,如你是root,cd~到 /root
-
cd… 回到当前目录的上一级目录
(4)创建目录mkdir
- 创建一个目录:mkdir /home/dog
- 创建多级目录:mkdir -p /home/animal/tiger
(5)删除空目录rmdir
- 删除空目录:rmdir /home/dog
- 删除非空目录:rm -rf /home/animal
(6)创建文件touch
touch 文件名
- touch hello.txt
(7)复制cp
- 复制文件:cp 要复制的文件 目标文件夹
- 复制文件夹:cp -r 要复制的文件夹 目标文件夹(系统不提示:\cp -r 要复制的文件夹 目标文件夹)
(8)移动或重命名mv
- 重命名:mv 旧文件名or目录名 新文件名or目录名
- 移动:mv 要移动的文件or目录地址 目标文件or目录地址
- 例1:将/opt/bbb移动到home/下:mv /opt/bbb /home/
- 例2:将hello.txt重命名为Hello.txt:mv hello.txt Hello.txt
(9)删除文件或目录rm
- 删除文件:rm 文件
- 删除文件夹(目录):rm -rf 非空或空文件夹
(10)查看文件内容cat
- cat -n 要查看的文件(-n:显示行号)
- 细节:1、cat只能浏览文件,而不能修改。2、一般会加上管道命令|more
- 例:查看文件:cat -n /etc/profile | more[进行交互](交互指令看(11)的表格)
理解:"|"表示将前面的命令结果交给后面的命令处理,cat执行后一般是将全部内容都显示出来了,而more可以对文档进行交互操作
(11)查看文件内容more
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。nore 指令中内置了若干快捷键(交互的指令),详见操作说明
- 语法:more 要查看的文件 (如more /etc/profile)
操作说明:
(12)查看文件内容less
less 指令用来分屏查看文件内容,它的功能与more 指令类似,但是比 more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
- 语法:less 要查看的文件
操作说明:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7uFYtbn-1632659510687)(https://i.loli.net/2021/04/25/RL9N1mWvoJKiZ7M.png)]
(13)查看文件的三种指令对比
cat和more结合使用最好,能够看到行号,切适用于小型文档查看。less适合查看大型文档。
(14)输出内容到控制台echo
- 语法:echo 内容
(15)查看文件开头内容head
- 语法:head 文件(默认查看前10行内容)
- head -n 5 文件(查看头5行内容,5可以是任意数字)
(16)查看文件尾部内容tail
- 语法:tail 文件(默认查看尾10行内容)
- tail -n 5 文件(查看尾部5行内容,5可以是任意数字)
- tail -f 文件 (实时追踪文档的所有更新)
(17)输出重定向>和追加>>
- 语法:ls -l >文件 (功能:将列表内容写入文件a.txt中,覆盖写)
- ls -al >> 文件 (功能:将列表所有内容追加到文件aa.txt的末尾)
- cat 文件1 > 文件2 (功能:将文件1的内容覆盖到文件2,cat是查看内容)
- echo “内容” >> 文件(追加)
- 将当前日历信息追加到文件b.txt:cal >>b.txt
(18)软链接ln
- 语法:ln -s [原文件或目录] [软连接名] (功能:给原文件或文件夹创建一个软连接,相当于快捷方式)
- 例:在/home下创建软连接myroot,链接到/root目录:ln -s /root /home/myroot
(19)查看历史指令history
- 语法:history (功能:查看已执行过的命令)
- 注:history 10 (显示最近使用过的10各命令)、!5(执行历史编号为5的指令)
(20)时间日期类date
查看日期:
- date (显示当前时间)
- date + %Y(显示当前年份)
- date + %m(月份)
- date + %d(哪一天)
- date “+%Y-%m-%d %H:%M:%S”(显示年月分妙)
设置日期:
- date -s 字符串时间
- 例:设置时间为2020-11-03 20:02:10 ——date -s “2020-11-03 20:02:10”
- cal查看当前日历,cal 2020查看2020年日历
(21)查找指令find
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
- 语法:find [搜索范围] [选项],选项有以下选择:
- 例:按照名字查找/home下的hello.txt:find /home -name hello.txt
(22)查找指令locate
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
- 语法:locate 搜索文件
- 例:请使用locate指令快速定位hello.txt文件所在目录:locate hello.txt
- which 指令,可以查看某个指令在哪个目录下,比如 ls指令在哪个目录:which ls
(22)过滤查找文件内容指令grep
用于查找文档内容,过滤查找,一般结合cat查看文件和管道命令“|”使用,管道符“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
- 语法:grep -n 查找内容 源文件(显示行号)
- 语法:grep -i 查找内容 源文件(忽略大小写)
- 例:在hello.txt中查找“yes”所在行,显示行号:
-
- 写法1:cat /home/hello.txt | grep “yes”
- 写法2:grep “yes” /home/hello.txt
(23)压缩解压文件gzip和gunzip
- 语法:gzip 文件(压缩,得到*.gz文件)
- 语法:gunzip 文件 (解压)
(24)压缩解压文件或目录zip和unzip
- 压缩:
- 语法1:zip XXX.zip 要压缩的文件、语法2:zip -r XXX.zip 要压缩的目录(xxx为指定压缩后的名字)
- 解压:
- 语法1:unzip XXX.zip、语法2:unzip -d 解压后存放的目录(-d表示指定解压后的目录)
(25)压缩解压tar.gz文件指令tar
tar指令是打包指令,最后打包后的文件是.tar.gz 的文件
- 压缩:
-
tar -zcvf XXX.tar.gz 要打包的内容
-
例:将/home/pig.txt和 /home/cat.txt压缩成pc.tar.gz
-
- tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
- 解压:
- 语法1:tar -zxvf 要解压的文件(*.tar.gz)
- 语法2:tar -zxvf 要解压的文件 -C 解压后存放目录(-C表示指定解压目录)
- 例1:将pc.tar.gz解压到当前目录
-
- tar -zxvf pc.tar.gz
- 例2:将pc.tar.gz解压到/opt/tmp2
-
- tar -zxvf pc.tar.gz -C /opt/tmp2
(26)三种压缩解压对比
- gzip/gunzip用于文件,压缩得到的文件为*.gz
- zip/unzip用于单个文件或单个目录(压缩目录:zip -r …、指定解压存放位置:unzip -d …)得到*.zip文件
- tar指令用于压缩多个文件和多个目录,压缩得到*.tar.gz,指定解压存放位置时用 -C
四、组管理和权限管理
1、Linux组的基本介绍
每个用户必须属于一个组,不能独立于组外。一般建立用户时默认添加到用户名相同的组,组之间可以互相转换,同一个组内的成员之间的权限是不同的。一般谁创建了该文件,谁就是该文件的所有者,且该文件与所属者属于同一个组。下图理解:
(1)查看文件所有者
- 指令:ls -ahl
(2)修改目录/文件所有者
- 修改文件/目录所有者指令:chown 新用户名 文件名/目录名(root下,此操作只会更改目录或文件的所有者,但不会更改该目录里面的文件的所有者,实在不懂就去跑跑看)
- 修改目录下所有文件所有者指令:chown -R 新用户名 目录名
- 例1:请将/home/abc.txt文件的所有者修改成tom
-
- chown tom /home/abc.txt
- 例2:请将/home/test目录下所有的文件和目录的所有者都修改成tom
-
- chown -R tom /home/test
(3)创建和修改组
- 创建组:groupadd 组名
- 创建用户并且把用户放在组中:useradd -g 组名 用户名
- 修改用户所在组:usermod -g 新组名 用户名
- 查看组:ls -ahl
- 修改文件/目录所在组:chgrp -g 新组名 文件/目录名
(4)权限的基本介绍rwx
- 查看权限命令:ls -l 或者ll
0-9位说明:
- 第0位确定文件类型(d,- , i , c , b)
- -是文件
- I是链接,相当于windows的快捷方式
- d是目录,相当于windows的文件夹
- c是字符设备文件,鼠标,键盘
- b是块设备,比如硬盘
- 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
- 第4-6位确定所属组(同用户组内的其他成员)拥有该文件的权限,—Group
- 第7-9位确定其他用户(其他组内的成员)拥有该文件的权限—Other
(5)rwx权限详解
- rwx作用到文件
1)[ r ]代表可以读(read):可以读取、查看
2)[ w ]代表可写(write):可以修改但是不代表可以删除文件,删除一个文件的前提条件是对该文件所在的目录有写权
3)[ x ]代表可执行(excute):可以被执行
- rwx作用到目录
1)[ r ]代表可读(read):可以读取,ls查看目录内容
2)[ w ]代表可写(write):可以修改,对目录内创建+删除+重命名目录
3)[ x ]代表可执行(execute);可以cd进入该目录
- 详细讲解案例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-npNvcobS-1632659510694)(https://i.loli.net/2021/04/26/hBT9DygUJsF3K6x.png)]
- 可以用数字表示为:r=4,w=2,x=1,因此,rwx=4+2+1=7可以任意组合。
(6)修改权限chmod
方法一:用+、-、=来表示:
u : 所有者 g : 所有组 o : 其他人 a : 所有人(u、g、o的总和)
-
命令:chmod u=rwx,g=rx,o=x 文件名/目录名(如果要同时修改权限,逗号不能掉)
-
例1:给abc文件的所有者读写执行权限,给所在组读和执行权限,给其他组执行权限
-
- chmod u=rwx , g=rx , o=x abc
-
例2:给abc文件的所在组添加写权限,给其他组去掉执行权限
-
- chmod g+w,o-x abc
方法二:用数字表示
r=4,w=2,x=1 rwx=4+2+1=7
- chmod u=rwx,g=rx,o=x 文件/文件名 相当于chmod 751 文件/文件名
- 例:将/home/abc.txt文件的权限修改成rwxrw-r-x,使用给数字的方式实现:
-
- chmod 765 /home/abc.txt
五、定时任务调度
1、定时重复调度(crond)
- crontab -e 开始一个定时任务
- crontab -l 列出当前所有任务调度
- crontab -r 删除/终止所有任务
(1)步骤:
-
设置任务调度文件:/etc/crontab
-
设置个人任务调度:执行crontab -e
-
输入调度信息:如:*/1 * * * * ls -l /etc/ > /tmp/to.txt (意思是每隔1分钟执行一次:ls -l /etc/ > /tmp/to.txt命令)
-
五个占位符说明:上例中*/是特殊符号,代表每隔多久执行一次。其他星号之间有空格。
- 特殊符号:
- 相关案例:
2、定时单次调度(atd)
(1)格式
-
at 【选项】 【时间】
-
- 【选项】:
-
- 【时间】定义规则:
-
**退出输入模式:**Ctrl +d (两次,结束内容输入,连续两次)
-
示意图:
(2)查看系统中执行的工作任务
- 直接输入:atq
(3)案例
- 案例1: 两天后的下午五点执行 /bin / ls / home
- 案例 2: 明天17点,输出日期到指定文件内,如:/root/date.log
- 案例3:两分钟后输出时间到指定文件内:如/root/date.log
- 案例4:删除编号为4的任务号:atrm 4 //编号为4的job删除。
六、磁盘分区、挂载
(1)查看硬盘信息和挂载情况
- lsblk
- lsblk -f
(2)虚拟机内增加磁盘应用实例
建议直接看视频:[韩顺平学Linux-增加磁盘应用实例]([小白入门 通俗易懂]2021韩顺平 一周学会Linux_哔哩哔哩_bilibili)
(3)磁盘常用指令
- 查看磁盘使用情况:df -h
- 查询指定目录的磁盘占用情况:du -hac --max-depth=1 /opt
注意:/opt代表文件夹,可以换做另外的任意文件夹
(4)磁盘情况-工作实用指令
七、Linux网络配置
(1)修改网络配置
-
在相同的网段才能访问相关网络192.168.2._(才能ping得通)
-
Linux查看网络适配:ifconfig
- Windows查看网络适配:ipconfig
- 查看虚拟网络编辑器和修改ip地址:
- 查看网关:
- 一般linux会自动分配ip,点击下图的ipv4可以查看。
- 到工作环境后,应该用固定ip,需要手动配置固定的ip。
==方法:==修改配置文件vim /etc/sysconfig/network-scripts/ifcfg-ens33,例如要求将ip地址配置成静态的192.168.2.130
-
- ifcfg-ens33文件说明:
-
- 修改以下内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GXaYB4d-1632659510717)(C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20210612112459320.png)]
(2)设置主机名和host映射
1)设置主机名
- 设置 主机名:为了方便记忆,可以给Linux系统设置设置主机名
- 查看主机名指令:hostname
- 修改主机名:vim /etc/hostname
- 重启生效
2)设置host映射
理解:如何通过主机名能够找到(比如ping 名字,而不是IP地址)某个Linux系统?
- 在windows中想要直接通过主机名访问Linux的ip(如:ping xuechaopeng就能达到ping 192.168.2.133 的效果?)
- 在window中C:\Windows\System32\drivers\etc\hosts 文件中直接指定即可:如直接在文件中添加:192.168.2.133 xuechaopeng
- 在Linux中想要直接通过主机名访问Windows的IP地址:
- 在/etc/hosts 文件中指定即可:vim /etc/hosts,例如:192.168.2.1 Lenovo Thinkpad-PC
八、Linux进程管理
(1)查看进程ps -aux
- 指令:ps -aux
- 拓展1:指定查看某个进程: ps -aux |grep xxx
- 拓展2:搭配more查看更高效:ps -aux |more
(2)查看当前所有进程 ps -ef
- 指令:ps -ef ,以全格式查看当前所有进程 (可通过此查看某进程的父子进程)
- 拓展1:指定查看当前某个进程:ps -ef |grep xxx
- 拓展2:搭配more查看更高效:ps -ef |more
(3)终止进程kill & killall
-
指令:kill [选项] 进程号(功能:通过进程号终止进程)
-
常用选项:-9(功能:表示强迫进程立即停止)
-
指令:killall 进程名称 (功能:通过进程名称杀死进程)
-
提示:要终止某个进程之前需要用前面的指令先查看这指令的PID或者名称
-
案例:
(4)查看进程树pstree
-
指令:pstree [选项] 能直观的查看进程信息;
-
常用选项:-p :显示进程的PID -u:显示进程的所属用户
(5)服务(service)管理
(1)管理指令
- 理解:服务本质就是进程,在后台运行,通常会监听某个端口,等待
其他程序请求(比如:mysql,sshd,防火墙等),也称为守护进程。
- 管理指令:service 服务名称 [start|stop|restart|reload|status]
[]括号内表示可以选择的内容,status意思是查看当前状态
-
在CentOS7.0后很多服务不再使用service ,而是systemctl (后面专门讲)
-
service指令管理的服务在/etc/init.d查看
(2)查看服务名
- 方式一:使用指令:setup,有星号的代表开机自启,如果想取消,光标到星号位置点击空格;点击tab键,可以选者退出
- 方式二:/etc/init.d 看到service指令管理的服务 :ls -l /etc/init.d
(3)服务的运行级别(runlevel)
- 三.7中有讲过,平时用的最多的是指令3和5,此处重点说明CentOS7后的运行级别说明:
init 3 == systemctl set-default multi-user.target
init 5 == systemctl set-default graphical.target
- 查看当前默认级别:systemctl get-default
(4)为服务设置自启/关闭chkconfig指令
注意:在CentOS7.0后,很多服务systemctl (后面讲)
-
chkconfig指令的管理服务再/etc/init.d查看
-
用法:
-
- 查看服务:chkconfig --list [|grep xxx]
-
- chkconfig 服务名 --list
-
- chkconfig --level 5 服务名 on/off
-
细节:chkconfig指令设置后需要重启后生效
(5)systemctl管理指令
- 基本语法:systemctl [start|stop|restart|status] 服务名(注意和service对比)
指令管理的服务可以在 /usr/lib/systemd/system查看(当不知道服务叫什么时可以查看,如防火墙之类的)
- systemctl设置服务自启状态
-
例子:查看当前防火墙的状况,关闭和重启防火墙(firewalld.service)
-
- systemctl status; systemctl stop firewalld; systemctl start firewalld
(6)打开或者关闭指定端口
- firewall指令:
(7)动态监控进程top
- top指令与ps指令相似,区别在于top可以自动更新进程运行状况
- 指令:top [选项]
- 常用选项:
- 交互说明:
(8)监控网络状态netstat(常用)
- 语法:netstat [选项]
- 常用选项:-an 按照一定顺序排序输出; -p 显示哪个进程在调用
- 例子:请查看服务名为sshd的服务信息
-
- netstat -anp |grep sshd
(9)检测主机连接命令ping
用于检测远程主机是否正常,或者是两部主机间的网卡网线故障,如:ping 对方ip地址。
九、RPM和YUM
(1)RPM包管理
-
介绍:rpm类似于windows的setup.exe,从网上下载rpm包后,就可以通过指令在本地查看和安装。
-
RPM包简单查询
-
- 查询已安装的rpm列表:rpm -qa
-
- 如:查看当前系统是否安装了Firefox:rpm -qa | grep firefox
-
包名的基本格式:
-
其他指令:
-
- rpm -qa:查询所有安装的rpm软件包
-
- rpm -qa | more
-
- rpm -qa | grep xxx
-
- rpm -q 软件包名 :查询软件包是否安装(如:rpm -q firefox,不用写全)
-
- rpm -qf 文件全路径名:查询文件所属的软件包(如:rpm -qf /etc/passwd:表示查询passwd文件属于哪个rpm包)
-
- 安装rpm软件包:rpm -ivh 软件包路径名称(其中:i=install【安装】; v=verbose【提示】;h=hash【进度条】 ,例如安装firefox:rpm -ivh /opt/firefox)
-
- 卸载rpm在软件包:rpm -e 软件包名称(若提示错误,可以强制删除:rpm -e --nodeps 软件包名称)
(2)YUM包管理
- 介绍:yum是一个shell前端软件包管理器,基于rpm包管理,能够从指定服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有的软件
- 指令:yum list | grep xxx(先查询服务器是否有需要安装的xxx软件包)
- yum install xxx(然后再直接安装)
十、JDK,tomcat,IDEA,mysql的安装
官网上下载以下软件对应的Linux版本,视频:韩顺平30天学JAVA良心推荐!!!
(1)JDK安装
(2)tomcat安装
(3)idea2020安装
(4)mysql5.7安装
- 新建文件夹/opt/mysql,并cd进去
- 运行wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar,下载mysql安装包 PS:centos7.6自带的类mysql数据库是mariadb,会跟mysql冲突,要先删除。
- 运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
- 运行rpm -qa|grep mari,查询mariadb相关安装包
- 运行rpm -e --nodeps mariadb-libs,卸载
- 然后开始真正安装mysql,依次运行以下几条 rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
- 运行systemctl start mysqld.service,启动mysql
- 然后开始设置root用户密码 Mysql自动给root用户设置随机密码,运行grep "password /var/log/mysqld.log可看到当前密码
- 运行mysql -u root -p,用root用户登录,提示输入密码可用上述的,可以成功登陆进入mysql命令行
- 设置root密码,对于个人开发环境,如果要设比较简单的密码(生产环境服务器要设复杂密码),可以运行 set global validate_password_policy=0; 提示密码设置策略 (validate_password_policy默认值1,)
- set password for ‘root’@‘localhost’ =password(‘123123abc’); //123123abc
- 运行flush privileges;使密码设置生效, (笔记:我自己已改为123123abc )
- 测试密码登录使用:mysql -u root -p
十一、SHELL编程
- 简介:shell是一个命令行解释器,为用户提供一个向Linux内核发送请求以便于运行程序的界面运行级程序,用shell来启动、挂起、停止或者编写程序等。
(1)Shell脚本的运行方式
-
脚本开头必须以下面代码开头:
#!/bin/bash
-
需要有执行权限(具有相应的x权限)
(2)Shell脚本的执行方式
-
方式一:输入脚本的相对路径或者绝对路径(需要有相应的执行权限,如: ./hello.sh或者/root/shcode/hello.sh)
-
方式二:直接使用sh+脚本名称(不需要有x权限,直接执行即可,如:sh hello.sh,当然也能使用其相对路径)
(3)编写第一个Shell脚本
- 需求:创建一个shell脚本,输出hello world!
vim hello.sh #创建一个.sh文件,输入i开始编辑,vim用法
#!/bin/bash
echo "hello world!" #echo表示输出内容到屏幕,前面有学过
#wq保存后,命令行执行./hello.sh即可输出内容。
(4)Shell变量的定义
-
基本语法:
-
- 定义变量:变量名=值(等号两边不能有空格)
-
- 撤销变量:unset 变量
-
- 声明静态便变量:readonly 变量(注意:不能unset)
-
举例:
#案例1:定义变量A
#案例2:撤销变量A
#案例3:声明静态变量 B=2,不能unset
#!/bin/bash
A=100 #案例1:定义变量A
echo A=$A #输出或者使用变量时要加上$,输出A=100
echo "A=$A" #和上面输出效果相同
unset A #案例2:撤销变量A
echo A=$A #输出:A=
readonly B=2 #案例3:声明静态变量 B=2,不能unset
echo B=$B #输出B=2
unset B #报错
- 其他说明:1)等号两边不能有空格; 2)变量名习惯用大写,规范;3)变量名可以由字母,数字,下划线组成,不能以数字开头;
- 将命令的返回值赋给变量
(5)设置环境变量
- 基本语法
-
export 变量名=变量值(功能:将shell变量输出为环境变量/全局变量)
-
source 配置文件 (功能:让修改后的配置信息立即生效)
3)echo $变量名 (功能:查询环境变量的值)
- 举例:
1)在/etc/profile文件中定义TOMCAT_HOME环境变量
2)查看环境变量TOMCAT_HOME的值
3)在另外一个shell程序中使用TOMCAT_HOME
注意:在输出TOMCAT_HOME变量前,要让其生效:source /etc/profile
- shell脚本的多行注释: :<<! 内容 !
(6)位置参数变量
- n : ( n:( n:(n是数字,$0表示向屏幕输入的指令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 向 屏 幕 输 入 的 参 数 , 十 以 上 用 9代表第一到第九个参数向屏幕输入的参数,十以上用 9代表第一到第九个参数向屏幕输入的参数,十以上用{10},如下图:
- $*:表示命令行中的所有参数(不包括$0,把所有参数看作一个整体)
- $@:和上面一样,表示命令行中的所有参数,但是它是吧每个参数区分对待的
- $#:表示命令行中所有参数个数,详情仔细查看shell代码和输入输出的内容,不行就自己跑一边就懂了。
(7)运算符
- 语法:" ( ( 运 算 式 ) ) " 或 者 " ((运算式))" 或者 " ((运算式))"或者"[运算式]" 或者"expr m + n "
- 注意expr运算符之间都要有空格,如果要将expr的结果赋值给某个变量,则要在整体上加``反引号。
- expr \ *, / , % 乘、除、取余
- 更推荐方法er,其他的方法都要知道即可,仔细分析下面的代码,
#/root/shcode/test04.sh文件夹下
#!/bin/bash
#1、求(10+20)*4的值
#方法一:
sum1=$(((10+20)*4)) #细节:方法一的式子总是要用$(())
echo "sum1 = $sum1"
#方法二:推荐
sum2=$[(10+20)*4]
echo "sum2 = $sum2"
#方法三:注意空格,不推荐
sum=`expr 10 + 20`
sum0=`expr $sum \* 4`
echo "sum3 = $sum0"
#2、求出命令行输出的参数的和
sum4=$[$1+$2]
echo "sum4 = $sum4"
#下图有输出的值:
(8)条件判断
-
基本语法:[ condition ](注意,condition前后必须有空格)
#非空返回true,空返回false
-
案例1:[ CentOs ] 返回true;案例2: [ ] 返回false
-
注意:[ condition ]&&echo OK||echo notok 条件满足执行后面的语句。
-
判断语句汇总:
(1) = | 字符串比较 |
---|---|
(2)两个整数比较 | |
-lt | 小于(little) |
-le | 小于等于(little equal) |
-eq | 等于(equal) |
-gt | 大与(getter) |
-ge | 大于等于 |
-ne | 不等于 |
(3)按照文件权限判断 | |
-r | 有读的权限 |
-w | 有写权限 |
-x | 有执行权限 |
(4)按照文件类型进行判断 | |
-f | 文件存在并且是一个常规文件 |
-e | 文件存在 |
-d | 文件存在并且是一个目录 |
- 案例汇总:
(9)流程控制
(1)if语句:
- 语法:
if[ 条件判断式 ]
then
代码
fi
#或者多分枝代码如下:
if[ 条件判断式 ]
then
代码
elif[ 条件判断式 ]
then
代码
fi
注意[ 条件判断式 ]中前后空格不能省去
- 案例:编写脚本如果输入的参数大与60,则输出”及格了“,小于60输出”不及格“
#!/bin/bash
if [ $1 -ge 60 ] #注意空格,要结合前面的位置参数来用
then
echo "及格了~"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
(2)case语句
- 语法:
case $变量名 in
"值1")
若变量值等于1,则执行程序1
;;
"值2")
若变量值等于2,则执行程序2
;;
....省略其他分支....
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
- 案例:当参数命令是1时,输出“周一”, 是2时,输出“周二”,其他情况输出“other…”
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other.."
;;
esac
(3)for循环
- 语法1:
for 变量 in 值1 值2 值3....
do
程序/代码
done
- 语法2:
for((初始值;循环控制条件;变量变化))
do
程序/代码
done
- 案例1:打印命令行输入的参数(体验 ∗ 和 *和 ∗和#的区别)
- 案例2:打赢输出1到100的整数和
#! /bin/bash
sum=0
for ((i=1; i<=100;i++))
do
sum=$[$sum+$i]
done
echo "总和SUM是:$sum"
(4)while语句
- 基本语法:
while [ 条件判断式子 ]
do
程序/代码
done
#当while[ .... ]为真时,才会执行下面的代码,注意空格
(10)read读取控制台输出
-
语法:read 【选项】 空格 参数
-
选项:-p:指定读取值时的提示符 ; -t :指定读取等待时间,如果没有在指定时间输入,就不再等待
-
参数: 指定读取的变量,直接看案例
-
案例1:读取控制台输入一个NUM1值
-
案例2:10秒内读取控制台输入一个NUM2值
#案例1:读取控制台输入一个NUM1值
#! /bin/bash
read -p "请输入一个NUM1=" NUM1 #注意空格
echo "你输入的NUM1 = $NUM1"
#案例2:10秒内读取控制台输入一个NUM2值
#! /bin/bash
read -t 10 -p "请输入一个NUM2=" NUM2
echo "你输入的NUM2 = $NUM2"
(11)函数
(1)basename基本语法
-
功能:返回完整路径最后 / 的内容,常用于获取文件名。
-
案例:请返回/home/aaa/test.txt的”test.txt“部分
-
- basename /home/aaa/test.txt
(2)dirname基本语法
-
功能:与前面刚好相反,获取最后 / 前面的部分,常用于返回路径部分,
-
案例:找到/home/aaa/test.txt的/home/aaa部分
-
- dirname /home/aaa/test.txt
(3)自定义函数
#语法:
function functionname(){
Action
程序/代码:要返回的值
}
直接调用函数名:functionname 值
#案例:计算输入两个参数的和(动态获取),getSum
#! /bin/bash
function getSum(){
sum=$[$n1+$n2]
echo "输入的和是:$sum"
}
#提示输入两个值:
read -p "请输入一个数:n1 = " n1
read -p "请输入一个数:n2 = " n2
#调用自定义函数:
getSum $n1 $n2
十二、Ubuntu安装及详解
(1)虚拟机安装
(2)root用户介绍
- Ubuntu安装后都是普通用户,并没有root权限,想要有高权限可以用sudo +命令 ,很麻烦,故需要用su root来切换用户,但是初次使用root是没有密码的,需要重新设定再切换才行。方法:
- 输入sudo passwd ,设定root密码;再用su root 再输密码即可切换到root用户。
(3)APT软件管理和远程登录
(1)apt包相关介绍
- apt是Advanced Packaging Tool 的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令进行软件包的安装、删除、清理等,类似于Windows中的软件管理工具。
- 相关指令:
#常用必须掌握:(提示:已经切换到root用户,则可以不用sudo超级权限)
sudo apt-get update #更新源
sudo apt-get install package #安装包
sudo apt-get remove package #删除包
sudo apt-cache show package #获取包的相关信息
sudo apt-get source package #下载该包的源代码
==================================================
#不常用:
sudo apt-cache search package #搜索软件包
sudo apt-get install package --reinstall #重新安装包
sudo apt-get -f install #修复安装
sudo apt-get remove package --purge #删除包,包括配置文件等
sudo apt-get build-dep package #安装相关的编译环境
sudo apt-get upgrade #更新已安装的包
sudo apt-get dist-upgrade #升级系统
sudo apt-cache depends package #了解使用该包依赖那些包
sudo apt-cache rdepends package #查看该包被哪些包依赖
-
更新apt包下载源(国外—>国内配置)
-
- 国内镜像源:清华大学镜像网
- 步骤:
1)备份ubuntu原来的配置文件(sudo cp /ect/apt/sources.list /ect/apt/sources.list .backup );
2)再更改配置文件内容为镜像内容(vi sources.list 删除内容并且粘贴上图左边的内容);
3)更新源地址(sudo apt-get update)
(2)远程登录Ubuntu
-
Windows登录ubuntu(ssh相关介绍)
SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议。
使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。
- ==和CentOS 不一样,Ubuntu默认没有安装SSHD服务(使用netstat 指令查看: apt install net-tools),==可以看到没有相关的端口监听,所以要安装ssh服务器(sshd),执行:sudo apt-get install openssh-server;;安装后执行 service sshd restart 即可打开服务.
- 通过上面步骤即可在windows客户端例如:xshell上登录链接ubuntu
(3)两台Linux互相访问
- 语法:ssh 用户名@IP(如:ssh xcp@192.168.200.131)
- 注意:对于Ubuntu,相应的配置要先设置好(sshd服务器安装配置等)
、
十三、日志管理
(1)日志文件
- 在 /var/log 文件夹下,直接cd打开即可查看文件。
(2)常用日志及意义
depends package #了解使用该包依赖那些包
sudo apt-cache rdepends package #查看该包被哪些包依赖
- 更新apt包下载源(国外—>国内配置)
- - 国内镜像源:[清华大学镜像网](https://mirrors.tuna.tsinghua.edu.cn/)
[外链图片转存中...(img-eCVVdMDs-1632659510749)]
- 步骤:
1)备份ubuntu原来的配置文件(sudo cp /ect/apt/sources.list /ect/apt/sources.list .backup );
2)再更改配置文件内容为镜像内容(vi sources.list 删除内容并且粘贴上图左边的内容);
3)更新源地址(sudo apt-get update)
##### (2)远程登录Ubuntu
- Windows登录ubuntu(ssh相关介绍)
SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议。
使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。
<img src="https://i-blog.csdnimg.cn/blog_migrate/2c0ed6776640d3de9a2c347fce0f971b.png" alt="image-20210618155248430" style="zoom:80%;" />
- ==和CentOS 不一样,Ubuntu默认没有安装SSHD服务(使用netstat 指令查看: apt install net-tools),==可以看到没有相关的端口监听,所以要安装ssh服务器(sshd),执行:sudo apt-get install openssh-server;;安装后执行 service sshd restart 即可打开服务.
- 通过上面步骤即可在windows客户端例如:xshell上登录链接ubuntu
##### (3)两台Linux互相访问
- 语法:ssh 用户名@IP(如:ssh xcp@192.168.200.131)
- 注意:对于Ubuntu,相应的配置要先设置好(sshd服务器安装配置等)
、
## 十三、日志管理
#### (1)日志文件
- 在 /var/log 文件夹下,直接cd打开即可查看文件。
#### (2)常用日志及意义
[外链图片转存中...(img-VNnTo3CO-1632659510749)]