linux基础学习,有相应的笔记文件XMind和Word(基于centos8(主要的)和Ubuntu20),里面有linux基本操作指令和JavaEE,大数据相关的shell。2021年4月26日

  1. 前面的话
    这篇文章是我学习linux的一个记录,我是用XMind记笔记的,然后转换为Word最后粘贴到这里的,如果感兴趣的话,可以下载我上传的文件,都是免费的,大家共同学习,如果有什么错误,或者意见还希望大家可以提出来。
    这个linux基础学习产生的笔记(基于centos8(主要的)和Ubuntu20),里面有linux基本操作指令和JavaEE,大数据相关的shell。JavaEE中包含了JDK的安装和卸载,Tomcat,eclipse,MySQL
    本笔记是通过在B站学习尚硅谷的视频一步一步写的:尚硅谷Linux教程(视频是好久之前的了,但是我觉得还是挺金典的)
    2021年4月26日
  2. 文件下载链接(等今天上传的链接审核通过了再贴下载地址)一下子就审核通过啦(不知道下载到底是不是免费的,我设置的是免费,但是CSDN设置权限了没有就不太清楚,如果它要收费,我就不用它了)
    (1)XMind源文件下载链接:https://download.csdn.net/download/qq_43987149/18148589
    (2)XMind转换后的word链接:https://download.csdn.net/download/qq_43987149/18148671
    建议下载XMind版(XMind版结构更清晰,可以下载XMind软件打开方便查看(如果不想下载软件,还可以直接百度搜索:百度脑图,在线打开下载的XMind文件查看))
  3. word版全部内容:
    注:里面的有的所谓的作者、链接、来源都是网上搜索的,是参考链接,大家自己判断。
linux基础学习
Ubuntu
 注意
 apt install net-tools
 当ifconfig查询ip的时候命令无效的时候
 sudo apt-get install openssh-server
 Ubuntu默认没有安装ssh服务,需要自己安装
 netstat -anp | grep sshd
 安装好之后可以通过这个指令查询ssh服务
ssh服务是外部连接linux系统的服务22端口的:xshell、xftp
 apt install rpm
 安装rpm命令
 基本指令
 apt
 apt-get
 apt 和 apt-get 区别
apt install xxx,可以替代apt-get install xxx 用来安装软件包
apt remove xxx,可以替代apt-get remove xxx 来移除软件包
apt purge xxx,可以替代apt-get purge来移除软件包及其配置文件等
apt update,可以替代apt-get update用来更新源
apt autoremove,可以替代apt-get autoremove用来自动删除不需要的包(所有不被任何其他包或软件依赖的包)
apt full-upgrade,可以替代apt-get dist upgrade在升级的时候自动处理依赖关系
apt search xxx,可以替代apt-cache search xxx来搜索已经安装的应用程序
apt show xxx,可以替代apt-cache show xxx来显示软件包xxx的详细信息
apt list,新的apt命令,可以列出符合条件的包,例如以下几个常用的
apt list --installed:列出已经安装的包
apt list --upgradeable:列出可以升级的包
apt list --all -versions:列出系统中所有能找到的包及版本
apt edit-sources,新的apt命令,编辑源列表(这下不用为记不住源列表文件目录地址而发愁啦)

作者:静叶思迷
链接:https://www.jianshu.com/p/c58de6f018fa
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
centos8
 刚刚安装好之后的基本设置
 时区设置
 查看系统当前的时区命令:timedatectl  设置系统时区位亚洲/上海:timedatectl set-timezone Asia/Shanghai 
 终端启动快捷键
 4、弹出一个窗口,【Name(名称)】填写“Terminal”(也可以自己写,不影响效果)。【Command(命令)】填写“/usr/bin/gnome-terminal”(即终端的程序路径),点击【Apply(应用)】。
 中文输入法设置
 切换输入法:shift;win+空格
 linux系统的设置(setting)》Region&Language》Input Sources》+》点击竖着的...》搜索输入ch》other》找到Chinese(Intelligent Pinyin)选中》点击options
 共享文件(文件夹)设置
 虚拟机=》虚拟机设置=》选项=》共享文件夹=》总是启用=》添加=》下一步=》浏览=》选择共享文件夹路径=》下一步=》启用此共享=》完成=》确定
 简单的工具
 终端模拟软件:xshell7
 文件传输软件:xftp7
 linux的ip查询
 window10用软件连接linux需要用到ip
 ifconfig
 学习部分笔记
 实用指令
 vi和vim
