1.什么是shell?
科学解释: 在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
通俗解释:Shell是命令解释器,解释我们输入的命令或者脚本。
两种模式:交互模式:终端等待我们输入命令,输入命令,执行我们所输入的命令并且把结果反馈给我们,关闭终端,中断该模式。
非交互模式:它会去执行我们所写好的命令(放入到文本里),这就是Shell脚本,执行到最后一条,shell退出。
2.什么是Shell脚本?
把能执行的命令放在一个文件里,这就是shell脚本,包含了判断语句,循环语句,数组函数等等。
3.创建Shell脚本(规范)
1.脚本必须放在同一个目录/server/scripts
2.脚本开头必须写解释器
3.脚本名称的结尾必须以.sh结尾
4.结尾中写注释作者的名字创建时间 脚本的用处联系方式
#Author JiaWei
#create time 2018.11.26
#cut log
#QQ 邮件
5.成对的符号一次性书写完毕“” ‘’ {} []
6.循环语句一次性书写完毕 for i in ; do ;done
7.注释尽量不适用中文
8.内容缩进
关于基础shell语句 讲的很好的一个网址
linux20个常用命令_常用shell命令-腾讯云开发者社区-腾讯云
bin:binary——存放二进制文件,可以被运行
dev:device——存放外接设备(磁盘,光盘),不能被直接使用,需要被挂载——#mount
etc:存放配置文件,例如网站解析软件的配置文件,数据库的配置文件,各类插件
home:存放,除roo用户t外其他用户的家目录
mnt:当外接设备需要挂载的时候,需要挂载到/mnt目录下对应目录(必须是挂载到目录)
proc:process——存放Linux运行时的进程
root:该目录是root用户自己的家目录
sbin:super binary——存放可以被执行的二进制文件(必须有超级管理员权限的用户才能执行)
tmp:临时文件,系统运行时候产生的临时文件
usr:用户自己安装的软件——类似windows下的program files
var:存放程序/系统的日志文件的目录
Linux基本指令
- Linux命令的标准格式
一.基础指令
- 相对路径:得有一个参照(一般为当前的工作路径)——(前面用符号./或者 . . /)
- 绝对路径:从根开始找,不需要参照(前面要用符号 /)



