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:# 被注释的内容 是单行注释 :<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

转载于:https://my.oschina.net/u/3892643/blog/1834421

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值