vi
vim
三种模式的转换
按 ESC 进入命令模式
输入 Shift + ; 进入末行模式
输入插入命令,如(i,a,o) 进入插入模式
输入模式
i 从光标所在位置前面开始插入
I 在当前行首插入
a 从光标所在位置后面开始输入
A 在当前行尾插入
o 在光标所在行下方新增一行并进入输入模式
O 在当前上面一行插入
进入输入模式后,在最后一行会出现–INSERT—的字
退出指令
:wq 末行模式,wq 保存退出
:q 末行模式,q 直接退出
:q! 末行模式,q! 强制退出,不保存
移动光标
gg 到文件第一行
G 到文件最后一行 (Shift + g)
^ 非空格行首
0 行首(数字0)
$ 行尾
快捷键
yy+p
在命令模式下,可以快速复制当前光标所在行,并粘贴在下一行
 用户管理
添加用户
useradd /adduser 用户名
passwd 用户名
用户密码,再次输入确认密码
通过指定路径的方式创建用户
为新创建的用户指定组
查看用户信息
id 用户名
删除用户
userdel 用户名
只删除用户,不删除用户跟目录
userdel -r 用户名
不但删除用户,还要删除用户根目录
 组
groupadd 组名
添加组
 帮助指令
man
man ls
help
help
help cd
 文件目录类
pwd指令
显示当前工作目录的绝对路径
ls
ls [选项] [目录或文件]
常用选项
-a
显示当前目录的所有目录和文件,包括隐藏的
-l
以列表的方式显示信息
cd
目录切换
cd / cd ~
回到家/根目录
cd ..
回到当前目录的上一级目录
cd /home
绝对路径的方式进入home目录
直接从根目录开始写到需要到达的目录路径
cd ../home
相对路径方式进入home目录(假设当前目录在root目录中)
先回根目录然后到home目录
mkdir
创建文件夹
mkdir 文件夹名
mkdir /home/dog(文件夹名)
mkdir -p /home/other/test2/i
加上-p可以创建多级目录(test2/i)
rmdir
删除空目录
rmdir [选项] 要删除的空文件夹目录
rm -rf 要删除的非空文件夹名称
touch
创建一个空文件
touch hello.txt world.txt
一次可以创建多个文件
cp
cp 文件名 文件夹路径
复制一个文件到另外一个文件夹
cp -r 文件夹名 文件夹路径
复制一个文件夹的所有文件(包含文件夹名称本身)到一个文件夹中



rm
删除文件、文件夹
rm 文件名
需要确认删除,并且只能删除文件
rm -rf 文件夹/文件名
不用确认删除,可以直接删除,可以删除文件或者文件夹
删除多个文件
后面跟上文件名,或者用通配符:
也可以加上-rf
rm file1 file2 file3
rm file?
rm file*
mv
移动文件与目录或重命名
mv oldNameFile newFileName (重命名)
mv /temp/movefile /targetFolder (移动文件)
cat
以只读方式查看文件
cat 【选项】 文件名
常用选项
-n 显示行号
cat 【选项】 文件名 | more
管道符 | 加more可以让文件内容一页一页的显示
这个时候enter可以一行一行的移动
空格键可以一页一页的移动
more
这个时候enter可以一行一行的移动
空格键可以一页一页的移动
q
代表立刻离开more,不再显示该文件内容-
Ctrl+F
向下滚动一屏
Ctrl+B
返回上一屏
=
输出当前行的行号
:f
输出文件名和当前行的行号
less

