Linux 笔记
Linux
习惯问题:
1. 在vim编辑时,按了ctrl + s后,再按ctrl + q就可以继续执行了。
ctrl + s 表示停止向终端输出
ctrl + q 表示恢复向终端输出
2.
1. 重启reboot
2. vi和vim使用方法
打开一个文件:vi/vim xxx.xxx
进入插入模式:i/a
进入命令行模式:按Esc
退出:q(没有修改的退出) w(保存) wq(保存并退出) q!(强制退出,不保存修改)
3. vi\vim快捷键
1)拷贝当前行 yy,拷贝当前行下的5行 5yy,并粘贴(p)
2)删除当前行 dd,删除当前行下的5行 5dd
3)在文件中查找某个单词[命令行下/关键字,回车查找,输入n就是查找下一个]
4)设置文件的行号,取消文件的行号 [命令行下 :set nu 和 :set nonu]
5)编辑 /etc/profile文件,使用快捷键到底文档的最末行[G]和最首行[gg]
6)在一个文件中输入 "hello",然后又撤销这个动作 u
7)编辑 /etc/profile文件,并将光标移动到20行 输入20 再shift+g
PS:命令的执行都是在正常模式,而不是插入模式下进行。
4. 关机&重启命令
shutdown
shutdown -h now :立即关机
shutdown -h 1 :1分钟后关机
shutdown -r now :立即重启
halt :直接使用,效果等价于关机
reboot :重启系统
sync :把内存的数据同步到磁盘上,防止丢失数据
PS:当关机或重启时,都应先执行一次sync指令,把内存的数据写入磁盘,防止数据丢失
5. 用户的登录和注销
1)登录时尽量不用root账号登录,因为他是系统管理员,拥有最大权限,避免操作失误,可以利用普通用户登录,登录后再用"su - 用户名"命令来切换成系统管理员身份
2)在提示符下输入 logout即可注销用户,只对远程登录有用
6. 用户管理
1)添加用户 useradd [选项] 用户名 如:useradd guest 就会创建一个guest用户
当创建用户成功后,会自动的创建和用户同名的家目录
也可以通过useradd -d 指定目录 新的用户名,给新创建的用户指定家目录
2)指定/修改密码
a. passwd 用户名
b. 输入新的密码
c. 再次确认输入的密码
3)删除用户
a. userdel 用户名
b. 删除用户,但保留家目录 :userdel 用户名
c. 删除用户,同时删除家目录 :userdel -r 用户名
在删除用户时,我们一般不会把家目录删除掉
4)查询用户信息 :id 用户名
5)切换用户
a. su - 用户名
b. su 用户名
c. exit 退出切换的用户,回到root用户上
PS: su [user]切换到其他用户,但是不切换环境变量,su - [user]则是完整的切换到新的用户环境。
6)查看当前登录用户/使用用户:whoami
7. 用户组
1)增加组:groupadd 组名
2)删除组:groupdel 组名
3)创建用户的同时附属的指定的组中:useradd -g 组名 用户名
4)修改用户组:usermod -g 用户组 用户名
5)/etc/passwd 用户配置文件,记录用户的各种信息
如:zwj:x:1002:1003::/home/zwj:/bin/bash
root:x:0:0::/home/root:/bin/bash
用户名:口令:用户id:组id::家目录:shell
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
6)/etc/shadow 口令配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
7)/etc/group 组配置文件,记录Linux包含的组的信息
每行的含义:组名:口令:组标识号:组内用户列表
8. Linux的运行级别
0:关机
1:单用户(找回丢失密码)
2:多用户无网络服务
3:多用户有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5,要修改的运行级别可改文件/etc/inittab的id:5:initdefault:这一行中的数字
命令:init[0123456]
1)切换到指定运行级别的指令
systemctl set-default multi-user.target
systemctl set-default graphical.target
2)查看当前的运行级别的指令
systemctl get-default
9. 帮组指令
1)man 指令
2)help 指令
10. 文件目录指令
1)pwd 显示当前工作目录的绝对路径
2)ls 显示路径下的所有文件和目录
ls -a 显示当前目录所有的文件和目录,包括隐藏的。
ls -l 以列表的方式显示信息
ls -a -l 以列表的形式显示所有文件和目录,包括隐藏的
ls -al 和ls -a -l功能一致
3)cd 切换目录
cd ~ 回到自己的家目录
cd .. 回到上一级路径
cd / 回到根路径
cd ../home 回到上一级路径下home目录中
cd /home 回到根目录下的home目录中
4)mkdir 创建目录
mkdir /home/dog 在/home路径下创建dog目录(只能创建单级目录)
mkdir -p /home/animal/tiger 在/home路径下创建animal目录并在animal目录下创建tiger目录(创建多级目录)
5)rmdir 删除目录
rmdir /home/dog 删除/home目录下的dog目录(删除的是一个空目录)
rm -r /home/dog(删除一个非空目录,dog目录下有一个test.txt文件)
6)touch 文件名 创建一个空文件
touch 1.txt 创建一个1.txt的空文件
touch 1.txt 2.txt 创建了1.txt和2.txt两个文件
7)cp 拷贝文件
语法:cp [选项] source dest
cp aaa.txt bbb/ 把当前目录下aaa.txt文件拷贝到当前目录下的bbb目录下(拷贝单个文件到指定的目录中)
cp -r test/ zwj/ 把当前目录下的test目录拷贝到当前目录下的zwj目录下(循环拷贝内容到指定的目录下)
\cp -r test/ zwj/ (强制覆盖)把当前目录下的test目录拷贝到当前目录下的zwj目录下(循环拷贝内容到指定的目录下)
cp -r first/. second/ 把路径first下面的内容拷贝到second目录下,如first目录下有a.txt和b.txt两个文件,second目录下为空,结果是second目录下有a.txt和b.txt两个文件
8)rm 移除文件或目录
语法:rm [选项] 要删除的文件或目录
rm aaa.txt 删除当前目录下的aaa.txt文件(需要确认)
\rm aaa.txt 强制删除当前目录下的aaa.txt文件(不需要确认)
rm -f aaa.txt 强制删除当前目录下的aaa.txt文件(不需要确认)
rm -r bbb 删除当前目录下的bbb目录,依次进入目录进行删除
\rm -r bbb (强制删除)删除当前目录下的bbb目录,依次进入目录进行删除
rm -rf bbb (强制删除)删除当前目录下的bbb目录,依次进入目录进行删除
9)mv 移动文件
语法:mv 移动文件与目录或重命名
mv oldNameFile newNameFile 重命名
mv /temp/movefile /targetFolder 移动文件
10)cat 查看文件内容,以只读的方式
语法:cat [选项] 要查看的文件
常用选项:
-n :显示行号
cat /etc/profile 查看/etc/profile文件
cat -n /etc/profile 查看/etc/profile文件,并显示行号
cat -n /etc/profile | more 查看/etc/profile文件,并显示行号,分页显示,回车显示下一行,空格键显示下一页
11)more 基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本的内容
more 要查看的文件
回车显示下一行,空格键显示下一页
Ctrl+b 显示上一页
q 退出
12)less 分屏查看文件内容,与more指令类似,但是比more指令更加强大,并不是一次将整个文件加载之后显示,对于显示大型文件具有较高的效率。
less 要查看的文件
回车显示下一行,空格键显示下一页
Ctrl+b 显示上一页
q 退出
13)> 指令和 >> 指令
> 输出重定向,会将文件原来的内容覆盖
>> 追加,不会覆盖文件原来的内容,而是追加到文件的尾部
基本语法:
a. ls -l > 文件 列表的内容写入文件a.txt中(覆盖写)
ls -l > a.txt 将ls -l 的显示内容覆盖写入到a.txt文件,如果文件不存在,就创建该文件。
b. ls -al >> 文件 列表的内容追加到文件aa.txt的末尾
ls -l >> b.txt 将ls -l 的显示内容追加写入到b.txt文件,如果文件不存在,就创建该文件。
c. cat 文件1 > 文件2 将文件1的内容覆盖到文件2中
d. echo "内容" >> 文件
e. cal >> /home/mycal 将当前日历信息追加到/home/的mycal文件中
14)cal 显示当前日历
15)echo 输出内容到控制台
echo 输出的内容 输出普通文本
echo $PATH 输出环境变量路径
16)head 显示文件的开头部分,默认情况下head指令显示文件的前10行内容
语法:
head 文件 查看文件头10行内容
head -n 5 文件 查看文件前5行内容
head -n 5 /etc/profile 查看/etc/profile的前面5行内容
17)tail 用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容
语法:(和head类似)
tail 文件 查看文件后10行内容
tail -n 5 文件 查看文件后5行内容
tail -f 文件 实时追踪该文档的所欲更新,工作中经常使用
tail -n 5 /etc/profile 查看/etc/profile的后面5行内容
18)ln 创建源文件的软链接也叫符号链接,类似于windows里的快捷方式
ln -s 源文件或目录 软链接名
ln -s /root/ myroot
rm -rf myroot 删除软链接,删除时,软链接后面不能加/
19)history 查看已经执行过历史命令,也可以执行历史命令
history 显示所有执行过的历史指令
history 10 显示最近执行的10个指令
!178 执行历史指令中178的指令
11. 时间日期类型的指令
1)date 显示当前日期
date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%s" 显示年月日时分秒
date +%y 显示年份的最后两个数,如:2018,就会显示18
date -s 字符串时间 设置日期指令
date -s "2018-04-12 12:20:00" 把时间设置成2018年4月12日12点20分
2)cal 查看日历指令
cal 显示当前的日历
cal 2020 显示2020年全年的日历
12. 搜索查找类指令
1)find 将从指定目录向下递归的遍历各个子目录,将满足添加的文件或目录显示在终端
find 搜索范围 选项
选项:
-name<查询方法> 按照指定的文件名查找模式查找
-user<用户名> 查找属于指定用户名所有文件
-size<文件大小> 按照指定的文件大小查找文件,+n大于 -n小于 n等于
find /home -name hello.txt
find /opt -user nobody 查找/opt目录下,用户名为nobody的文件
find / -size +20M 查找整个Linux系统下大于20M的文件
find /opt *.txt 查找/opt目录下,所有.txt文件
2)locate 快速定位文件路径
使用locate之前需要调用updatedb命令更新数据库
locate 文件名
3)grep和管道符号| grep过滤查找,管道符“|”表示将前一个命令的处理结果输出传递给后面的命令处理
grep 选项 查找内容 源文件
选项:
-n 显示匹配行及行号
-i 忽略字母大小写
cat hello.txt | grep -n yes 在hello.txt文件中,区分大小写查找"yes"所在行,并显示行号
cat hello.txt | grep -ni yes 在hello.txt文件中,不区分大小写查找"yes"所在行,并显示行号
4)
13. 压缩解压类指令
1)gzip/gunzip gzip只能用于压缩文件,gunzip只能用于解压文件
gzip 文件名 压缩文件,只能将文件压缩为*.gz文件
gunzip 文件.gz 解压缩文件命令
gzip /home/hello.txt 将/home/路径下的hello.txt压缩成hello.txt.gz文件,压缩后hello.txt文件就不存在了
gunzip /home/hello.txt.gz 将/home/路径下的hello.txt.gz文件解压成hello.txt文件
2)zip/unzip zip用于压缩文件,unzip用于解压文件,这个在项目打包中很有用
zip 选项 XXX.zip 将要压缩的内容 压缩文件和目录的命令
选项:
-r 递归压缩,即压缩目录
unzip 选项 XXX.zip 解压缩文件
选项:
-d 目录 指定解压后文件的存放目录
zip -r mypackage.zip /home/ 将/home/路径下的所有文件进行压缩成mypackage.zip文件
unzip -d /opt/tmp/ mypackage.zip 将mypackage.zip解压到/opt/tmp/路径下
3)tar 是打包指令,最后打包的文件是.tar.gz的文件
tar 选项 xxx.tar.gz 打包的内容 打包目录,压缩后的文件格式.tar.gz
选项:
-c 产生tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件
tar -zcvf a.tar.gz a1.txt a2.txt 压缩多个文件,将/home/a1.txt 和 /home/a2.txt 压缩成 a.tar.gz
tar -zcvf myhome.tar.gz /home/ 将/home 的文件夹压缩成 myhome.tar.gz
tar -zxvf a.tar.gz 将a.tar.gz解压到当前目录
tar -zxvf myhome.tar.gz -C /opt/ 将myhome.tar.gz 解压到 /opt/ 目录下,解压到指定的目录下要事先存在,不然会报错
4)
14. Linux的目录结构:https://blog.csdn.net/m0_38044196/article/details/72844025
______________
|------/bin User Binaries 用户的二进制文件,包含了二进制可执行文件
|------/sbin System Binaries 系统的二进制文件
|------/etc Configuration Files 配置文件,包含所有程序所需的配置文件,也包含了用于启动/停止单个程序的启动和关闭shell脚本
|------/dev Device Files 设备文件,包括终端设备、USB或连接到系统的任何设备
|------/proc Process Information 进程信息,包含系统进程的相关信息
|------/var Variable Files 变量文件,包括系统日志/var/log、包和数据库文件、电子邮件/var/mail、打印队列/var/spool、锁文件/var/lock、启动的临时文件/var/tmp
/-------|------/tmp Temporary Files 临时文件,包含系统和用户创建的临时文件,当系统重启时,这个目录下的文件将被删除
|------/usr User Programs 用户程序,包含二进制文件、库文件、文档和二级程序的源代码,/usr/bin中包含用户程序的二进制文件,/usr/sbin系统管理员的二进制文件
|------/home Home Directories 所有用户用home目录来存储他们的个人档案
|------/boot Boot Loader Files 包含引导加载程序相关的文件,内核的initrd、vmlinux、grub文件位于/boot下
|------/lib System Libraries 系统库,包含支持位于/bin和/sbin下的二进制文件的库文件
|------/opt Optional add-on Apps 可选的附加应用程序,opt代表可选的
|------/mnt Mount Directory 挂载目录,临时安装目录,系统管理员可以挂载文件系统
|------/media Removable Devices 可移动媒体设备,用于挂载可移动设备的临时目录。
|------/srv Service Data 服务数据,包含服务器特定服务相关的数据
________________
15. Linux组相关内容 在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所有组、其他组的概念
1)文件/目录所有者 一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。
1.1)查看文件的所有者 当某个用户创建了一个文件后,文件所在的所有人默认为该用户
ls -ahl 查看文件所有者命令,a:all h:humen l:list
创建一个组police,再创建一个用户tom,将tom放进police组,然后用tom创建一个ok.txt文件
a. groupadd police
b. useradd -g police tom
c. su - tom
d. touch ok.txt
e. ls -ahl
1.2)修改文件的所有者
chown 用户名 文件名
使用root创建一个apple.txt,然后将其所有者改为tom
a. touch apple.txt
b. chown tom apple.txt
c. ls -ahl
2)文件/目录所在组 当某个用户创建了一个文件后,文件所在的组默认为用户所在的组
2.1)查看文件/目录所在组
ls -ahl 查看文件所有者命令,a:all h:humen l:list(同查看文件的所有者命令)
2.2)修改文件/目录所在组
chgrp 组名 文件名
使用root用户创建文件orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到police组
a. touch orange.txt
b. ls -ahl
c. chgrp police orange.txt
d. ls -ahl
3)更改用户所在的组 在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在组。
3.1)usermod -g 组名 用户名
3.2)usermod -d 目录名 用户名 改变该用户登录的初始目录
创建一个土匪组(bandit),将tom从原来所在的police组,修改到bandit(土匪)组
16. 权限管理
1)权限的基本介绍
ls -l中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
0-9 10 11 12 13 14 15
0-9位说明:
a. 第0位确定文件类型(d(目录), -(普通文件), c(字符设备,如键盘、鼠标), b(块文件,如硬盘), l(软链接))
b. 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。---->user
c. 第4-6位确定所属组(同用户组)拥有该文件的权限。---->group
e. 第7-9位确定其他用户拥有该文件的权限。------>other
ps: r:4 w:2 x:1 rwx:7
rwx作用到文件:
r:read读权限,可以读取,查看
w:write写权限,可以修改,但是不代表可以删除该文件,删除一个文件的前提是对该文件所在的目录有写权限,才能删除该文件
x:execute执行权限,可以被执行
-:没权限
rwx作用到目录:
r:read读权限,可以读取,ls查看目录内容
w:write写权限,可以修改,目录内创建+删除+重命名目录
x:execute执行权限,可以进入该目录
-:没权限
10:如果是文件,表示硬链接的数量,一般值为1;如果是目录,代表着目录下的子目录个数(其中有两个目录是隐藏的:. 和 ..)
11:所有者
12:所属组
13:大小
14:最后修改时间
15:名称
2)权限管理 chmod 通过chmod指令,可以修改文件或者目录权限
2.1)+、-、=变更权限
u:所有者,g:所有组,o:其他人,a:所有人(u, g, o的总和)
a. chmod u=rwx,g=rx,o=x 文件目录名 给文件或目录设置权限rwxrx---x
b. chmod o+w 文件目录名 给文件或目录的其他人增加执行权限
c. chmod a-x 文件目录名 给所有的用户都去掉一个执行权限
chmod u=rwx,g=rx,o=rx abc 给abc文件设置所有者读写执行、所属组读执行、其他人读执行的权限
chmod u-x,g+w abc 给abc文件的所有者去除执行权限,增加组写的权限
chmod a+r 给abc文件的所有用户添加读的权限
2.2)通过数字变更权限
r:4,w:2,x:1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件名
相当于 chmod 751 文件名
chmod 755 /home/abc.txt 将/home/abc.txt文件的权限修改成rwxr-xr-x,使用数字的方式实现
3)修改文件所有者
3.1)chown newowner file 改变文件的所有者
3.2)chown newowner:newgroup file 改变文件的所有者和所有组
-R 如果是目录,则使其下的所有子文件或目录递归生效
chown tom /home/abc.txt 将/home/abc.txt 文件的所有者改为tom
chown -R tom /home/kkk 将/home/kkk 目录下所有的文档和目录的所有者都修改成tom
4)修改文件所有组
4.1)chgrp newgroup file 改变文件的所属组
-R 如果是目录,则使其下的所有子文件或目录递归生效
chgrp bandit abc.txt 把abc.txt文件的所在组修改成bandit(土匪)组
chgrp -R bandit kkk 把kkk目录下所有的文档和目录的所在组都修改成bandit(土匪)组
5)权限管理实践
police, bandit
jack,jerry:警察
xh,xd:土匪
(1) 创建组police和bandit
(2) 创建用户jack、jerry、xh、xq
(3) jack创建了一个文件,自己可以读写,本组人可以读,其他人没有任何权限
(4) jack修改该文件,让其他人可以读,本组人可以读写
(5) xh投靠警察,看看是否可以读写
a. groupadd police
b. groupadd bandit
c. useradd -g police jack
d. useradd -g police jerry
e. useradd -g bandit xh
f. useradd -g bandit xq
g. jack: touch jack01.txt
h. jack: chmod 640 jack01.txt
i. jack: chmod g+w,o+r jack01.txt
j. root: usermod -g police xh
k.
ps: 文件夹对应成员的权限为r-x时,用户才能进入该目录
17. crond 任务调度 进行定时任务的设置
1)概述
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:1.系统工作:有些重要的工作必须周而复始的执行。如病毒扫描等
2.个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
2)基本语法
crontab [选项]
常用选项:
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
crontab -e 编辑一个定时任务,在保存退出后就开始执行
crontab -l 列出当前有哪些任务调度
crontab -r 删除所有的任务调度
service crond restart 重启任务调度
3)入门案列
设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab -e命令。
接着输入任务到调度文件
如:*/1 * * * * ls -l /etc/ > /tmp/to.txt
意思说每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令
参数细节说明
项目 含义 范围
第一个"*" 一小时当中的第几分钟 0-59
第二个"*" 一天当中的第几小时 0-23
第三个"*" 一个月当中的第几天 1-31
第四个"*" 一年当中的第几月 1-12
第五个"*" 一周当中的星期几 0-7
参数特殊符号说明
* 代表任何时间,比如第一个"*"就代表着一小时中每分钟都执行一次的意思。
, 代表着不连续的时间。比如"0 8,12,16 * * * 命令",就代表着在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。比如"0 5 * * 1-6 命令",代表着周一到周六凌晨5点0分执行命令
*/n 代表着每隔多久执行一次。比如"*/10 * * * * 命令",代表每隔10分钟就执行一次命令
步骤:
a. crontab -e
b. 输入:*/1 * * * * ls -l /etc/ >> /tmp/to.txt
c. 保存退出后就生效
d. 在每一分钟都会自动的调用 ls -l /etc/ >> /tmp/to.txt 命令
特定时间执行案列
45 22 * * * 命令 在每天22点45分执行命令
0 17 * * 1 命令 在每周一的17点0分执行命令
0 5 1,15 * * 命令 在每月的1号15号的5点0分执行命令
40 4 * * 1-5 命令 在每周一到周五的4点40分执行命令
*/10 4 * * * 命令 在每天的4点每隔10分钟执行一次命令
0 0 1,15 * 1 命令 在每月1号和15号,每周1的0点0分都会执行一次命令
4)应用实例
案例1:每隔1分钟,就将当前的日期信息,追加到/tmp/mydate 文件中
a. 先编写一个文件 /home/mytask1.sh
date >> /tmp/mydate
b. 给mytask1.sh 一个可执行权限
chmod 744 mytask1.sh
c. crontab -e
d. */1 * * * * /home/mytask1.sh
e. 成功
案例2:每隔1分钟,将当前日期和日历都追加到/home/mycal 文件中
a. 先编写一个文件 /home/mytask2.sh
date >> /tmp/mycal
cal >> /tmp/mycal
b. 给mytask1.sh 一个可执行权限
chmod 744 mytasks.sh
c. crontab -e
d. */1 * * * * /home/mytask2.sh
e. 成功
案例3:每天凌晨2:00将mysql数据库testdb,备份到文件中 mydb.bak。
a. 先编写一个文件 /home/mytask3.sh
/usr/local/mysql/bin/mysqldump -uroot -proot testdb > /tmp/mydb.bak
b. 给mytask1.sh 一个可执行权限
chmod 744 mytask3.sh
c. crontab -e
d. 0 2 * * * /home/mytask3.sh
e. 成功
18. Linux磁盘分区、挂载
1)分区基础知识
分区的方式:
1.1)mbr分区:
1. 最多支持四个主分区
2. 系统只能安装在主分区
3. 扩展分区要占一个主分区
4. MBR最大只支持2TB,但拥有最好的兼容性
1.2)gtp分区:
1. 支持无限多个主分区(但操作系统可能限制,比如window下最多128个分区)
2. 最大支持18EB的大容量(1EB=1024PB,1PB=1024TB)
3. window7 64位以后支持gtp
2)Linux分区
原理介绍:
2.1)Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
2.2)Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
lsblk -f 查看系统的分区和挂载的情况
lsblk 可以查看分区的大小
ps:记忆命令的方法:老师不离开 lsblk
3) 挂载的经典案例
需求是给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk
3.1)如何增加一块硬盘
a. 虚拟机添加硬盘 通过虚拟机操作添加,然后重启centos系统
在[虚拟机]菜单中,选择[设置],然后在设备列表中添加硬盘,然后一路[下一步],中间只有选择磁盘大小的地方需要修改,直到完成,然后重启系统(才能识别)!
b. 分区 fdisk /dev/sdb
开始分区后输入n,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
c. 格式化 mkfs -t ext4 /dev/sdb1
d. 挂载 先创建一个目录/home/newdisk,挂载mount /dev/sdb1 /home/newdisk
e. 设置可以自动挂载(永久挂载,当你重启系统,仍然可以挂载到/home/newdisk)
1. vim /etc/fstab
2. 添加一个挂载记录,如:/dev/sdb1 /home/newdisk ext4 default 0 0
3. mount -a
ps: 卸载磁盘的命令 umount /home/newdisk
4)磁盘情况查询
4.1)查询系统整体磁盘使用情况
df -h
4.2)查询指定目录的磁盘占用情况
du 选项 /目录
选项:
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
案例:查询/opt/目录的磁盘占用情况,深度为1
du -ach --max-depth=1 /opt/
4.3)磁盘情况-工作实用指令
1)统计/home文件夹下文件的个数
ls -l /home | grep "^-" | wc -l
2)统计/home文件夹下目录的个数
ls -l /home | grep "^d" | wc -l
3)统计/home文件夹下文件的个数,包括子文件夹里的文件
ls -lR /home | grep "^-" | wc -l
4)统计文件夹下目录的个数,包括子文件夹里的
ls -lR /home | grep "^d" | wc -l
5)以树状显示目录结构
tree 显示根目录下的文件及目录树形结构
tree 目录 显示指定目录下的文件及目树形录结构
19. Linux网络配置
1)Linux网络配置原理图(含虚拟机)
目前我们的网络配置采用的是NAT模式。
2)查看网络IP和网关
3)ping 测试主机之间网络连通
4)Linux网络环境配置
4.1)自动获取
缺点:Linux启动后悔自动获取IP,缺点是每次自动获取的ip可能不一样,这个不适用于做服务器,因为我们的服务器的ip需要是固定的。
4.2)指定固定的ip
直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑vi /etc/sysconfig/network-scripts/ifcfg-eth0
要求:将ip地址配置成静态的,ip地址为192.168.184.130
ps:修改后需要重启一下服务,有两种方式:
1. 重启系统
2. 重启网络服务 :service network restart
20. 进程管理
1)基本介绍
1.1)在Linux中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
1.2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器
1.3)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
1.4)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,知道关机才结束。
2)显示系统执行的进程
基本介绍:
ps命令用来查看目前系统中,有哪些正在执行,以及它们执行的情况。可以不加任何参数。
ps显示的信息选项:
PID 进程识别号
TTY 终端机号
TIME 此进程所消耗cpu时间
CMD 正在执行的命令或进程名
ps -a 显示当前终端的所有进程信息
ps -u 以用户的格式显示进程信息
ps -x 显示后台进程运行的参数
说明:查看进程使用的指令是 ps,一般来说使用的参数是 ps -aux
ps详解:
a. 指令:ps -aux | grep xxx
USER PID %CPU %MEM VSZ RSZ TTY STAT START TIME COMMAND
System V展示风格
USER:用户名陈
PID:进程号
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TTY:终端名称,缩写
STAT:进程的状态 S:休眠 s:是会话的先导进程 N:拥有比普通优先级更低的优先级 R:正在运行 D:短期等待 Z:僵尸进程 T:被跟踪或被停止
START:进程的启动时间
TIME:进程使用cpu的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
3)应用实例
要求:以全格式显示当前所有的进程,查看进程的父进程
ps -ef 是以全格式显示当前所有的进程
-e 显示所有进程 -f 全格式
ps -ef | grep xxx
是BSD风格
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算机执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会越低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
思考:如果我们希望查看sshd进程的父进程号是多少,应该怎样查询?
ps -ef | grep sshd
4)终止进程kill和killall
4.1)介绍
若是某个进程执行一般需要停止时,或是已消耗了很大的系统资源时,此时可以考虑停止该进程,使用kill命令来完成此项任务。
4.2)基本语法
kill 选项 进程号 通过进程号杀死进程
killall 进程名称 通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
4.3)常用选项
-9 表示强迫进程立即停止
4.4)最佳实践
案例1:踢掉某个非法登录用户
a. ps -aux | grep sshd 找到对应的进程id
b. kill 4010 kill掉进程id对应的进程
案例2:终止远程登录服务sshd,在适当时候再次重启sshd服务
a. ps -aux | grep sshd 找到对应的进程id
b. kill 3908 kill掉进程id对应的进程
案例3:终止多个gedit编辑器[killall,通过进程名陈来终止进程]
a. killall gedit
案例4:强制杀掉一个终端
a. ps -aux | grep bash 查到终端对应的进程ID
b. kill -9 4090 强制kill掉进程id对应的进程
4.5)查看进程树pstree
基本语法:
pstree 选项 可以更加直观的来看进程信息
选项:
-p :显示进程的PID
-u :显示进程的所属用户
应用场景:
案例1:请你树状的形式显示进程的pid
pstree -p
案例2:请你树状的形式显示用户的id
pstree -u
PS:安装pstree的指令是:yum install psmisc
5)服务(service)管理
5.1)介绍
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysql,sshd,防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
5.2)service管理指令
service 服务名 start | stop | restart | reload | status
在centos7.0后不再使用service,而是用systemctl
5.3)使用案例
1)查看当前防火墙的状况,关闭防火墙和重启防火墙。
5.4)细节讨论
1)关闭或者启用防火墙后,立即生效。[telnet 测试某个端口即可]
2)这种方式知识临时生效,当重启系统后,还是回归以前对服务器的设置。
3)如果希望设置某个服务自启动或关闭永久生效,要使用chkconfig指令
5.5)查看服务名:
方式1:使用setup->系统服务 就可以看到
方式2:/etc/init.d/服务名称
ls -l /etc/init.d/ 列出系统有哪些服务
5.6)服务的运行级别(runlevel):
1)查看或者修改默认级别:vi /etc/inittab
2)Linux系统有7种运行级别(runlevel):常用的级别是3和5
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
3)开机的流程说明:
开机->BIOS->/boot->init进程->运行级别->运行级别对应的服务
4)chkconfig指令
介绍:
通过chkconfig命令可以给各个运行级别设置自启动/关闭
基本语法
a. 查看服务 chkconfig --list | grep xxx
b. chkconfig 服务名 --list
c. chkconfig --level 5 服务名 on/off
PS: 在Centos7.0 开始,换成了systemctl命令,具体操作请找度娘
如:chkconfig --list -> systemctl list-unit-files
chkconfig --level 5 sshd off -> systemctl disable sshd.service
chkconfig --level 5 sshd on -> systemctl enable sshd.service
chkconfig --list | grep sshd -> systemctl list-dependencies sshd
应用实例:
案例1:请显示当前系统所有服务的各个运行级别的运行状态
chkconfig --list
案例2:请查看sshd服务的运行状态
service sshd status
案例3:将sshd服务在运行级别5下设置为不自动启动,看看有什么效果?
chkconfig --level 5 sshd off
案例4:当运行级别为5时,关闭防火墙
chkconfig --level 5 iptables off
案例5:在所有运行级别下,关闭防火墙
chkconfig iptables off
案例6:在所欲运行级别下,开启防火墙
chkconfig iptables on
使用细节:
a. chkconfig重新设置服务后自启动或关闭,需要重启机器reboot才能生效
6)动态监控进程
6.1)介绍
top与ps命令很相似,他们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
6.2)基本语法
top 选项
6.3)选项说明
-d 秒数 指定top命令每隔几秒更新。默认是3秒,在top命令的交互模式当中可以执行的命令。
-i 使top不显示任何闲置或者僵尸进程
-p 通过指定监控进程ID来仅仅监控某个进程的状态
6.4)交互操作说明
P 以cpu使用频率排序,默认就是此项
M 以内存的使用频率排序
N 以PID排序
q 退出top
6.5)应用案例
案例1:监视特定用户
top: 输入此命令,按回车键,查看执行的进程
u: 然后输入"u"回车,再输入用户名,即可
案例2:终止指定的进程
top: 输入此命令,按回车键,查看执行的进程
k: 然后输入"k"回车,再输入要结束
案例3:指定系统状态更新的时间(每隔10秒自动更新)
top -d 10
6.6)top显示的内容解释
top 20:51:22 up 3:22, 3USERS, load average: 0.35, 0.24, 0.30
(当前时间,系统运行时间,当前登录系统用户数量,负载均衡(三个数加在一起除以3超过0.7时,说明系统有点不稳定了))
Tasks: 204 total, 1 running, 203 sleeping, 0 stopped, 0 zombine
(总任务数量,正在运行的任务数量,挂载的任务数量,停止,僵尸)
Cpu(s): 0.8%us, 0.5%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
(用户占用的cpu,系统占用的cpu,,空闲的,)
Mem: 2038376K total, 783520k used, 1254856k free, 29636k buffers
(内存的总大小,使用了多少,还有多少空闲,)
Swap: 2097148k total, 0k used, 2097148k free, 389404k cached
(内存不够用了才会用swap分区)
7)监控网络状态
查看系统网络情况netstat
7.1)基本语法
netstat 选项
netstat -anp | more 常用指令,查看所有网络服务
7.2)选项说明
-an 按一定顺序排列输出
-p 显示哪个进程在调用
7.3)应用实例
请查看服务名为sshd的服务的信息
7.4)检测主机连接命令ping:
是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的介质是否为断、网线是否脱落或网卡故障
如:ping对方ip地址
7.5)
21. RPM和YUM
1)rpm包的管理
1.1)介绍
一种用于互联网下载包的打包及安装工具,它包含在某些Linux发布版本中。它生成具有.RPM扩展名的文件。
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
1.2)rpm包的简单查询指令:
查询已安装的rpm列表 rpm -qa | grep xxx
1.3)rpm包名基本格式
一个rpm保命:firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用操作系统:el6.centos.x86_64 表示centos6.x的64位系统
如果是i686、i386表示32位系统,noarch表示通用
1.4)rpm包的其它查询指令:
rpm -qa 查询所安装的所有rpm软件包
rpm -qa | more 分页显示
rpm -qa | grep XX 如:rpm -qa | grep firefox
rpm -q 软件包名 查询软件包信息
rpm -q firefox
rpm -qi 软件包名 查询安装的rpm包软件的信息
rpm -qi file
rpm -ql 软件包名 查询rpm包的文件安装到哪里去了
rpm -ql firefox
rpm -qf 文件全路径名 查询某个文件属于哪个rpm包
rpm -qf /etc/passwd
rpm -qf /root/install.log
1.5)卸载rpm包
基本语法:
rpm -e RPM包的名称
应用案例
1)删除firefox软件包
细节讨论
1)如果其他软件包依赖于你要卸载的软件包,卸载时则会产生错误信息。
如:rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
2)如果我们就是要删除foo这个rpm包,可以增加参数--nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件的程序可能无法运行
如:rpm -e --nodeps foo
1.6)安装rpm包
基本语法:
rpm -ivh RPM包全路径名称
参数说明:
i=install 安装
v=verbose 提示
h=hash 进度条
应用实例:
1)演示卸载和安装firefox浏览器
a. 先找到firefox的安装rpm包,需要挂载上我们安装centos的iso文件,然后到/media/下去找rpm包。
b. cp firefox-45.0.1-1.el6.centos.x86_64.rpm /opt/
c. rpm -ivh firefox-45.0.1-1.el6.centos.x86_64.rpm
2)yum
介绍:
YUM是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
yum的基本指令:
查询yum服务器是否有需要安装的软件
yum list | grep XX 软件列表
安装指定的yum包
yum install XXX 下载安装
yum应用实例:
案例:请使用yum的方式来安装firefox
a. 先查看一下firefox rpm 在yum 服务器上是否存在
yum list | grep firefox
b. 安装
yum install firefox 会安装最新版本
22. Linux之JavaEE定制篇
1)概述
如果在Linux下进行JavaEE的开发,我们需要安装如下软件:
mysql-5.6.14.tar.gz
jdk-7u79-linux-x64.gz
eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz
apache-tomcat-7.0.70.tar.gz
2)安装JDK
安装步骤
a. 先将软件通过xftp5上传到/opt/路径下
b. 解压缩到/opt/路径下
c. 配置环境变量的配置文件vim /etc/profile
d. JAVA_HOME=/opt/jdk1.7.0_79
e. PATH=/opt/jdk1.7.0_79/bin:$PATH
f. export JAVA_HOME PATH
g. 需要注销用户,环境变量才能生效
测试是否安装成功
编写一个简单的hello.java 输出"hello, world!"
3)安装tomcat
安装步骤
a. 解压缩到/opt/路径下
tar -zxvf apach-tomcat-7.0.70.tar.gz
b. 启动tomcat ./startup.sh
先进入tomcat的bin目录:cd apach-tomcat-7.0.70/bin/
c. 开放端口,这样外网才能访问tomcat
vim /etc/sysconfig/iptables
增加一行:A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
重启防火墙:service iptables restart
测试是否安装成功
在windows或linux下访问http://linuxip:8080
4)Eclipse安装
安装步骤
a. 解压缩到/opt/路径下
tar -zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz
b. 启动eclipse,配置jre和server
c. 编写hello world程序并测试
d. 编写jsp页面,并测试
5)mysql5.6的安装和配置,安装包地址:https://pan.baidu.com/s/1powjyUaS_Sh__ydReComRw
CentOS 6.8 下编译安装MySQL5.6.14
概述:
通过源代码安装高版本的5.6.14
正文:
一:卸载旧版本
使用下面的命令检查是否安装有MySQL Server
rpm -qa | grep mysql
有的话通过下面的命令来卸载掉
目前我们查询到的是这样子的:
[root@hsp ~]#rpm -qa | grep mysql
mysql-libs-5.1.73-7.el6.x86_64
如果查询到了,就删除吧
rpm -e mysql_libs // 普通删除模式
rpm -e --nodeps mysql_libs // 强力删除模式,如果使用上面命令删除时,提示有依赖的其他文件,则用该命令可以对其进行强力删除
二:安装MySQL
安装编译代码需要的包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
下载MySQL 5.6.14 [这里我们已经下载好了,看软件文件夹],MySQL 5.6.14的路径:
进入mysql压缩包所在的路径:cd /opt/
tar -zxvf mysql-5.6.14.tar.gz
cd mysql-5.6.14
编译安装[源码-》编译]
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
编译并安装
make && make install
整个过程需要30分钟左右。
三:配置MYSQL
设置权限
使用下面的命令查看是否有mysql用户及用户组
cat /etc/passwd 查看用户列表
cat /etc/group 查看用户组列表
如果没有就创建
groupadd mysql
useradd -g mysql mysql
修改/usr/local/mysql权限
chown -R mysql:mysql /usr/local/mysql
初始化配置,进入安装路径(再执行下面的指令),执行初始化配置脚本,创建系统自带的数据库和表
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
注:在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc/目录下查找,找不到则会搜索"$basedir/my.cnf",在本例中就是/usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置!
注意:在CentOS 6.8 版操作系统的最小安装完成后,在/etc/目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。
mv /etc/my.cnf /etc/my.cnf.bak
启动 MySQL
添加服务,拷贝服务脚本到init.d目录,并设置开机启动
[注意在/usr/local/mysql下执行]
cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start 启动MySQL
执行下面的命令修改root密码
cd /usr/local/mysql/bin
./mysql -uroot
mysql>SET PASSWORD = PASSWORD('root');
通过vim /etc/profile,添加环境变量
PS:CentOS 7 MySQL安装,亲测可用:https://www.cnblogs.com/chxuyuan/p/7707392.html
6)
23. Linux之大数据定制篇
大数据定制篇-Shell编程
1)为什么要学习Shell编程
1.1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
1.2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或是服务器的维护,比如编写一个定时备份数据库的脚本。
1.3)对于大数据程序员来说,需要编写Shell程序来管理集群。
2)Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
3)Shell编程快速入门---Shell脚本的执行方式
a. 脚本格式要求
1)脚本以#!/bin/bash开头
2)脚本需要有可执行权限
b. 编写第一个Shell脚本
需求说明
创建一个Shell脚本,输出hello world
1. 编写一个shell文件:vim myShell.sh
2. 输入内容
#!/bin/bash
echo "hello,world"
保存并退出
3. 更改权限,使之有可执行的权限
chmod 744 myShell.sh
4. 执行可执行文件,即myShell.sh文件
./myShell.sh
c. 脚本的常用执行方式
方式1(输出脚本的绝对路径或相对路径)
1)首先要赋予helloworld.sh 脚本的+x权限(可执行)
chmod u+x helloworld.sh
2)执行脚本
./helloworld.sh
方式2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。
sh helloworld.sh
4)Shell的变量
4.1)Shell的变量的介绍
1)Linux Shell中的变量分为:系统变量和用户自定义变量。
2)系统变量:$HOME、$PWD、$SHELL、$USER等等
比如:echo $HOME 等等
3)显示当前Shell中所有变量: set
4.2)Shell变量的定义
基本语法:
1)定义变量:变量=值
2)撤销变量:unset 变量
3)声明静态变量:readonly变量,注意:不能unset
快速入门:
案例1:定义变量A
A=100 定义变量A
echo "A=$A" 输出变量A的值
结果:A=100
案例2:撤销变量A
unset A 注销变量A
echo "A=$A" 输出变量A的值
结果:A=
案例3:声明静态的变量B=2,不能unset
readonly B=2 定义静态变量
echo "B=$B" 输出静态变量
unset B 注销静态变量,会出错,静态变量不能注销
echo "B=$B"
案例4:可把变量提升为全局环境变量,可提供其他shell程序使用
4)定义变量的规则
a. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
b. 等号两侧不能有空格
c. 变量名称一般习惯为大写
5)将命令的返回值赋给变量(重点)
a. A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
b. A=$(ls -la) 等价于反引号
PS:反引号是键盘的左上角,Esc下面的那个键,引文状态下点击即可`
5)Shell设置环境变量
5.1)基本语法
1)export 变量名=变量值 将shell变量输出为环境变量
2)source 配置文件 让修改后的配置信息立即生效
3)echo 变量名 查询环境变量的值
5.2)快速入门
1)在/etc/profile文件中定义TOMCAT_HOME环境变量
a. vim /etc/profile
b. 在末尾添加 TOMCAT_HOME=/opt/tomcat
c. source /etc/profile
2)查看环境变量TOMCAT_HOME的值
echo $TOMCAT_HOME
3)在另外一个shell程序中使用TOMCAT_HOME
a. vim myShell.sh
b. 在里面输入 echo "TOMECAT_HOME=$TOMECAT_HOME"
c. ./myShell.sh
注意:在输出TOMCAT_HOME环境变量前,需要让其生效
source /etc/profile
PS:# 被注释的内容 是单行注释
:<<! 开始
被注释的内容
! 结束
6)位置参数变量
6.1)介绍
当我们执行一个shell脚本时,如果希望获取命令行的参数信息,就可以使用到位置参数变量
比如:./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
6.2)基本语法
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数
$# 这个变量代表命令行中所有参数的个数
6.3)位置参数变量
应用案例
案例:编写一个shell脚本positionPara.sh,在脚本中获取到命令行的各个参数信息。
a. vim positionPara.sh
b. 输入
#!/bin/bash
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
保存并退出
c. 使文件拥有可执行权限 chmod 744 positionPara.sh
d. 执行 ./positionPara.sh 30 60
e. 结果
./positionPara.sh 30 60
30 60
30 60
参数个数=2
7)预定义变量
7.1)基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
7.2)基本语法
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;否则(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
7.3)应用实例
在一个shell脚本中简单使用一下预定义变量
a. vim preVar.sh
b. 输入
#!/bin/bash
echo "当前的进程号=$$"
#后台的方式运行 myShell.sh
./myShell.sh &
echo "最后的进程号=$!"
echo "执行的值=$?"
c. 使文件拥有可执行权限 chmod 744 preVar.sh
d. 执行 ./preVar.sh
e. 结果
当前的进程号=22083
最后的进程号=22084
执行的值=0
8)运算符
8.1)基本介绍
学习如何在shell中进行各种运算符操作
8.2)基本语法
1)"$((运算符))"或"$[运算符]"
2)expr m + n
注意expr运算符间要有空格
3)expr m - n
4)expr \*,/,% 乘,除,取余
应用实例
案例1:计算(2+3)*4的值
1. $(运算符)
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
2. $[运算式]
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"
3. expr
TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"
案例2:请求出命令行的两个参数[整数]的和
SUM=$[$1+$2]
echo "sum=$SUM"
9)条件判断
9.1)判断语句
[ condition ] 注意condition前后要有空格
#非空返回true,可使用$?验证(0为true,>1为false)
9.2)实用案例
[ atguigu ] 返回true
[] 返回false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
10)条件判断
10.1)判断语句
常用判断条件
1)两个整数的比较
= 字符串比较
-lt 小于 little
-le 小于等于 little equal
-eq 等于 equal
-gt 大于 greater
-ge 大于等于 greater equal
-ne 不等于 not equal
2)按照文件权限进行判断
-r 有读权限
-w 有写权限
-x 有执行权限
3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件 file
-e 文件存在 exit
-d 文件存在并且是一个目录 directory
4)应用实例
案例1:"ok"是否等于"ok"
a. vim judge.sh
b. 输入
#!/bin/bash
if [ "ok" = "ok" ]
then
echo "equal"
fi
保存并退出
c. 更改权限,使之有可执行的权限 chmod 744 judge.sh
d. ./judge.sh
e. 结果
equal
案例2:23是否大于等于22
a. vim judge.sh
b. 输入
if [ 23 -ge 22 ]
then
echo "23>=22"
fi
保存并退出
c. ./judge.sh
d. 结果
23>=22
案例3:/root/shell/aaa.txt目录中的文件是否存在
a. vim judge.sh
b. 输入
if [ -e /root/shell/aaa.txt ]
then
echo "exit"
fi
保存并退出
c. ./judge.sh
d. 结果
exit
PS:if条件的格式是
if [ condition ] // 条件判断
then // 满足条件则进行相应处理
fi // 条件结束,final
11)if 判断
11.1)基本语法
if [ condition ];then
程序
fi
或者
if [ condition ]
then
程序
elif [ condition ]
then
程序
fi
注意事项:
(1) [ condition ],中括号和condition之间必须有空格
(2) 推荐使用第二种
11.2)应用实例
案例:请编写一个shell程序,如果输入的参数大于等于60,则输出"及格了",如果小于60,则输出"不及格"
a. vim testIf.sh
b. 输入
#!/bin/bash
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
保存并退出
c. 更改权限,使之有可执行的权限 chmod 744 testIf.sh
d. 执行 ./testIf.sh 67
e. 结果
"及格了"
12)case 语句
12.1)基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值1,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
12.2)应用实例
案例1:当命令行参数是1时,输出"周一",是2时,就输出"周二",其它情况输出"other"
a. vi testCase.sh
b. 输入
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其它"
;;
esac
c. 更改权限,使之有可执行的权限 chmod 744 testCase.sh
d. 执行 ./testCase.sh 1
e. 结果
周一
13)for 循环
13.1)基本语法1
for 变量 in 值1 值2 值3 ...
do
程序
done
13.2)应用案例
案例1:打印命令行输入的参数
a. vim testFor.sh
b. 输入
#!/bin/bash
for i in "$*" // 或用 for i in "$@" 也可以,只不过$*是输出一行,而$@是每个参数输出一行
do
echo "the num is $i"
done
退出并保持
c. 更改权限,使之有可执行的权限 chmod 744 testFor.sh
d. 执行 ./testFor.sh 1 2 3
e. 结果
// 用$*输出的结果
the num is 1 2 3
// 用$@输出的结果
the num is 1
the num is 2
the num is 3
13.3)基本语法2
for((初始值;循环控制条件;变量变化))
do
程序
done
13.4)应用案例
案例1:从1加到100的值输出显示[这里可以看出$*和$@的区别]
a. vim testFor2.sh
b. 输入
#!/bin/bash
SUM=0
for((i=0;i<=100;++i))
do
SUM=$[$SUM+$i]
done
echo "SUM=$SUM"
保持并退出
c. 更改权限,使之有可执行的权限 chmod 744 testFor2.sh
d. 执行 ./testFor2.sh
e. 结果
SUM=5050
14)while 循环
14.1)基本语法1
while[条件判断式]
do
程序
done
14.2)应用实例
案例1:从命令行输入一个数n,统计从1+..+n的值是多少?
a. vim testWhile.sh
b. 输入
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "SUM=$SUM"
保持并退出
c. 更改权限,使之有可执行的权限 chmod 744 testWhile.sh
d. 执行 ./testWhile.sh 10
e. 结果
SUM=55
15)read读取控制台输入
15.1)基本语法
read [选项] {参数}
选项:
-p 指定读取值时的提示符
-t 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数
变量 指定读取值得变量名
15.2)应用实例
案例1:读取控制台输入一个num值
a. vim testRead.sh
b. 输入
read -p "请输入一个数num1=" NUM1
echo "你输入的值是num1=$NUM1"
保存并退出
c. 更改权限,使之有可执行的权限 chmod 744 testRead.sh
d. 执行
./testRead.sh
123
e. 结果
你输入的值是num1=123
案例2:读取控制台输入一个num值,在10秒内输入
a. vim testRead.sh
b. 输入
read -t -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"
保存并退出
c. 执行 ./testRead.sh 不输入内容,等待10秒
d. 结果
请输入一个数num2=你输入的值是num2=
16)系统函数
16.1)函数介绍
shell编程和其他编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里只学习两个。
16.2)basename基本语法
功能:返回完整路径最后/的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
16.3)应用实例
案例1:请返回/home/aaa/test.txt的"test.txt"部分
a. basename /home/aaa/test.txt
b. 显示 test.txt
c. basename /home/aaa/test.txt .txt
d. 显示 test
16.4)dirname 基本用法
功能:返回完整路径最后/的前面的部分,常用于返回路径部分
dirname 文件绝对路径 从给定的包含绝对路径的文件名中取出文件名(非目录的部分),然后返回剩下的路径(目录的部分)
16.5)应用案例
案例1:请返回 /home/aaa/test.txt 的/home/aaa
a. dirname /home/aaa/test.txt
b. 显示 /home/aaa
17)自定义函数
17.1)基本语法
function funname()
{
Action;
[return int;]
}
调用直接写函数名:funname [值]
17.2)应用案例
案例1:计算输入两个参数的和,getSum
a. vim testFun.sh
b. 输入
#!/bin/bash
function getSum()
{
SUM=$n1+$n2
echo "sum=$SUM"
}
read -p "请输入第一个参数n1=" n1
read -p "请输入第一个参数n2=" n2
getSum $n1 $n2
保存并退出
c. 更改权限,使之有可执行的权限 chmod 744 testFun.sh
d. 执行 ./testFun.sh
90
10
e. 结果
sum=100
18)Shell编程的综合案例
18.1)需求分析
1)每天凌晨2:10分备份数据库atguiguDB到/data/backup/db
2)备份开始和备份结束能够给出相应的提示信息
3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如2018-03-12_230210.tar.gz
4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
18.2)实现流程
a. vim mysql_db_backup.sh
b. 输入内容如下:
#!/bin/bash
#完成数据库的备份
#备份数据库
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=${date +%Y-%m-%d_%H%M%S}
#可以输出变量进行调试
echo ${DATETIME}
echo "-------------begin-------------"
echo "-----------开始备份------------"
#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME 也可以直接使用 rm -rf $DATETIME
#删除十天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "----------备份结束-----------"
c. 更改权限,使之有可执行的权限 chmod 744 mysql_db_backup.sh
d. crontab -e
e. 输入
10 2 * * * /usr/sbin/mysql_db_backup.sh
f. 结束
24. Linux之Python定制篇
1)Ubuntu介绍
Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。
专业的Python开发者一般会选择Ubuntu这款Linux系统作为生产平台。
温馨提示:
Ubuntu和Centos都是基于GNU/Linux内核的,因此基本使用和Centos是几乎一样的,他们的各种指令可以通用,只是界面和预安装的软件有所差异
Ubuntu下载地址:http://cn.ubuntu.com/download/
2)Ubuntu安装
3)Ubuntu的root用户,给root用户设置密码并使用
a. 输入 sudo passwd 命令,输入一般用户密码并设定root用户密码
b. 设定 root 密码成功后,输入 su 命令,并输入刚才设定的root密码,就可以切换成root了。提示符$代表一般用户,提示符#代表root用户。
c. 输入exit命令,退出root并返回一般用户
d. 以后就可以使用root用户了
4)Ubuntu下开发Python
4.1)说明
安装好Ubuntu后,默认就已经安装好Python的开发环境[Python2.7 和 Python3.5]。
4.2)在Ubuntu下开发一个Python程序
a. vim hello.py 编写hello.py
提示:如果Ubuntu上没有vim,我们可以根据提示信息安装一个vim apt install vim
b. 输入
print("hello,world!")
c. python3 hello.py 运行hello.py
d. 结果
hello,world
5)Python定制篇-APT软件管理和远程登录
5.1)apt介绍
apt是Advanced Packaging Tool的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令可用于软件包的安装、删除、清理等,类似于Windows中的软件管理工具。
Ubuntu的软件管理示意图(略)
5.2)Ubuntu软件曹组的相关命令
sudo apt-get update 更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-cache search package 搜索软件包
sudo apt-cache show 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 查看该包被哪些包依赖
sudo apt-get source package 下载该包的源代码
5.3)寻找国内的镜像源
https://mirrors.tuna.tsinghua.edu.cn/
所谓的镜像源:可以理解为提供下载软件的地方,比如Android手机上可以下载软件的安卓市场;ios手机上可以下载软件的AppStore
5.4)Ubuntu软件安装、卸载的最佳实践
案例说明:使用apt完成安装和卸载vim软件,并查询vim软件的信息
sudo apt-get remove vim
sudo apt-get install vim
sudo apt-cache show vim
6)ssh远程登录Ubuntu
6.1)ssh介绍
SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group) 所制定;SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。几乎所有Unix平台--包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。
和CentOS不一样,Ubuntu默认没有安装SSHD服务,因此,我们不能进行远程登录。
6.2)使用ssh远程登录Ubuntu
1)安装SSH和启用
sudo apt-get install openssh-server
执行上面的指令后,在当前这台Linux上就安装了SSH服务端和客户端
service sshd restart
执行上面的指令,就启动了sshd服务。会监听端口22
2)在Windows上使用xshell5或xftp5登录Ubuntu
3)从Linux系统客户机远程登录Linux系统服务机
首先,我们需要在Linux的系统客户机也要安装openssh-server
基本语法:
ssh 用户名@IP
例如: ssh atguigu@192.168.188.130
使用ssh访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决。
登出命令:
exit或者logout
6.3)
7)