Linux学习笔记
Linux
Linux命令——账号管理
创建用户: useradd(选项)用户名
用户口令:password(选项)用户名
修改用户:usermod(选项)用户名
删除用户:userdel(选项)用户名
* 跟用户相关的命令权限都必须在管理员的权限下(root)
* 切换用户口令: su 用户名
* 密码要求:长度大于8 必须是数字和字母的组合 不能为回文
* 修改用户 usermod 的时候要退出当前用户,可以按快捷键 Ctrl+d 来退出当前用户
Linux命令——用户组
创建用户组:groupadd(选项)用户组名
修改用户组:groupmod(选项)用户组名
查询用户所属组:groups 用户名
删除用户组:groupdel 用户组名
* 跟用户组相关的命令权限都必须在管理员的权限下(root)
——管理用户组内成员
语法: gpasswd(选项)组名
gpasswd是Linux下面的管理工具,用于将一个用户添加到组中或者从组中删除。
- -a:添加用户到组 gpasswd -a 用户名 组名
- -d:从组中删除用户
- -A:指定管理员
- -M:指定组成员(和-A的用途差不多)
- -r:删除密码
- -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组
(grep '组名' /etc/group 查看组内所包含的组员)注意:组名是单引号,组名后面还有个空格
Linux命令——日期管理
语法:date[参数选项] 例:date //显示系统时间
参数选项:
- -d:<字符串>:显示字符串所指的日期与时间,字符串前后必须加上双引号。例:date -d "2022-12-12 11:11:11" //2022年12月12日 11时11分11秒 CST(CST表示北京时间)
- -s:<字符串>:根据字符串来设置日期与时间,字符创前后必需加上双引号。例:date -s "2022-12-12 11:11:11" //修改当前系统时间(需注意,得用管理员账号,其他账号无权限)
- -u:显示GMT(GMT英国格林威治时间)
- --help:在线帮助
- --version:显示版本信息
Linux命令——显示用户
语法:logname[--help][--version] 显示登录账号的信息
参数选项:
- --help:在线帮助
-
--version:显示版本信息
Linux命令——切换用户
语法:su[参数]
例如:
切换用户: su 用户名
切换用户执行一条命令后在切回该用户:su -c 要执行的命令 要切换的用户
su -c ls root //切换到root用户执行一条ls命令在切换回原来的用户
Linux命令——id命令
语法:id[参数] 查看当前用户的详细信息(用户id(uid),群组id(gid),所属组)
Linux命令——sudo命令
语法:sudo [参数选项] 提高普通用户的操作权限
参数选项:
- -V:显示版本编号
- -h:会显示版本编号和指令的使用方式说明
- -l:显示出自己的权限
- -v:超出N分钟没有使用,要求再次输入密码(默认5分钟)
- -k:下一次执行sudo时问密码
- -s:执行环境变数中的SHELL所制定的shell,或是/etc/password里所制定的shell
- -h:将环境变数中的HOME指定为要变更身份的使用者HOME目录
- sudo command:要以系统管理者身份(或以-u更改为其他人)执行的命令
Linux——跟系统进程相关的命令
Linux命令——top命令
语法:top[参数] 实时显示process(进程)的动态
直接输入top可显示Linux的进程信息(PID每个进程id,USER该进程的所属用户,PR进程优先级,NI进程优先级(负数-高优先级,正数-低优先级),VIRT表示当前进程使用虚拟内存的总量,S表示当前进程的运行状态S-睡眠状态,R-运行状态,COMMAND表示命令的名字)按q可以退出进程监控
参数选项:
- -d:改变显示的更新速度,或是在交谈式指令列(interactive command)按s
- -q:没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行
- -c:切换显示模式,共有两种模式,一是显示执行档的名称,另一种是现实完整的路径与名称
- -s:安全模式,将交谈式指令取消,避免潜在的危机
- -S:累积模式,会将会将已完成或消失的子进程(dead child process)的CPU time累积起来
- -i:不显示任何的闲置(idle)或者无用(zombie)的行程
- -n:更新的次数,完成后将退出top
- -b:彼此档模式,搭配“n”参数一起使用,可以用来将top的结果输出到档案内
- -p:top -p 进程id 只监视对应id的一条进程
Linux命令——ps命令
语法:ps[参数] 查看进程信息(无法实时监控,只能获取当前现在的进程信息)
- ps -u 用户名:显示指定用户的所有进程信息
- ps -A:显示系统中所有的进程信息
- ps -ef:显示系统中所有的进程信息(完整信息)
Linux命令——kill命令
语法:kill [-s<信息名称或编号>] [程序] 中断执行中的程序
kill [-l<信息编号>]
参数选项:
- -l<信息编号>:若不加信息编号选项,则-l参数会列出全部的信息名称
- 直接加程序的PID或PGID也可以是工作编号
- -u 用户名:杀死这个用户的所有进程
- 例如:kill -编号 PID // kill表示要杀死,编号表示怎么杀,PID表示要杀死谁 如:kill -9 2344 表示强制杀死编号为2344的进程
- 全部杀死某个用户的所有进程:
① kill -9 $(ps -ef | grep 用户名) 其中$(ps -ef | grep 用户名) 表示把该用户所有的进程过滤出来,然后在强制杀死
② killall -u 用户名
Linux命令——关机命令
语法:shutdown [参数] 关机
参数选项:
- shutdown:不同版本有所不同(得在root用户权限下操作)
- shutdown -h now:立马关机
- shutdown +1 “警告信息”:延迟一分钟后关机,并且提示警告信息
- shutdown -r +1 “警告信息”:延迟一分钟后重启,并提示警告信息
- shutdown -c:取消当前关机操作
Linux命令——重启命令
语法:reboot [参数] 立马重启
Linux命令——who命令
语法:who -[husfV] [user] 显示当前登录系统的用户
参数选项:
- who:显示当前登录系统的用户
- who -H:显示明细(标题)信息
Linux命令——timedatectl命令
语法:timedatectl 校正服务器时间、时区
参数选项:
- timedatectl status:显示系统当前时间和时区
- timedatectl list-timezones:查看所有可用的时区
- timedatectl set-timezone "Asia/Shanghai:设置本地时区
- timedatectl set-ntp false:禁用时间同步
- timedatectl set-time "2022-3-18 22:22:22" :设置时间
- timdatectl set-ntp true:启用时间同步
Linux命令——clear命令
语法:clear:清除屏幕
Linux的目录管理相关的命令
目录常用命令:
- ls:列出目录
- cd:切换目录 有相对路径和绝对路径,/为根目录 cd .. 为回退
- pwd或者pwd -P:显示当前的目录
- mkdir:创建新目录
- rmdir:删除空目录
- cp:复制文件或目录
- rm:删除文件或目录
- mv:移动文件或目录/修改文件或者目录的名字
目录命令——ls
语法:ls[参数选项] 目录名称 列出目录里的内容
参数选项:
- -a:显示所有文件或目录(包含隐藏文件和目录)
- -d:仅列出目录本身,而不是列出目录里的文件数据(常用)
- -l:长数据串列出,包换文件的属性和权限等数据(常用)
- -al:将所有的文件和目录以详细信息的格式列出来
目录命令——mkdir
语法:mkdir [参数] 文件夹的名字 创建目录
参数选项:
- -p :确保目录名称存在,不存在就创建一个(可用于创建多级目录时,父级目录不存在的情况)
目录命令——rmdir
语法:
- rmdir 文件夹的名字 删除空的文件夹
- rmdir -p bbb/ccc 删除ccc若删完之后bbb也是空的,则bbb也一起删除
目录命令——rmdir
语法:rm [选项] 文件/目录 删除文件或目录
rm 文件路径 删除文件
rm -r 目录路径 删除目录和目录里的所有内容
选项参数:
- -i:删除前注意询问确认
- -f:即使原文件属性设为只读,也可直接删除,无需逐一询问
- -r:将目录和里面的内容全部删除
目录命令——cp
语法:cp [ 选项] 数据源 目的地
cp aaa/a.txt ccc 将aaa文件夹中的a.txt文件复制到ccc文件夹中
cp -r aaa/* ccc 将aaa文件夹中的文件和目录全部拷贝到ccc文件夹中
目录命令——mv
语法: mv [选项] 数据源 目的地 改名/移动文件/文件夹 (如果数据源和目的地在同一个文件夹下可就是改名,不同就是移动)
mv aaa/* ccc 将文件夹aaa下面的所有东西移动到ccc文件夹下
mv ccc/a.txt aaa 将ccc文件夹下的a.txt文件移动到aaa文件夹下
mv 文件名 文件名 将源文件名改为目标文件名
mv 目录名 目录名 目标目录已存在,则将源目录移动到目标目录,若目标目录不存在,则改名
Linux ——文件基本属性
文件权限:r:可读 w:可写 x:可执行 -:没有当前权限
例如:drwxr-xr-x
- 第一位:文件类型:d 目录,- 文件,| 链接文档。
- 2-4位:属主权限 (文件所属用户的权限)
- 5-7位:属组权限 (文件所属用户所属的组的权限)
- 8-10位:其他用户权限 (除了开发组外其他所有的成员的权限)
- 例:-rwxr-xr-x 表示:他是一个文件,表示他的所属用户可读可写可执行,其他同组成员可读不可写可执行,组外其他人也是可读可执行,不可写。
Linux ——更改属主和属组
chgrp命令:
语法:chgrp [选项参数] [要改为的所属组] [文件或目录] 更改属组(只能更改属组)注:更改文件权限得切换到root用户
例如:chgrp -v root aaa 将aaa的数组改为root(加上参数 -v 会提示更改的具体信息,不加不会提示信息)
chown命令:
语法:chown 属主名 文件名 更改属主
chown [参数选项] 属主名:属主名 文件名 更改属主和属组
选项参数:
- -R:处理指定目录以及其子目录下的所有文件
例如:
- chown root aaa 将aaa的属主改为root
- chown root:root bbb 将bbb 的属主和属组改为root
- chown -R root:root aaa 将aaa文件夹和里面的所有文件的属主和属组全部改为root
Linux ——更改权限
chmod命令 修改属主、属组、其他用户的权限
修改方式:数字方式、符号方式
数字方式:
| 权限 | 英文 | 缩写 | 数字序号 |
| 读 | read | r | 4 |
| 写 | write | w | 2 |
| 执行 | execute | x | 1 |
| 无权限 | - | 0 |
语法:chmod [参数选项] 数字权限 文件或目录
参数选项:
- -c:若该档案权限确实已经更改,才显示其更改动作
- -f:若该档案权限无法被更改也不要显示错误信息
- -v:显示权限变更的详细资料
- -R:对当前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
- --help:现实辅助说明
- --version:显示版本信息
- 数字权限:数字类型的权限属性,为rwx对应数值相加的和
例如:chmod -R 770 aaa 对aaa目录以及其目录下的子文件进行权限修改,属主权限与属组权限为可读可写可执行,其他用户权限不可读不可写不可执行
符号方式:
语法:chmod [参数选项] 符号权限 文件或目录
| chmod |
u(user属主权限) g(group数组权限) o(others其它权限) a(all所有权限) |
+(加入) -(除去) =(设定)
|
r w x |
文件或目录 |
例如:
chmod u=rwx,g=rx,o=r a.txt 给a.txt文件设置权限,属主可读可写可执行,数组可读可执行,其他用户可读
chmod -R a=rwx bbb 给bbb目录及其子文件设置权限,属主、属组、其他用户都是可读可写可执行
chmod -R o- bbb 将bbb文件夹及其子目录下的所有文件的其他用户的所有权限去掉
参数选项与数字方式基本相同
综合案例:
需求:一个公司的开发团队有三个用户:java、Python、JavaScript,有一个文件目录tmp/work供他们开发,如何实现让这三个用户都对其具有写权限。
实现步骤:
- 创建三个用户java、Python、JavaScript
- 创建一个用户组dev-group,并把这三个用户添加到这个组当中
- 创建文件夹:/tmp/work(因为文件夹有可能是管理员创建的,所以要修改文件夹的属组为dev-group)
- 修改文件夹用户组的权限
Linux——文件管理
Linux文件管理——touch命令
语法:touch [参数选项] 文件名 如果文件不存在就创建文件,如果文件存在,就修改时间属性
参数选项:
- a:改变文件的读时间记录
- m:改变文件的修改时间记录
- c:假如目标文件不存在,不会创建新的文件,与--no-create的效果一样
- d:设定时间与日期,可以使用各种不同的格式
- t:设定文件的时间记录,格式与date指令相同
常用命令:
touch a.txt 不存在a.txt就创建,存在就修改时间属性
touch a{1..10}.txt 批量创建空文件(创建10个文件:a1.txt a2.txt a3.txt...a10.txt)
start a.txt 查看文件的详细信
Linux——vi/vim编辑器
vi:只能编辑文本类容不能对字体段落进行排版,不支持鼠标操作,没有菜单只有命令。
vim:是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富。
vi/vim三种模式:
命令模式 切换至 编辑模式 按下i
编辑模式 切换至 命令模式 按下Esc
命令模式 切换至 末行模式 按下冒号
末行模式 切换至 命令模式 按两下Esc
打开和新建文件:
语法:vim 文件名 如果文件已经存在,会直接打开该文件 / 如果文件不存在,会打开一个临时文件,在将内容保存并退出后,就会新建一个文件。
该命令刚进去之后就是命令模式,进入编辑模式可按以下命令。
进入编辑模式:
| 命令 | 英文 | 功能 | 常用 |
| i | insert | 在当前字符前插入文本 | 常用 |
| I | insert | 在行首插入文本 | 较常用 |
| a | append | 在当前字符后添加文本 | |
| A | append | 在行末添加文本 | 较常用 |
| o | 在当前行后面插入一空行 | 常用 | |
| O | 在当前行前面插入一空行 | 常用 |
进入末行模式保存文件:
语法:
- :q 当vim进入文件对文件没做任何操作时,可以按“q”退出
- :q! 当vim进入文件对文件内容有操作,但是不想保存退出时
- :wq 正常保存退出
- :wq! 强行保存退出,只针对于root用户或文件所有人
Linux——文件查看
- cat 文件名 查看小文件内容
- cat -n 文件名 查看小文件的内容(内容有行号)
- less -N 文件名 分屏显示大文件内容
- head -n 文件名 查看文件的前一部分
- tail -n 文件名 查看文件的最后部分
- grep 关键字 文件名 根据关键字搜索文本文件的内容
cat命令:查看小文件
cat a.txt 查看a.txt的内容
cat -n a.txt 查看a.txt的内容(加了行号)
less命令:查看大文件
less big.txt 查看大文件big.txt的内容
less -N big.txt 查看大文件big.txt的内容(加了行号)
在分屏显示时候,可通过上下键来调整查看内容
阅读完毕后可以按 “q” 退出
tail命令:查看文件的最后部分
参数选项:
- -数字:显示文件的最后几行
- -f:循环读取文件的最后10行(读取日志文件)
- -n<行数>:显示文件的内容,从指定行到文件末尾
- -c:显示最后指定的字数
例如:
tail -3 big.txt 显示文件最后3行
tail -f big.txt 动态显示最后10行
tail -4f big.txt 动态显示最后4行
tail -n +2 big.txt 显示big.txt 文件从第2行至末尾的内容
tail -c 45 big.txt 显示big.txt文件的最后45个字
grep命令:
语法:grep [参数选项] 关键字 文件 根据关键词搜索文本文件内容
参数选项:
- -n:把包含关键词的行展示出来
- -i:把包含关键词的行展示出来,搜索时忽略大小写
- -v:把不包含关键词的行展示出来
与进程相关:
结合 ps -ef 命令:展示系统的所有进程
ps -ef | grep 关键字 查询关键字指定的进程信息,包含grep进程
ps -ef | grep 关键字 | grep -v "grep" 查询关键字指定的进程信息,不包含grep进程
ps -ef | grep -c 关键字 查找关键字指定的进程的个数
Linux——vim定位行
语法:vim 文件名 +行数 查看文件并定位到指定行数
Linux——vim异常处理
如果vim异常退出,在磁盘上可能会保存有交换文件,下次再使用vim编辑的时候,会提示发现交换文件的一些信息,出现该问题时,先按A进行中止,再直接将该交换文件删除即可。
交换文件:如果对a.txt可进行编辑,不会在原文件上进行修改,而是会产生一个交换文件 a.txt.swp ,会在这个交换文件上进行修改。
Linux文件管理——echo命令
语法:
- echo "字符串" 展示文本
- echo "字符串" > 文件名 将字符串写到文件中(覆盖文件中内容)
- echo "字符串" >> 文件名 将字符串写到文件中(不覆盖文件中内容)
- cat 不存在的目录 &>> error.log 将命令的失败结果追加到error.log文件的后面
Linux——awk语法
awk语法——过滤和切割
语法:awk [参数选项] ’语法' 文件
案例:
| zhangsan | 68 | 99 | 26 |
| lisi | 98 | 66 | 96 |
| wangwu | 3 | 33 | 86 |
| zhaoliu | 78 | 44 | 36 |
| maq | 88 | 22 | 66 |
| zhouba | 98 | 44 | 46 |
| 选项 | 含义 |
| -F ',' | 使用指定字符进行分割 |
| $ + 数字 | 获取第几段内容 |
| $0 | 获取当前行内容 |
| OFS="字符" | 向外输出时的每段间的分割字符串 |
|
awk 'BEGIN{初始化操作} {每次都执行的操作} END{结束时操作}' 文件名 |
固定语法 'BEGIN{这里面放的是执行前的语句} {这里面放的是执行每一行时要执行的语句} END{这是处理完所有的行后要执行的语句}' 文件名 |
| 函数名 | 作用 |
| toupper() | 字符转成大写 |
| tolower() | 字符转成小写 |
| length() | 返回字符长度 |
需求1:搜索含有zhang和li的学生成绩
cat a.txt | awk '/zhang|li/'
需求2:将每一行按照空格进行切割,在输出切割后的每一个小串
cat a.txt | awk -F ' ' '{print $1,$2,$3,$4}'
awk语法——切割后按照指定方式展示
需求3:每一行按照空格切割,再输出切割后的每一个小串多个小串间用“===”间隔
cat a.txt | awk -F ' ' '{OFS="==="}{print $1,$2,$3,$4}'
需求4:每一行按照空格切割,再输出切割后的每一个小串多个小串间用 “\t” 间隔
cat a.txt | awk -F ' ' '{OFS="\t"}{print $1,$2,$3,$4}'
需求5:每一行按照空格切割,将第一段内容转换成大写并显示
cat a.txt | awk -F ' ' '{print toupper($1)}'
awk语法——计算
需求6:每一行按照空格切割,计算第四列总分并显示
cat a.txt | awk -F ' ' 'BEGIN{}{totel=totel+$4}END{print totel}' 此处totel是定义的一个变量
需求7:每一行按照空格切割,计算第四列总分,显示总分,总人数
cat a.txt | awk -F ' ' 'BEGIN{}{totel=totel+$4}END{print totel,NR}' 此处NR表示行号,有多少行,行号就是多少
需求8:每一行按照空格切割,计算第四列总分,显示总分,总人数,平均分
cat a.txt | awk -F ' ' 'BEGIN{}{totel=totel+$4}END{print totel,NR,(totel/NR)}'
Linux——软连接
类似于Windows系统的快捷方式。
语法:ln -s 目标文件路径 快捷方式路径
Linux——find命令
语法:find [参数选项] <指定目录> <指定条件> <指定内容> 在指定目录下查找文件
参数选项:
- -name 文件名 按文件名查找文件
- -ctime -n或+n 按时间查找文件,-n表示在n天内,+n表示在n天前
find . -name "*.txt" 在当前文件夹查找所有txt文件
find / -name "*.txt" 在全盘查找txt文件
Linux——备份压缩
gzip命令
语法:gzip [参数选项] [文件] 压缩文件
gzip a.txt 压缩文件
gzip * 压缩当前目录下所有文件
gzip -dv * 解压文件并;列出详细信息
gunzip命令
语法:gunzip [参数选项] [文件] 解压文件
gunzip * 解压当前目录下所有文件
tar命令
语法:tar [必要参数] [选择参数] [文件] 打包、压缩和解压(文件\文件夹)
注意:tar本身不具有压缩功能,他是调用别人的压缩功能来实现的
参数选项:
- -c:建立新的压缩文件
- -v:显示指令执行过程
- -f:<备份文件>指定压缩文件
- -z:通过gzip指令处理压缩文件
- -t:列出压缩文件中的内容
- -x:表示解压
tar -cvf 打包之后文件名 文件名 打包文件并指定打包之后的文件名(仅打包不压缩)
tar -zcvf 压缩后文件名 文件名/文件夹名 压缩文件或文件夹并指定压缩后的文件名(打包压缩)
tar -ztvf 压缩文件名 查看压缩文件中有哪些文件
tar -zxvf 压缩文件名 解压
zip命令
语法:zip [必要参数] [选择参数] [文件] 压缩
注意:zip是个使用广泛的压缩程序,文件经过它压缩后会另外产生具有“.zip”扩展名的压缩文件
参数选项:
- -q:不显示指令执行过程
- -r:递归处理,将指定目录下的所有文件和子目录一并处理
zip -q -r 压缩后的文件名 文件/文件夹 压缩文件或文件夹
unzip命令
语法:unzip [必要参数] [选择参数] [文件] 解压
注意:只能加压“.zip”扩展名的压缩文件
参数选项:
- -l:显示压缩文件内所包含的文件
- -d<目录>:指定文件解压后要存储的目录
unzip -l 压缩后文件名 查看压缩文件的内容
unzip -d 要解压到的文件夹 压缩文件 解压
bzip2命令
语法:bzip2 [参数选项] [文件] 压缩
注意:使用新的压缩算法,压缩后的文件比原来的要小,但是时间花费较长,若不加任何参数,bzip2压缩文件后会产生 “.bz2” 的压缩文件,并删除原始的文件
bzip2 a.txt 压缩文件
bunzip2命令
语法:bunzip2 [参数选项] [文件] 解压
参数选项:
- -v:解压缩文件时,显示详细的信息
Linux——网络与磁盘管理
ifconfig命令
语法:ifconfig [参数选项] 显示或配置网络设备的命令
ifconfig 显示激活的网卡信息
ifconfig 网卡名 down 关闭网卡 ifconfig ens37 down 关闭ens37这张网卡
ifconfig 网卡名 up 启动网卡 ifconfig ens37 up 启动ens37这张网卡
ifconfig 网卡名 ip 配置ip地址 ifconfig ens37 192.168.23.199 配置ip地址
ifconfig 网卡名 ip netmask 子网掩码 配置IP地址和子网掩码 ifconfig ens37 192.168.23.199 netmask 255.255.266.0 配置IP地址和子网掩码
ping命令
ping www.baidu.com 检测是否与百度连通
ping -c 2 www.baidu.com 指定接收包的次数
netstat命令
netstat -a 显示连接的详细状况
netstat -i 显示网卡列表
lsblk命令
lsblk 列出硬盘的使用情况
lsblk -f 显示系统信息
df命令
df 显示整个硬盘使用情况
df 文件夹 显示文件夹使用情况
df --total 显示所有的信息
df -h 将结果转换成KB MB GB 的形式,利于阅读
mount命令
语法:mount [参数选项] 目录 用于挂载Linux系统以外的设备
注意:挂载点的目录需要有以下几个要求:
- 目录事先存在,可以用mkdir命令创建新目录
- 挂载点目录不可以被其他进程所使用到
- 挂载点原有文件将被隐藏
mkdir 文件夹 创建文件夹(也就是创建一个挂载点)
mount -t auto 目录 文件夹 开始挂载
umount 文件夹 卸载
yum命令
在Linux中如果我们想要查找、安装、下载或者是卸载另外的软件,就需要通过yum来进行操作
例如安装一下tree这一款工具:
yum -y install tree 安装tree -y表示在安装过程中,一律选择yes
tree 执行tree,展示当前目录结构
yum remove tree 移除tree
yum list tom* 找出以tom开头的软件名称
yum源
yum install -y wget 安装下载工具wget
wget -O CentOS-base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 下载阿里云的Centos-7.repo文件
yum clean all 清理之前的缓存,并重新加载yum
yum makecache 建立一个缓存文件
yum search tomcat 查找软件(tomcat),验证阿里云的yum源是否可以正常使用
yum和rpm工具的区别
rpm:
在最初RedHat Linux发行版本专门用来管理Linux各项套件的程序
区别:
rpm只能安装已经下载到本地机器上的rmp包
yum能在线下载并安装rpm包,能更新系统,还能自动处理包与包之间的依赖问题,这个是rpm工具不具备的
Linux——shell
shell入门
在计算机科学中,shell就是一个命令解释器,shell是位于操作系统和应用程序之间,是它们二者最主要的接口。
一句话说:shell就是操作系统和应用程序之间的一个命令翻译工具
Windows和Linux中的shell:
Windows系统:cmd.exe 命令提示符
Linux系统: sh/csh/ksh/bash/.......linux中有很多的shell但所有的根都是sh,现在Linux中默认的shell是bash
shell的使用方式
手工方式:手工敲击键盘输入命令按enter执行,逐行输入命令,逐行确认执行
脚本方式:把命令写入一个文件中,然后运行这个文件,这个文件就叫脚本文件
编写shell
- 新建一个文件,后缀名为.sh
- 书写内容
- 执行
shell注释
单行注释
# 注释内容
多行注释
:<<!
注释的内容
!
此处感叹号可用其他任意字符代替,但一般常用的就是感叹号。
shell变量
- 定义变量(普通变量、命令变量)
- 使用变量
- 只读变量
- 删除变量
shell定义变量
普通变量
方式一:变量名=变量值 变量值必须是一个整体,中间没有特殊字符
方式二:变量名='变量值' 将单引号中的内容原样赋值
方式三:变量名="变量值" 如果双引号里面有其他变量,会将变量的值与双引号里其他内容进行拼接,然后赋值
使用习惯:数字不加引号,其他默认加双引号
命令变量
方式一:变量名=`命令` 注意:`` 是反引号,Tab键上面的按键,用英文版
方式二:变量名=$(命令)
执行流程:先执行 `` 或$()里面的命令,然后将命令执行的结果赋值给变量
shell使用变量
使用变量
方式一:$变量名 非标准写法,图省事
方式二:"$变量名" 非标准写法
方式三:${变量名} 在双引号里面要使用变量的值。例如:d=$(date) result="现在的时间为${d}"
方式四:"${变量名}" 标准的方式
shell只读变量
readonly 变量名
shell删除变量
unset 变量名
shell数组
- 定义数组 数组名=(值1 值2 值3 ...) arr=(1 2 3 4) 注:中间用空格隔开
- 给数组的元素赋值 数组名[索引]=值 arr[0]=1
- 获取元素 ${数组名[下标]} ${arr[0]}
- 获取长度 ${#数组名[*]}或${#数组名[@} ${#arr[*]}或${#arr[@]}
shell算术运算符
| 运算符 | 说明 | 举例 |
| + | 加 | expr $a + $b |
| - | 减 | expr $a - $b |
| * | 乘 | expr $a \* $b |
| / | 除 | expr $a / $b |
| % | 取余 | expr $a % $b |
| = | 赋值 | a=$b |
| ++/-- | 自增、自减 | ((a++)) |
注意点:
- 原生的bash不支持简单的数学运算,可以通过其他命令实现 expr
- 表达式和运算符之间要有空格
- 完整的表达式要用反引号包含
举例:`expr 2 + 2`
shell字符串运算符
| 运算符 | 说明 | 举例 |
| = |
检测两个字符串是否相等 相等返回true |
[ $a = $b ] |
| != |
检测两个字符串是否不相等 不相等返回true |
[ $a != $b ] |
| -z |
检测字符串长度是否为0 为0返回true |
[ -z $a ] |
| -n |
检测字符串长度是否不为0 不为0返回true |
[ -n $a ] |
| $ |
检测字符串是否不为空 不为空返回true |
[ $a ] |
注意:获取a字符串长度 "${#a}"
$?可以获取上一条语句的执行结果
shell关系运算符
| 运算符 | 说明 | 举例 |
| -eq |
检测两个数是否相等 相等返回true |
[ $a -eq $b ] |
| -ne |
检测两个数是否不相等 不相等返回true |
[ $a -ne $b ] |
| -gt |
检测a是否大于b 如果是,则返回true |
[ $a -gt $b ] |
| -lt |
检测a是否小于b 如果是,则返回true |
[ $a -lt $b ] |
| -ge |
检测a是否大于等于b 如果是,则返回true |
[ $a -ge $b ] |
| -le |
检测a是否小于等于b 如果是,则返回true |
[ $a -le $b ] |
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
shell布尔运算符
| 运算符 | 说明 | 举例 |
| ! | 取反运算 | [ ! false ]返回true |
| -o | 或运算,有一个为true就返回true | [ $a -lt 20 -o $b -gt 100 ] |
| -a | 与运算,都为true才返回true | [ $a -lt 20 -a $b -gt 100 ] |
shell逻辑运算符
| 运算符 | 说明 | 举例 |
| && | 逻辑的and | [[ true && true ]] 返回true |
| || | 逻辑的or | [[ false || false ]] 返回false |
shell判断语句
第一种if判断:
if [ 条件 ]
then
语句体
fi
第二种if判断:
if [ 条件 ]
then
语句体
else
语句体
fi
第三种if判断:
if [ 条件 ]
then
语句体
elif [ 条件2 ]
语句体
else
语句体
fi
shell选择语句
case 值 in
模式1)
语句体1
;;
模式2)
语句体2
;;
esac
例如:
v="czbk"
case "${v}" in
"czbk")
echo "传智播客"
;;
"baidu")
echo "百度"
;;
"guge")
echo "谷歌"
;;
esac
shell for 循环
for 变量 in 变量变化范围
do
循环体
done
例如:循环打印loop的值A B C
for loop in A B C
do
echo $loop
done
shell while循环
while 条件
do
循环体
done
例如:打印1~10之间的每一个数
a=1
while [ "${a}" -le 10 ]
do
echo "${a}"
((a++))
done
shell函数
| 无参无返回值 | 有参无返回值 | 有参有返回值 |
|
函数名 (){ 函数体 } |
czbk(){ echo "第一个参数$1" echo "第二个参数$2" #调用函数czbk() czbk a b |
czbk(){ echo "接收到参数$1和$2" return $(($1 + $2)) } #调用函数czbk() czbk 10 20 #获取并打印函数调用后的返回值 echo $? |
shell函数练习
需求:在方法中键盘录入两个整数,返回这两个整数的和
注意:read 变量名 --表示把键盘录入的数据赋值给这个变量
method(){
echo "请录入第一个数:"
read number1
echo "请录入第二个数:"
read number2
return $(($number1 + $number2))
}
method
echo "两数之和为$?"

浙公网安备 33010602011771号