>>>
>
覆盖
>>
追加
ls -l >a.txt
将ls -l 指令查询的数据覆盖到a.txt文件中(前提是a.txt文件存在,否则先创建a.txt文件然后直接写入进去。
ls -l >>a.txt
同上面的,这个是追加在文件后面
cat /etc/profile >a.txt
同上,将对取的文件里面的数据写入a.txt文件中
echo "hello world" >>a.txt
同上,将字符串""里面的追加在a.txt文档里
ls /home > /home/other/b.txt
将home目录下的文件信息写入到other文件夹中b.txt中
cal > b.txt
将日历信息写入b.txt文件中
cal
显示日历
echo
输出内容到控制台
echo 【选项】 内容
echo $PATH
输出linux环境变量
head
默认显示文件开头10行
head 文件名
head -n 5 文件名
显示文件前5行
head -5 文件名
同上
tail
默认显示文件末尾10行
tail 文件名
tail -n 5 文件名
tail -5 文件名
tail -f 文件名
实时监控查看文件操作日志:有变化就会看到
ctrl+c退出命令
ln
在当前目录中创建软链接(相当于快捷方式)
ln -s 需要创建的文件或文件路径的值 软链接名
要删除这个快捷方式可以直接当普通文件一样删除
history
查看历史指令
默认查看全部
history 10
查看最近使用的10条指令
!212
在查询指令之后可以通过这个方式使用对应数字的指令
 时间日期类
date
显示当前日期
date
[root@localhost feng]# date
Fri Apr 16 19:55:46 CST 2021
date "+%Y"
查询年份
date "+%Y年%m月%d日 %H:%M:%S"
年月日时分秒
date -s "2021-04-16 20:45:35"
设置当前系统时间
cal
显示当前日历信息
cal
cal 2021
显示2021整年的日历信息
 搜索查询类
find
按照name、user、文件大小查找文件
find /home -name hello.txt
find /home -user user1
find /home -size 20M
查找大小为20M的文件
find /home -size +20M
查找大小大于20M的文件
find /home -size -20M
查找大小小于20M的文件
find /home -name *.txt
按照通配符查找
locate
可以快速定位文件路径
locate 搜索文件
updatedb
第一次必须先创建数据库
例子
[root@localhost feng]# updatedb
[root@localhost feng]# locate hello.txt
/home/other/hello.txt
grep指令和管道符号|
grep过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep [选项] 查找内容源文件
-n
显示匹配行及行号
-i
忽略字母大小写
例子
查询hello.txt文件中的total,并且忽略大小写,显示值所在行
[root@localhost feng]# cat /home/other/hello.txt | grep -ni total
3:total 4
7:total 12
13:total 12
19:Total9
20:totAl10
 压缩和解压缩
gzip和gunzip
gzip
(功能描述:压缩文件,只能将文件压缩为*.gz文件)
gzip 文件
gunzip
(功能描述:解压缩文件命令)
文件.gz
例子
压缩hello.txt 然后又解压缩
压缩
[root@localhost feng]# gzip /home/other/hello.txt
[root@localhost feng]# cd /home/other
[root@localhost other]# ls
a.txt  b.txt  hello.txt.gz  other2  world.txt
解压缩
[root@localhost other]# gunzip hello.txt.gz
[root@localhost other]# ls
a.txt  b.txt  hello.txt  other2  world.txt
可以同时处理多个文件,依次放后面就好了
压缩或者解压缩之后源文件就没有了
zip和unzip
可以压缩和解压缩层级目录
压缩或解压缩之后源文件还在
zip 【选项】 xxx.zip 将要压缩的内容
压缩文件或者目录
-r
递归压缩
unzip 【选项】 xxx.zip
解压缩文件
-d<目录>
指定解压后文件存放的目录
tar
tar指令是打包指令,最后打包后的文件是.tar.gz的文件。
tar [选项] XXX.tar.gz 打包的内容
(功能描述:打包目录,压缩后的文件格式.tar.gz)
选项
-c
产生.tar打包文件
-v
显示详细信息
-f
指定压缩后的文件名
-z
打包同时压缩
-x
解压.tar文件
例子
tar -zcvf ab.tar.gz a.txt b.txt
将a.txt和b.txt文件打包压缩为ab.tar.gz文件,源文件没有变化
tar -zcvf /home/other2/ab.tar.gz a.txt b.txt
可以指定打包文件放的位置
tar -zcvf test1.tar.gz /home/other/test1[/]
打包压缩目录中的所有文件
tar -zxvf /home/other/ab.tar.gz
解压缩到当前文件夹
tar -zxvf /home/other/ab.tar.gz -C /home/other/test1
解压缩到/home/other/test1文件夹中
 组管理
 groupadd 组名
添加组
 ls -ahl
查看文件所在组
 chown 用户名 文件名
修改文件所有者
 chgrp 组名 文件名
修改文件所在组
 usermod -g 新的组名 用户名
改变用户所在组
 权限管理
 
 
 ls -l中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
 0-9位说明
1)第0位确定文件类型(d,-,1 , c , b)
2)第1-3位确定所有者(该文件的所有者)拥有该文件的权限。---User
3)第4-6位确定所属组(同用户组的)拥有该文件的权限,---Group
4)第7-9位确定其他用户拥有该文件的权限---Other
 rwx权限