03:#ls -lh 路径
列出指定路径下的所有文件、文件夹的名称,以列表的形式并且在显示文档的大小时,以可读性较高的形式显示
(h:文件大小带单位了,自动适配合适单位)
一般linux中的目录大小都为4k
2.pwd命令
用法:无参数,print working diretory 打印当前所在目录
3.cd命令——改变目录
change directory:
格式:#cd 路径
案例1:当前在“/”下,需要使用绝对路径切换到/usr /local ——# cd /usr /local 案例2:快速切换到当前用户的家目录——#cd ~:
4.mkdir—— 创建目录
make directory
格式1:#mkdir 路径(可以是文件夹名称,也可以是完整的包含名称的路径)
eg.在当前路径下创建目录 wenjian1——#mkdir wenjian1(验证:#ls)
(关于ls列出的文件:蓝色表示文件夹,黑色表示文件,绿色文件表示拥有所有权限的文件)
eg.在指定路径下创建目录wenjian2——#mkdir /root/yunwen
- 格式2:#mkdir -p 路径——用于创建多级目录
- 格式3:#mkdir 路径1+空格+路径2 ——一次性创建多个目录
- 格式1:#touch 文件路径(路径可以是文件名,也可以是带有文件名的完整路径)
- 格式2:#touch 文件1 文件2——可以一次创建多个文件
- 格式:#cp +文档名(可包含路径)+ 目标位置
- windows中复制文件时不能同时改名,只能后面再重命名。Linux中cp命令是可以复制时同时改名的,但不建议这么做
- 当使用cp命令进行文件夹多级复制时需要添加选项 -r,否则文件夹将被忽略复制 (-r的意思是递归复制,recursive递归的,文件夹类型下面可能还有文件夹,此处可以理解为递归)
- 与上面mkdir命令的创建多级文件夹相区别mkdir是-p,cp是 -r
- -r——删除目录
- -f ——force强制删除文件,不用回复yes
- -rf——强制删除目录(递归删除,不用确认)
- -vf——强制删除,可视化(v-view)
- ‘>’ 覆盖源文件内容的输出
- ‘>>’在源文件末尾追加的输出 (两个>记忆为加加,就是追加)
- 作用1:直接打开文件
- 作用2:对文件进行合并(配合输出重定向)
二.进阶指令
1.df指令——查看磁盘空间
格式:#df -h(不加-h没有单位,默认字节,加-h以合适的单位显示)
2.free指令——查看当前内存的使用情况
格式:
free (单位:无,默认字节)
free -m (单位:M)—— 常用
free -g (单位:G)
free -h(单位:自动)
(swap:缓存空间,当系统真实内存不够用时可以临时使用磁盘空间(外存)来充当内存,但是速度慢)
3.head指令——查看文件的前n行(默认n为10)
格式:#head -n 文件路径
4.tail指令——查看文件的末n行(默认10)
格式1:#tail -n 文件路径 (-1表示最后一行) 格式2:#tail -f 文件路径 —— 查看一个文件的动态变化 (变化内容不能是在命令行外手动添加的,需要启动另一个命令行对该文件操作,可以看到变化)
#tail -f 一般是用于查看系统日志,这个文件经历了哪些操作(类似历史记录)
- 数字加回车:从某行开始展现
- 空格:一页一页展示
- 上下方向键:上一行,下一行
- #wc 文件路径 ——行数,单词数,字节数
- #wc -l 文件路径 ——行数(常用)
- #wc -w 文件路径——单词数(依照空格来区分识别单词,并不实用)
- #wc -c 文件路径——字节数
7.date指令——日期作用:读取和设置时间(一般不用设置,直接同步网络)- 格式1:#date 输出:2021年 12月 14日 星期二 00:21:46 PST (PST指太平洋标准时间,CST指中国标准时间)
补充: 更改时区——使用timedatectl命令# timedatectl set-timezone Asia/Shanghai #设置亚洲上海时区
- 格式2:#date +%F(或#date “+%Y-%M-%d”) 输出:2021-12-14
- 格式3:#date “+%F %T”(或#date “+%Y-%m%d %H:%M:%S”) 输出:2021-12-14 00:32:42
- 格式4:获取指定时间间隔前后的时间(用于备份) #date -d “-1 day” “+%Y-%m-%d %H:%M:%S” ——前一天的这个时间(day可以改为,month,year)
上面的+号不是连接的意思,是格式中必须有的,并且后面字母的大小写一定要规范,详情可以#date –help
备注:%F:表示完整的年月日,等同%Y%m%d%T:表示完整的时分秒,等同%H%M%S%Y:四位年份%m:两位月份(带前导0)%d:两位日期(带前导0)%H:两位小时(带前导0)%M:两位分钟(带前导0)%S:两位秒数(带前导0)8.cal指令——操作日历calendar格式1:#cal——输出当前所在月份的日历(等同于#cal -1)格式2:#cal -3 ——输出最近三个月的日历(上个月 本月 下个月)格式3:#cal -y 年份——输出某一年份的日历9.clear/ctrl+l 指令作用:清除终端中已经存的命令和结果(信息)(注意:该命令并没有清除所有信息,只是起到了一个翻页效果)10.管道管道的符号:一根竖线“|”管道的作用: “过滤“,”特殊用法“,”扩展处理“格式:管道不能单独使用,必须配合前面的其他指令,主要是辅助作用
- eg1.通过管道查询出根目录下,包含”y”字母的文档名称
” # ls / |grep y“,观察这个指令——意思是:从ls列出的信息中筛选出带有y的斜杠/表示根目录管道符|作为分界线,前面指令的输出作为后面指令的输入后面的指令指明了筛选要求,这样就起到了 过滤作用
grep :(缩写来自 Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。
- eg.统计某个目录下的文档的总个数:管道+wc命令 #ls / | wc -l
Linux_day03
三.高级指令
1.hostname指令作用:主机名(读取,临时修改)格式1:#hostname ——输出完整的主机名格式2:#hostname -f——输出当前主机名中的FQDN(全限定 域名-同时带有主机名和域名的名称)2.id指令作用:查看一个用户的一些基本信息(包含用户id,用户组id,附加组id)- 格式1: #id——指令不指定用户,则默认显示当前用户的id信息
[root1214@localhost ~]$ id uid=1000(root1214) gid=1000(root1214) 组=1000(root1214) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023- 格式2:#id 用户——显示指定用户id
验证上述信息: (通过cat命令来查看用户信息相关的配置文件 passwd和group)- 查看用户信息:通过文件/etc/passwd
- 查看用户组信息:通过文件/etc/group
3.who am i——显示当前登录的用户名(中间可以不带空格whoami,或者直接who,有一点点区别,瞅瞅)(pts是伪终端或虚拟终端)who:显示当前真正登录系统中的用户(也就是最先登陆是什么名字就显示什么,不会显示su切换的登陆者) who am i: 同上吧… whoami: 显示当前正在使用主机的用户的用户名(仅用户名)作用:一般用于shell脚本中,收集日志(方便查看是哪个用户名做了哪些更改)4.ps -ef指令作用:主要是查看服务器 当前运行的进程信息-e:表示列出全部的进程 -f:列出所有的列(显示全字段)UID:用户id PID:进程id——【最为重要】PPID:该进程的父进程id(如果一个程序的父级进程找不到,该进程称之为僵尸进程,需要手动结束,kill指令,可以再配合管道筛选)C:cpu的占用率(单位百分比)STIME:启动时间TTY:发起该进程的终端的设备号(显示问号的,则不是终端发起的)TIME:进程已运行时间CMD:该进程名称(或对应的路径)
案列: 比如在日常工作中,我们要查看某个服务的端口号- 就可以先使用ps -ef配合管道把这个服务筛选出来,然后获取他的进程号pid
# ps -ef|grep gnome-panel(如果没有相关的,也至少会匹配到一个,也就是当前这条指令$ ps -ef|grep gnome-panel所产生的进程,可以看到设备终端号为pts/0) 输出结果: root1214 5373 3104 0 17:46 pts/0 00:00:00 grep –color=auto gnome-panel- 再通过其进程号5373,使用命令netstat -tnlp(下方第15条)配合管道查看这个进程,获取其端口信息
# netstat -tnlp| grep 53735.top指令作用: 动态展示服务器正在运行进程信息格式: 进入命令:# top 退出命令:qPID:进程id USER:进程对应的用户 PR:进程优先级 NI:用户进程空间内改变过优先级的进程占用cpu的百分比(下来再查一下) VIRT:虚拟内存——申请的 RES:常驻内存——实际使用的 SHR:共享内存——原进程所依赖的其他系统组件所消耗的内存(算在进程的常驻里边了,但实际不是该进程所消耗的) SHR包含于RES,一定小于RES
计算一个进程实际使用的内存= 常驻内存RES – 共享内存SHR
S:表示进程状态,其中S表示sleep,R表示run %CPU:cpu占用百分比 %MEM:内存占用百分比 TIME+:执行的时间 COMMAND:进程的名称或者路径
此处可以使用的快捷键(运行top时) M——将内存按照内存MEM从高到低进行降序排序(大写) P——按照cpu占用情况降序 1——当服务器拥有多个cpu时,使用1来切换是否展示各个cpu的详细信息6.du -sh指令作用:查看目录的真实大小 -s:(summaries)只显示汇总的大小 -h:以较高可读性的形式进项显示格式:#du -sh 路径 (不加路径,显示当前目录的真实大小)7.find指令——查找文件参数比较多,用时候查manual格式:#find 路径 选项 文件名 选项:- -name:按照文档名称进行搜索(支持模糊搜索)
- -type + 类型:按照文档类型搜索 (f表示文件,d表示文件夹,l表示链接文件)
案例1:使用find来搜索根目录下的 文件:httpd.conf ——#find / -name httpd.conf案例2:搜索ect目录下所有的conf 后缀的文件——$ find /etc -name *.conf(如果需要统计数量,就加上管道,再加wc -l命令——$ find /etc -name *.conf | wc -l)案例3:搜索/etc/sane.d/目录下所有的 文件——$ find /etc/sane.d/ -type f(find指令是可以搜出隐藏文件的)8.service指令作用:用于控制一些软件 服务的启动、停止、重启语法:#service 服务名 start/stop/restart9.kill进程作用:表示杀死进程格式: #kill + PID #killall + 进程名称kill不带参数下,kill 发送SIGTERM(15)信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出。 kill -9 发送SIGKILL信号给进程,告诉进程,你被终结了,请立刻退出。 TERM(或数字9)表示“无条件终止”;因此 kill – 9 表示强制杀死该进程;与SIGTERM相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理。
10.ifconfig作用:查看网卡信息11.reboot指令作用:重新启动计算机 语法1:#reboot 语法2:#reboot -w(模拟重启,实际不重启——只是在日志文件中记录了开关机信息)12.shutdown指令作用:关机 (远程连接时慎用,可能需要物理开机)语法1: 立即关机#shutdown -h now 定时关机#shotdown -h 15:25 “关机提示信息”取消关机:- ctrl +c 快捷键 可以取消关机指令(CentOS 7以前的版本)
- 输入 #shutdown -c(从CentOS 7开始)
除了shutdown指令关机,还有以下几个关机命令- #init 0
- #halt
- #poweroff
13.uptime指令作用:输出计算机的运行时长[root@localhost ~]# uptime 13:55:05 up 13 min, 2 users, load average: 0.00, 0.09, 0.16当前时间 , 运行时长,用户数量,平均负载:最近1分钟,5分钟,15分钟14.uname指令作用:获取操作系统相关信息语法1:#uname——获取当前操作系统类型语法2:#uname -a——获取完整信息(常用于获取系统内核版本信息)#uname -a Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux当前系统+ 完整主机名 + 系统内核版本 +系统发行时间 +GNU计划(开源)15.netstat -tnlp指令作用:查看网络的连接状态 语法:#netstat -tnlp-t:表示只列出tcp协议的连接 -n:表示将ip地址,端口名,以对应数字显示(numerical) -l:表示过滤出state列(状态)中,状态值为LISTEN(正在监听)的连接 -p:显示对应连接的进程PID和进程名称
常用默认端口号80-apache(web服务器软件)22-sshd3306-数据库16.man指令manual——手册作用:展示Linux所有命令的相关信息语法:#man 命令 (按q退出)在命令行中快速清空已输入信息的光标前后内容的快捷键: 前:ctrl + u 后:ctrl + k