第四章Linux常用命令
第一节文件处理命令
第一讲命令格式与目录处理命令ls
-
命令格式
注意 ls -l -a = ls -la 可以颠倒 -
目录处理命令ls
-
选项 -l 以长格式显示文件的详细信息
-
选项 -d查看目录的属性
比如我我们想查看/etc目录的信息 ls -l /etc
结果没有显示目录的详细信息却显示了目录各个目录文件的详细信息
这时候就需要使用 ls -ld /etc 显示当前目录本身而不显示它之下的目录文件信息
第二讲其他目录处理命令
目录处理命令: mkdir
- 注意:1.如果一个目录本身不存在可以通过 -p选项在不存在的目录下创建目录,直接创建是不行的
2.另外可以一次创建多个目录。比如下图
目录处理命令: cd 切换目录命令
目录处理命令:pwd 当前工作目录
目录处理命令: rmdir 删除空目录
注意:该命令只能删除空目录如果目录不为空则不能删除
目录处理命令:cp 复制文件目录有选项区别
注意 1.可以同时复制多个文件到一个目录例如上图
2.复制目录是用使用选项 -r
3.复制后文件或目录相当于重新创建它的时间也会与源文件不同要想不发生改变需要用到 -p选项
4.复制的同时可以改名
目录处理命令: mv 剪切文件、改名
注意1.移动目录或文件的时候不用从选项上区分目录或文件,与cp命令不同
2.执行命令的同时可以修改名字参考cp命令
3.它可以实现改名的操作,也就是剪切到源目录并且修改名字如上图
目录处理命令: rm 删除文件目录有选项区别
注意1.在删除目录的时候该目录下面的目录和文件都会询问你是否要删除这时候要用 rm -rf 强制执行就不会再去询问
第三讲文件处理命令
文件处理命令: touch 创建空文件
文件处理命令: cat 显示文件内容 不适合浏览内容多的文件
注意 1.cat命令会将文件内容全部显示,如果文件内容过多它会一直显示知道最后一行显示完
2.将cat命令反过来写tac会反向查看文件内容
文件处理命令:more 分页显示文件内容
注意:它可以用下列不同的方法对对提示做出回答
1.按Space键,显示文本的下一屏内容
2.按Enter键,只显示文本的下一行内容
3.按“/”接着输出一个模式,可以在文本中寻找下一个相匹配的模式
4.按H键或?键,显示帮助屏,其中有相关的帮助信息
5.按B键或^B,显示上一屏的内容
6.按Q键退出more命令
文件处理命令:less 分页显示文件内容比more命令更强 可查找关键词
注意1.可以通过↑↓将屏幕内容上移或下移一行,PageUp,PageDown换页
2.可通过输入“/”输入模式在文本中查找关键词,按n键查找下一个
文件处理命令: head 显示文件前几行
注意:默认前十行
文件处理命令:tail 显示文件后几行
注意:1.默认前十行
第四讲链接命令
链接文件命令:ln 生成链接文件
-
为什么要有链接
-
软链接文件
- 硬链接
注意:软链接文件权限并不代表源文件的操作权限,文件很小
第二节 权限管理命令
第一讲 权限管理命令chmod
- 第一种改变权限方式
- 第二种改变权限的方式
rwx权限对与目录与文件的区别
注意: 一般对于目录有r权限就有x权限另外一般只有文件主或root用户可以修改权限
第十章Shell基础
第一节Shell概述
-
Shell是什么
- 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
- Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
- 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
-
Shell的分类
- Bourne Shell:从1979起Unix就开始使用 Bourne Shell,Bourne Shell的主文件名为 sh。
- C Shell: C Shell主要在BSD版的Unix系 统中使用,其语法和C语言相类似而得名
- Shell的两种主要语法类型有Bourne和C, 这两种语法彼此不兼容。Bourne家族主要 包括sh、ksh、Bash、psh、zsh;C家族主 要包括:csh、tcsh
Bash: Bash与sh兼容,现在使用的Linux 就是使用Bash作为用户的基本Shell。
- Linux支持的Shell
/etc/shells
会显示:
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
都是Linux支持的Shell
第二节 Shell脚本的执行方式
- echo输出命令
echo输出命令
echo [选项] [输出内容]
-e:支持反斜线控制的字符转换
下表为控制符的作用:
控制字符 | 作用 |
---|---|
\ | 输出\本身 |
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出行末的换行符。和“-n”选项一致 |
\e | ESCAPE键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\0nnn | 按照八进制ASCII码表输出字符,其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数 |
- 练习
- echo -e “ab\bc”
输出ac删除左侧字符
注意我在练习时发现输入 echo -e “ab\b”会不起作用 - echo -e “a\tb\tc\nd\te\tf”
输出:
a b c
d e f - echo -e “\x61\t\x62\t\x63\n\x64\t\x65\t\x66”
输出:按照十六进制ASCII码表输出
a b c
d e f - echo -e “\e[1;31m abcd \e[0m”
输出:
红色的abcd
其中\e[1 表示开启颜色区别 \e[0m 表示结束颜色区别 31m表示红色 还有其他:
30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色
-
第一个脚本
vi hello.sh
内容:
#!/bin/Bash
#Author: yangyang (E-mail: 1337897182@qq.com)
echo -e “zhang brove”
注意:在这一段脚本中,#!/bin/Bash这一句是个例外,他并不是注释,是标识,说明以下语句是Shell脚本,‘Hello World!’如果要加感叹号就得是单引号,如果没有感叹号才可以是双引号,这感叹号有意义。 -
脚本执行
-
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh -
通过Bash调用执行脚本
bash hello.sh
不需要执行权限就可以执行
注意:所有程序必须用绝对路径或者相对路径执行有一个操作:这里的shell写的俄罗斯方块可以去搜一下
如果从Windows里面拷贝一个脚本到Linux 虽然有的时候格式一样但是还是会报错,这便是因为两个系统中脚本的格式不同,比如Windows中的回车在脚本中用^M 表 示 , 而 L i n u x 中 为 表示,而Linux中为 表示,而Linux中为,(可以用cat -A [文件名] 来查询)所以需要转变,此时用到一个命令:dos2unix [文件名]
转换后,Linux就可以执行啦,通过没有这个命令可以使用yum安装
-
第三节 Bash的基本功能
第一讲 历史命令与命令补全
- 历史命令
history [选项] [历史命令保存文件]
-
-c:清空历史命令
-
-w:把缓存中的历史命令写入历史命令保存文件~/.bash_history
缓存中的历史命令不会直接写入历史命令保存文件,而是等用户退出后写入,执行-w会直接写入
历史命令默认会保存1000条,可以在环境 变量配置文件/etc/profile中进行修改
找到HISTSIZE=1000进行修改,随意修改到100000条都可以,修改之后重启使配置文件生效历史命令的调用
- 的使用上、下箭头调用以前的历史命令
- 使用!n重复执行第n条历史命令
- 使用!!重复执行上一条命令
- 使用!字符串重复执行最后一条以该字串开头的命令
- 命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全
第二讲 命令别名与常用快捷键
-
命令别名
-
alias 别名 = ‘原命令’ 设定命令别名
-
alias 查询命令别名
-
命令执行时的顺序
- 1第一顺位执行用绝对路径或相对路径执行的命令
- 2 第二顺位执行别名
- 3 第三顺位执行Bash的内部命令
- 4 第四顺位执行按照$PATH环境变量定义的目录查找顺序的第一个命令
-
让别名永久生效
- vi /root/.bashrc
-
删除别名
- unalias 别名
-
-
bash常用快捷键
快捷键 | 作用 |
---|---|
ctrl+a | 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用 |
ctrl+e | 把光标移动到命令行结尾 |
ctrl+c | 强行终止当前命令 |
ctrl+l | 清屏,相当于clear |
ctrl+u | 删除或剪切光标之前的命令。我输入了一个很长的命令,不使用退格键逐个字符的删除,使用这个快捷键 |
ctrl+k | 删除会剪切光标之后的内容 |
ctrl+y | 粘贴ctrl+u或ctrl+k剪切的内容 |
ctrl+r | 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入 搜索内容,就会从历史命令中搜索 |
ctrl+d | 退出当前终端 |
ctrl+z | 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管 理章节详细介绍。 |
ctrl+s | 暂停屏幕输出 |
ctrl+q | 恢复屏幕输出 |
其中加粗字体的为重点命令
ctrl+z 快捷键一定要谨慎使用,如果使用的多了,系统会占用大量存储空间来存放暂停的数据,用多了系统会变卡!!!
第三讲 输入输出重定向
- 标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/stdout | 1 | 标准输出 |
显示器 | /dev/stderr | 2 | 标准错误输出 |
- 输出重定向
就是改变输出方向,比如由屏幕输出到文件(命令有输出才有意义)
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中 |
标准输出重定向 | 命令>>文件 | 以追加的方式,把命令的正确输出输出到指定文件或设备当中 |
标准错误输出重定向 | 错误命令 2>文件 | 以覆盖的方式,把命令的错误输出输出到指定文件或设备当中 |
标准错误输出重定向 | 错误命令 2>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 |
错误输出不常用, 2与>,>>之间无空格
类型 | 符号 | 作用 |
---|---|---|
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中 |
命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件中 | |
命令 &>文件 | 以覆盖的方式把正确输出和错误输出都保存到同一个文件当中 | |
命令 &>>文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 | |
命令 >>文件1 2>>文件2 | 把正确的输出追加到文件1当中,把错误的输出追加到文件2当中 |
命令 >> 文件 2>&1 ,命令 &>>文件 两种保存都一样,只不过是格式不同
有一个用法:
命令 &>/dev/unll 不管命令是否正确,直接丢到这个文件夹,不保存任何数据,在写shell脚本时有用
- 输入重定向
不通过键盘输入,通过文件输入,在实际中的应用不多
命令 < 文件 把文件作为命令的输入
第四讲多命令顺序执行与管道符
- 多命令顺序执行
多命令执行 | 格式 | 作用 |
---|---|---|
: | 命令1 ; 命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或,当命令1执行不正确,则命令2才会执行,当命令1正确执行,则命令2不会执行 |
应用
计算磁盘文件复制的时间
dd if = 输入文件 of=输出文件 bs=字节数 count=个数
- if=输入文件 指定源文件或源设备
- of=输出文件 指定目标文件或目标设备
- bs=字节数 指定一次输入/输出多少字节,即把这些字节看作一个数据块
- count=个数 指定一次输入/输出多少个数据块
这条命令可以把系统文件,磁盘都复制,很强大
date ;dd if=/dev/zero of=/root/testfile bs = 1k count=100000; date
-
管道符
命令格式:
命令1||命令2
#命令1的正确输出作为命令2的操作对象例子:
- ll -a /etc/ | more
第五讲通配符与其他特殊符号
- 通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或者任意多个字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。 |
[-] | 匹配括号中任意一个字符,-代表一个范围。例如[a-z] |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如[^0-9] |
- Bash中其他特殊符号
符号 | 作用 |
---|---|
‘’ | 单引号。在单引号中所有的特殊符号,如”$“和” ` “反引号都没有特殊含义 |
”“ | 双引号。在双引号中特殊符号都没有特殊含义,但是”$“、”`“和"\"是例外,拥有”调用变量的值“、”引用命令“和”转移符“的特殊含义 |
·· | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和 ( ) 作 用 一 样 , 不 过 推 荐 使 用 ()作用一样,不过推荐使用 ()作用一样,不过推荐使用(),因为反引号非常容易看错 |
&() | 和反引号作用一样,用来引用系统命令 |
# | 在Shell脚本中,以#开头的行表示注释 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出”$“的符号,而不是当作是变量引用 |
第四节 Bash变量
第一讲 用户自定义变量
-
什么是变量
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息 时,如一个文件名或是一个数字,就把它 存放在一个变量中。每个变量有一个名字 ,所以很容易引用它。使用变量可以保存 有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。 -
变量设置规则
- 变量名称可以由字母、数字和下划线组成 ,但是不能以数字开头。如果变量名是 “2name”则是错误的。
- 在Bash中,变量的默认类型都是字符串型 ,如果要进行数值运算,则必需指定变量类型为数值型。
- 默认变量类型全都是字符串型,和其他语言不太一样
- 变量用等号连接值,等号左右两侧不能有空格。
- 变量的值如果有空格,需要使用单引号或双引号包括
- 在变量的值中,可以使用“\”转义符
- 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含 “ 变 量 名 ” 或 用 变量名”或用 变量名”或用{变量名}包含
- 如果是把命令的结果作为变量值赋予变量 ,则需要使用反引号或$()包含命令
- 环境变量名建议大写,便于区分
-
变量分类
- 用户自定义变量
- 环境变量:这种变量中主要保存的是和系统操作环境相关的数据,一部分变量由系统定义叫系统环境变量,名称固定可以修改值,作用固定。允许自由添加环境变量。
- 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量便用是固定的。位置参数也是预定义变量中的一种,但因过多才单分出来一类,预定义变量的名称和作用不能被修改,只有值可以改但不能添加新的变量
- 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
-
本地变量
- 变量定义:
name=“zhangxu” - 变量叠加
aa=123
aa=" a a " 456 a a = aa"456 aa= aa"456aa={aa}789 - 变量调用
echo $变量名 - 变量查看
set 如果输出过长可以 set | more - 变量删除
unset 变量名
- 变量定义:
第二讲 环境变量
-
环境变量是什么
用户自定义变量只在当前的Shell中生效, 而环境变量会在当前Shell和这个Shell的所 有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效 -
设置环境变量
- export 变量名=变量值
#申明变量 - env 查询变量
- echo $变量名 变量调用
- unset变量名 删除变量
- 如何生成子shell
直接bash就生成了子shell - 如何查看
pstree树形显示进程数
- export 变量名=变量值
-
系统常见环境变量
-
系统查找命令的路径
这便是输入命令之前不用输入绝对路径的根本原因,系统会提前在PATH环境变量里的所有路径中查询一遍有没有 你输入的命令,找到之后直接执行如果你想直接执行shell脚本,不加绝对路径,直接写入PATH环境变量,使用叠加。
echo $PATH
PATH="$PATH":/root/sh PATH变量叠加
此后,/root/sh路径里面的执行文件都可以在任意目录下直接执行,不过是临时生效PS1:定义系统提示符的变量
- \d:显示日期,格式为“星期 月 日”
- \h:显示简写主机名。如默认主机名“localhost”
- \t:显示24小时制时间,格式为“HH:MM:SS”
- \T:显示12小时制时间,格式为“HH:MM:SS”
- \A:显示24小时制时间,格式为“HH:MM”
- \u:显示当前用户名
- \w:显示当前所在目录的完整名称
- \W:显示当前所在目录的最后一个目录
- #:执行的第几个命令
- $:提示符。如果是root用户会显示提示符为“#”,如果是普通用户 会显示提示符为“$”
-
第三讲 位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} |
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
例子脚本1:$n
#!/bin/bash
num1=$1
num2=
2
s
u
m
=
2 sum=
2sum=(( $num1 + $num2)) #变量sum的和是num1加num2 echo $sum #打印变量sum的值
例子脚本2:$* ,$@,$#
#!/bin/bash
echo “A total of KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ parameters” #使…#代表所有参数的个数
echo “The parameters is: KaTeX parse error: Expected 'EOF', got '#' at position 4: *” #̲使用*代表所有的参数
echo “The parameters is: KaTeX parse error: Expected 'EOF', got '#' at position 4: @” #̲使用@也代表所有参数
第四讲 预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(有命令自己决定),则证明上一个命令执行不正确 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
- 接受键盘输入
read [选项] [变量名]- -p “提示信息”:在等待read输入时,输出提示信息
- -t 秒数: read命令会一直等待用户输入,使用 此选项可以指定等待时间
- -n 字符数:read命令只接受指定的字符数,就会执行
- -s: 隐藏输入的数据,适用于机密信息的输入
第五节 Bash的运算符
第一讲 数值运算与运算符
-
declare声明变量类型
declare [+/-] [选项] 变量名
选项:
-: 给变量设定类型属性
+:取消变量的类型属性
-i: 将变量声明为整数型(integer)
-x: 将变量声明为环境变量
-p: 显示指定变量的被声明类型 -
- 数值运算–方法1
aa=11
bb=22
declare -i cc=$aa+$bb
-
方法2:expr或let数值运算工具
aa=11
bb=22
dd=$(expr $aa + $bb)注意+两侧必须有空格 -
方法3:$((运算符)) 或 $[运算式]
aa=11
bb=22
ff=$(( a a + aa+ aa+bb))
gg=[ a a + aa+ aa+bb]
- 数值运算–方法1
-
运算符
运算符的优先级表
优先级 | 运算符 | 说明 |
---|---|---|
13 | -,+ | 单目负、单目正 |
12 | !,~ | 逻辑非、按位取反或补码 |
11 | *,/,% | 乘、除、取模 |
10 | +,- | 加、减 |
9 | <<,>> | 按位左移、按位右移 |
8 | <=.>=,<,> | 小于或等于、大于或等于、小于、大于 |
7 | ==,!= | 等于、不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= | 赋值、运算且赋值 |
第二讲 变量测试与内容替换待完善
第六节 环境变量配置文件
第十一章 Shell编程
第一节基础正则表达式待完善
- 正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不能支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。 - 基础正则表达式待完善sds
第二节字符截取命令待完善
第一讲 cut字段提取命令待完善
第三节字符处理命令待完善
第四节 条件判断待完善
- 按照文件类型进行判断
测试选项 | 作用 |
---|---|
-b 文件 | 判断该文件是否存在,并且是否为块文件(是块设备文件为真 |
-c 文件 | 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真) |
-d 文件 | 判断该文件是否存在,并且是否为目录文件(是目录为真) |
-e 文件 | 判断该文件是否存在 |
-f 文件 | 判断该文件是否存在,并且是否为普通文件 |
-L 文件 | 判断该文件是否存在,并且是否为符号链接文件 |
-p 文件 | 判断该文件是否存在,并且是否为管道文件 |
-s 文件 | 判断该文件是否存在,并且是否为非空 |
-S | 判断该文件是否存在,并且是否为套接字文件 |
两种判断格式
test -e /root/install.log
[-e /root/install.log]
第五节 流程控制
第一讲 if语句
1.单分支if语句
if [ 条件判断式 ] ;then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
单分支语句需要注意几个点
- if语句使用if结尾,和一般语言使用大括号结尾不同
- [条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
- then后面跟符合条件之后执行的程序,可以放在[]之后,用;分割。也可以换行写入,就不需要;了
例子待完善
- 双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
例子待完善
第二讲case语句
- case