rwx作用到文件
1) [r ]代表可读(read): 可以读取,查看
2) [ w ]代表可写(wnite):可以修改.但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
3)[x ]代表可执行(execute):可以被执行
rwx 作用到目录
1)[ r]代表可读(read):可以读取,1s查看目录内容
2) [ w]代表可写(wnite):可以修改目录内创建+册除+重命名目录
3)[x ]代表可执行(execute):可以进入该目录
 chmod
修改权限:可以修改文件或者目录的权限
第一种:+ - = 变更权限
u:所有者g:所有组o:其他人a:所有人(u、g、o的总和)
1) chmod u=rwx,g=rx,O=x 文件目录名
2 ) chmod o+w 文件目录名
3) chmod a-x 文件目录名
通过数字变更
规则:r=4 w=2 x=1
rwx=4+2+1=7
chmod u=rwx,g=rx,O=x 文件目录名
相当于chmod 751 文件目录名
 chown
修改文件所有者
chown -R 用户 文件或文件路径或文件夹
-R 所起作用是可以递归的将层级文件都改为要设置的用户
 chgrp
修改文件所在组
chgrp 组名 文件名
chgrp -R 组名 文件名/文件目录
递归的将所有文件都设置为当前组
 crond 任务调度
 crontab 【选项】
 选项
-e
编辑crontab定时任务
-l
查询crontab任务
-r
删除当前用户所有的crontab任务
 例子

 五个占位符



 使用shell的例子

 service crond restart
重启任务调度
 linux磁盘分区
 lsblk -f
查看分区情况
 lsblk
可以查看分区大小
 
 如何增加一块硬盘
虚拟机添加硬盘
分区
fdisk /dev/sdb
格式化
mkfs -t ext4 /dev/sdb1
挂载
先创建一个 /home/newdisk 挂载目录,挂载 mount /devlsdb1 /home/newdisk
umount
卸载挂载
umount /dev/sdb1
umount /home/newdisk
可以直接根据挂载的路径来卸载
如果设置了自动挂载的话,下次重启会重新挂载上去
设置可以自动(永久)挂载。
vim /etc/fstab
进入设置文件
/dev/sdb1                                 /home/newdisk           ext4     defaults       0 0
在刚刚进入的文件中添加这条内容
 磁盘情况查询
df -l/h
查询系统整体的磁盘使用情况/h【对人更好查看】
du h /目录
对应目录占用磁盘情况
部分选项
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
例子
du -ach --max-depth=1 /opt
工作中常使用指令
统计home目录下文件的个数
ll /home | grep "^-" | wc -l
统计home目录下目录的个数
ll /home | grep "^d" | wc -l
统计home目录及其子目录下的目录的个数
ll -R /home | grep "^d" | wc -l
使用tree查看目录结构
tree / | less
目录结构太多可以一页一页的显示
yum install tree
没有tree指令可以先安装
 网络配置
 第一种方式:电脑自动分配ip
 第二种方式:手动配置
vi/vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改对应的配置文件

几个需要修改的信息:
BOOTPROTO="static"
GATEWAY=192.168.72.2
DNS1=192.168.72.2
IPADDR=192.168.72.130
NETMASK=255.255.255.0
修改之后重启服务
service network restart
centos8 使用这个命令出现错误
Failed to restart network.service: Unit network.service not found.
nmcli c reload
reboot
上面的方法(重启服务)没有起作用,重启系统起作用了
 进程管理
 ps -aux | more
查看进程信息

ps-a:显示当前终端的所有进程信息
ps -u:以用户的格式显示进程信息
find -x:显示后台进程运行的参数
 kill和killall
终止进程
kill
kill 进程号
kill -9 进程号
重要的进程需要-9强制才能终止,否则会被忽略
killall
killall gedit
关闭编辑器(全部打开的*.txt文件)
 pstree
查看进程树
pstree [选项] 
选项
-p
显示进程的PID
-u
显示进程的所属用户
 service(服务)
在centos7过后使用 systemctl管理服务
systemctl
systemctl status firewalld.service
查看防火墙状态
systemctl start firewalld.service
启动防火墙
systemctl stop firewalld.service
关闭防火墙
telnet
检查linux的某个端口是否在监听且可以访问
telnet ip 端口号
telnet 192.168.72.130 22
ll /usr/lib/systemd/system
centos8中使用这个查看系统中有什么服务
chkconfig
 top
动态监控进程执行
和 ps 命令相似
top 【选项】
选项
-d 秒数
指定top命令每隔几秒更新.默认是3秒在top命令的交互模式当中可以执行的命令:
-i
使top不显示任何闲嚣或者僵死进程.
-p
逶过指定监控进程ID来仅仅监控某个进程的状态。
交互操作
p
以CPu使用率排序,默认就是此项
M
以内存的使用率排序
N
以PID排序
q
退出top
案例
1.监视特定用户
top:输入此命令,按回车键,查看执行的进程。u:然后输入“u”回车,再输入用户名,即可

案例2:终止指定的进程。
top:输入此命令,按回车键,查看执行的进程。k:然后输入“k”回车,再输入要结束的进程ID号
top -d 10
10秒才刷新一下监控的进程信息
 netstat
监控网络
netstat
netstat | less
netstat -anp | grep sshd
监控sshd进程的网络
 RPM和YUM
 rpm
查询已安装的rpm列表
rpm -qa | grep firefox
查询是否安装有火狐浏览器

rpm -qi 软件包名
查询软件包信息
rpm -ql 软件包名
查询软件包中的文件
rpm -qf 文件全路径名
查询文件所属的软件包
rpm卸载软件
rpm -e rpm包名
rpm -e --nodeps rpm包名
强制卸载
rpm安装软件
rpm -ivh rpm软件包全路径
选项说明
i=install安装
v=verbose提示
h=hash进度条
 yum
Yum是一个Shell_前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
使用的前提是需要联网
查询
yum list | grep firefox
查询火狐浏览器安装包
安装
yum install firefox
安装火狐浏览器
yum -y install xxx
之后不再询问是否确认安装(-y就是之后的y确认指令)
卸载
yum -y remove 包名
 JavaEE定制篇
 搭建JavaEE环境
 卸载和安装JDK
 卸载JDK
rpm -qa | grep jdk
查询jdk信息并复制方便下面卸载命令使用
yum -y remove java-1.8.0-openjdk-1.8.0.232.b09-0.el
根据什么查询到的jdk信息卸载
 安装JDK
方式一:直接在linux在线下载安装
方式二:先下载然后上传到linux系统
rpm安装和tar.gz安装
wget命令在linux在线安装
这个方式我下载的文件有问题
上传文件离线安装
JDK各个版本官网下载网址
在linux中创建上传文件目录(/opt/java/jdkfile)
连接xftp7上传文件(*.rpm/*.tar.gz)
rpm 安装
rpm -ivh jdk-8u281-linux-x64.rpm
默认的安装路径是在:/usr/java/jdk1.8.0_281-amd64
配置JDK环境变量
vi /etc/profile
打开环境变量配置文件,在文件最后面添加下面几句
export JAVA_HOME=/usr/java/jdk1.8-1.8.0_281-fcs.x86_64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
使配置文件生效
source /etc/profile
安装好后查询
java
javac
安装好后测试
tar 安装
tar -zxvf /opt/java/jdkfile/jdk-8u281-linux-x64.tar.gz -C /usr/java/javatar
 安装TomCat
 Tomcat的安装和JDK的安装相似,或更简单,只需要下载然后解压
 主要是后面的配置
 启动Tomcat服务
找到安装目录下的bin
在bin目录下:./startup.sh
 防火墙开启8080端口号
firewall-cmd --permanent --add-port=8080/tcp
--permanent:表示设置为持久
firewall-cmd --permanent --add-port=8080/udp 
重启防火墙
systemctl restart firewalld.service
查询端口是否开放
firewall-cmd --query-port=8080/tcp
 浏览器验证
localhost:8080
查看本地是否显示Tomcat的首页
 安装eclipse
 同上
 打开进行测试
正常的启动就好了
使用Tomcat的时候,找不到
可能是他的安装包权限限制
chmod -R 777 tomcat安装包(可以先尝试只改变bin文件夹的权限)
创建好一个动态的web工程之后,写一个简单的jsp测试
 安装mysql
 安装参考链接
链接1
链接2
安装好之后提示信息:
[/usr/lib/tmpfiles.d/mysql.conf:23] Line references path below legacy directory /var/run/, updating /var/run/mysqld → /run/mysqld; please update the tmpfiles.d/ drop-in file accordingly.
报错信息:
登录mysql的时候:
mysql: error while loading shared libraries: libncurses.so.5: cannot open sh
解决办法:
安装yum install libncurses*
忘记mysql密码或者初始密码不记得
方法1:修改配置文件,启动mysql修改
方法2:暂停mysql,以不检查权限的方式启动,然后修改密码
 相关指令
1:查看MySQL是否安装:
yum list installed mysql*
rpm -qa | grep -i mysql
-i  :不区分大小写
 卸载mysql
先查询安装的mysql信息
可以使用whereis查询mysql相关的路径,并删除
 大数据定制篇
 shell编程
 第一个shell
mkdir /root/shell
在root路径下创建shell文件夹
vim myshell01.sh
#!/bin/bash
echo "hello, world!"
chmod 744 myshell01.sh
修改文件权限,使其可以被执行
./myshell01.sh
当前路径执行
/root/shell/myshell01.sh
绝对路径执行
不给权限执行方式:不推荐

 基本语法
变量的定义
例子1
A=100
echo "A=$A"
unset A
撤销变量
echo "A=$A"
$A:引用定义的变量A,并使用echo输出
静态变量
不可以unset
readonly a=128
执行命令

使用`命令`把命令括起来
A=`date`
使用$(命令)
A=$(date)
 定义变量规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
2)等号两侧不能有空格
3)变量名称一般习惯为大写
 设置环境变量
vim /etc/profile
打开配置文件(全局)
输入:export TOMCAT_HOME=/opt/tomcat/apache-tomcat
source /etc/profile
重新加载配置文件让其生效
当然也可以直接重启系统
上面两步就设置好了
来测试一下
方式一:直接输出测试
[root@localhost feng]# $TOMCAT_HOME
bash: /opt/tomcat/apache-tomcat: No such file or directory
[root@localhost feng]#
方式二:使用shell测试
编辑shell文件
vim /root/shell/myshell04.sh
echo "$TOM_CAT"
sh /root/shell/myshell04.sh
直接通过sh执行shell文件,不用chmod改变文件权限
/opt/tomcat/apache-tomcat
 位置参数变量
vim myshell04.sh
#!/bin/bash #echo "$TOMCAT_HOME" echo "$0 $1 $2" echo "$*" echo "$@" echo "$#"
[root@localhost shell]# sh ./myshell04.sh 23 32 3 ./myshell04.sh 23 32 23 32 3 23 32 3 3
 预定义变量
基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用基本语法
$$
(功能描述:当前进程的进程号(PID))
$ !
(功能描述:后台运行的最后一个进程的进程号(PID) )
$?
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为o,证明上一个命令正确执行﹔如果这个变量的值为非o(具体是哪个数,由命令菌己来决定〉,则证明上一个命令执行不正确了。)
例子
echo "当前的进程号=$$"
#后台的方式运行myshell01.sh
./myshell01.sh &
echo "最后的进程号=$!"
echo "执行的值=$?"
 运算符
三种方式
$((运算式))
$[运算式]
`expr 2 + 3`
需要有空格
例子1
vim myshell05.sh
#!/bin/bash
echo "$((2+3*(3+2)))"
echo "$[2+3*(3+2)]"
#echo "expr 3 + 2 "
Temp=`expr 2 + 3`
result3=`expr $Temp \* 4`
echo "result3=$result3"
运行结果
[root@localhost shell]# ./myshell05.sh 17 17 result3=20
例子2
求和(外面传参数)
SUM=$[$1+$2] echo "$SUM"
./myshell05.sh 8 10
18
 条件判断
判断语句
基本语法
[ continue ]
注意continue前后有空格
非空返回true
可以使用$?判断
整数的比较
=字符串比较
-le小于等于
-lt小于
-eq等于
-gt大于
-ge大于等于
例子
vim equal.sh
if [ "ok" = "ok" ]         then echo "相等" fi
vim ifelse.sh
if [ $1 -gt 60 ] then         echo "及格了" elif [ $1 -lt 60 ] then         echo "不及格" fi
case
case $1 in         "1")                 echo "周一"                 ;;         "2")                 echo "周二"                 ;;         *)                 echo "其他"                 ;; esac
for
#例子1:打印命令行输入的值
for i in "$*" do         echo "the number is $i" done echo "==============================" for i in "$@" do         echo "the num is $i" done
#例子2:从1加到100
#定义一个变量 SUM=0 for ((i=1;i<=100;i++)) do               SUM=$[$SUM+$i] done     echo "sum=$SUM"
while
#案例1:从命令行输入一个数n,统计从1+..+n的值
SUM=0 i=0 while [ $i -le $1 ] do         SUM=$[$SUM+$i]         i=$[$i+1] done echo "从1-$1的和为$SUM"
read
#案例1:读取控制台输入的一个num值
read -p "请输入一个数字: " num1
echo "你输入的值是:$num1"
 函数
basename和dirname
basename
返回文件后面的文件名
basename /home/other/a.txt [.txt]
a.txt
如果带了最后面的选项【.txt】则只返回a
dirname
返回文件前面的路径
dirname /home/other/a.txt [.txt]
/home/other .
如果是有选项的话,就会多返回一个 . 
function
#案例1:计算输入两个参数的和(read),getSum
function getSum(){
              SUM=$[$n1+$n2]         echo "$n1+$n2=$SUM" } read -p "输入第一个数字:" n1 read -p "输入第二个数字:" n2 #调用getSum getSum $n1 $n2
[root@localhost shell]# sh ./functions1.sh  输入第一个数字:34 输入第二个数字:45 34+45=79
 综合案例
 需求分析
1)每天凌晨2:10备份数据库atguiguDB到/data/backup/db
2)备份开始和备份结束能够给出相应的提示信息
3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如: 2018-03-12_230201.tar-gz
4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
其他
 意外删除root目录下文件
 手残把 /root/ 里面的文件删除了.
 mkdir /root
 这个根据需要使用
 cp -a /etc/skel/.[!.]* /root
 最重要的是这个命令
 主要是吧 /etc/skel/里面的文件拷贝回去就行了~~~哈..
 安装指令
 yum install 待安装指令
 yum install tree
tree可以查看目录结构
 xshell怎么忘记用户名
 右键连接找到属性
 找到用户身份验证
 找到用户名并删除
 wget命令下载文件
 命令格式:
 wget [参数列表] [目标软件、网页的网址]
 -V,–version 显示软件版本号然后退出;
 -h,–help显示软件帮助信息;
 -e,–execute=COMMAND 执行一个 “.wgetrc”命令
 -o,–output-file=FILE 将软件输出信息保存到文件;
 -a,–append-output=FILE将软件输出信息追加到文件;
 -d,–debug显示输出信息;
 -q,–quiet 不显示输出信息;
 -i,–input-file=FILE 从文件中取得URL;
 -t,–tries=NUMBER 是否下载次数(0表示无穷次)
 -O –output-document=FILE下载文件保存为别的文件名
 -nc, –no-clobber 不要覆盖已经存在的文件
 -N,–timestamping只下载比本地新的文件
 -T,–timeout=SECONDS 设置超时时间
 -Y,–proxy=on/off 关闭代理
 -nd,–no-directories 不建立目录
 -x,–force-directories 强制建立目录
 –http-user=USER设置HTTP用户
 –http-passwd=PASS设置HTTP密码
 –proxy-user=USER设置代理用户
 –proxy-passwd=PASS设置代理密码
 -r,–recursive 下载整个网站、目录(小心使用)
 -l,–level=NUMBER 下载层次
 -A,–accept=LIST 可以接受的文件类型
 -R,–reject=LIST拒绝接受的文件类型
 -D,–domains=LIST可以接受的域名
 –exclude-domains=LIST拒绝的域名
 -L,–relative 下载关联链接
 –follow-ftp 只下载FTP链接
 -H,–span-hosts 可以下载外面的主机
 -I,–include-directories=LIST允许的目录
 -X,–exclude-directories=LIST 拒绝的目录
 centos防火墙
 查看防火墙状态:firewall-cmd --state
 查看防火墙规则: firewall-cmd --list-all 
 启用防火墙(开机启动): systemctl enable firewalld.service 
 开启防火墙: systemctl start firewalld.service
 关闭防火墙: systemctl stop firewalld.service
 重启防火墙: systemctl restart firewalld.service
 查询端口是否开放:firewall-cmd --query-port=8080/tcp
 配置文件位置:/etc/firewalld/zones/public.xml
 添加开放端口:
 #--permanent:表示设置为持久
 firewall-cmd --permanent --add-port=8080/tcp
 firewall-cmd --permanent --add-port=8080/udp 
 移除端口:
 firewall-cmd --permanent --remove-port=8080/tcp
 firewall-cmd --permanent --remove-port=8080/udp
 whereis 命令
 whereis命令只能用于程序名的搜索
 和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高, 但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
 whereis [-bmsu] [BMS 目录名 -f ] 文件名
 -b   定位可执行文件。
 -m   定位帮助文件。
 -s   定位源代码文件。
 -u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
 -B   指定搜索可执行文件的路径。
 -M   指定搜索帮助文件的路径。
 -S   指定搜索源代码文件的路径
 注释
 单行注释
 # 这个是单行注释
 多行注释
 :<<! 这个 里面 的是 多行 注释 !

你可能感兴趣的:(linux,linux)