Linux基础
shell
shell是用户和Linux(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。
Shell相当于是一个翻译,把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前
Bash
shell是运行在终端中的文本互动程序。bash(GNU Bourne-Again Shell)是最常用的一种shell,是当前大多数Linux发行版的默认Shell
bash常用命令
-
clear 刷新屏幕(常用)
让终端显示向后翻了一页,往上滚动依然能看到之前的内容;ctrl + l可达到同样效果
-
reset 刷新屏幕
完全刷新终端屏幕,之前输入的操作信息都会被清空,速度较慢
-
pwd 显示当前所在目录路径
-
cd 切换当前工作目录
- cd命令后不跟路径,表示切换到家目录
- 所有文件存储在根目录中 /;用户的文件存在家目录中 ~
- . 表示当前目录;… 表示当前目录的上一层目录
-
ls 显示文件信息
ls -l 显示文件的详细信息
ls -a 显示所有文件,包括隐藏文件,以.开头的文件为隐藏文件
ls -d 文件名 查看该文件或目录是否存在
ls -F 在目录后增加斜线,用以和文件区分
ls -al(ls -a -l)ls命令的选项可以多个合到一起使用
ls /home/abc/.b* 显示abc目录下所有以.b开头的文件
-
touch 创建空白文件
touch hello.txt 创建文件
touch -d “2024-1-12 16:26” hello.txt 改变文件日期
-
mkdir 创建空白目录
mkdir abc
mkdir -p a/b/c 创建多级目录
-
rm 删除文件或目录
rm 文件名
rm -r 目录名 递归删除
rm -i 询问是否删除
rm -f 不给提示删除
-
cat 查看文本文件内容(较少)
cat -n 显示行号
-
more 查看文本文件的内容(较多)
空格:翻页;回车:下一行
-
head 查看文件的前n行内容
默认查看前10行
head -n 20 查看前20行
-
tail 查看文件的后n行内容
默认查看后10行
tail -n 20 查看后20行
-
cp 复制文件或目录
cp 源文件 目标文件
cp -r 复制目录
-
mv 剪切文件或目录(剪切功能也可用来重命名)
mv 源文件 目标
-
echo 输出内容到屏幕上
echo 内容 > hello.txt 输出内容到指定文件里(输出重定向)
-n 不换行输出
-
chmod 修改权限
-
符号方式
u 拥有者 g 组用户 o 其他用户
chmod g+w abc.txt 给组用户加上写权限
chmod o-r abc.txt 给其他用户删除读权限
-
数字方式
r:4 w:2 x:1
chmod 764 abc.txt 拥有者可读、写、执行,同组用户可读、写,其他用户可读
-
-
date 获取日期信息
date +%y%m%d 仅获取年月日
-
grep 过滤指定信息
grep 指定信息 检索文件
-
man 查询命令手册
man 1 ls (按q退出)
常用快捷键
- 虚拟机中ctrl + 空格 切换中英文
- ctrl + c结束命令执行
- shift + v选择行,按下 = 缩进所有选中行
- ctrl + n 快速补全之前出现过的内容
- alt + ctrl + t 打开终端窗口,exit退出
- ctrl+shift+t 并列打开文件
用户和权限
-
文件的权限
文件有对应三种用户的权限,依次为文件拥有者(文件的创建者,一般权限较高),组用户(和拥有者同组的用户),其他用户
-
r:可读 w:可写 x:可执行
-
linux系统中,普通用户对资源访问的权限是有限的;linux系统中有一个拥有绝对权限的超级用户root
vim编辑器
vim提供了三种工作模式,任何时候只能处在一种工作模式下,通过vi(vim)打开文件时,初始处于一般模式下
一般模式
可以执行一些简单的操作,如复制、粘贴、剪切
-
移动光标
-
通过方向键移动
-
或者使用 h j k l 移动
h:左 j:下 k:上 l:右
-
常用操作
- n + gg光标移动到第n行;不加数字直接按gg,光标移动到第一行
- G移动光标到最后一行
-
-
复制剪切粘贴
- n + yy 复制从光标所在行开始连续n行内容
- n + dd 剪切从光标所在行开始连续n行内容
- p 粘贴 将剪切板内容粘贴到光标所在行之下
- y 复制选中的多行内容
- d 剪切选中的多行内容
- x 向后删除一个字符
-
撤销和恢复
- u 撤销上一步操作
- ctrl + r 恢复上一步操作
编辑模式
编写文件内容,按i进入,按o进入自带换行,esc退出
命令模式
可以执行一些更高级的指令,按 : 进入
-
常用命令
:w 保存
:q 退出
:wq 保存并退出
:q! 强制退出,不保存
:set nu 显示行号
:set nonu 取消行号
😒/old/new 将光标所在行第一个old替换为new
😒/old/new/g 将光标所在行所有old替换为new
:%s/old/new/g 将文件中所有old替换为new
shell脚本
把对shell的操作写入到一个专门的文件中,并让shell一次性执行文件中的内容,这个文件称为shell脚本文件(shell script),后缀为.sh文件
- #! 表示一个约定标记,告诉系统这个脚本文件用哪种shell执行
- #表示注释
命令行参数
- 可以通过命令行参数向shell脚本传递数据,在shell脚本中可以获取命令行上所输入的参数的内容,通过$n,n表示数字,获取具体参数
- $#表示数据总数(不包括$0),$0表示脚本文件的名字(命令行第一个内容),$1表示第一个参数,$2表示第三个参数
shell变量
在shell脚本中可以定义和使用变量,变量用来临时存储数据,可以在整个脚本中使用,从而使shell脚本更像计算机程序
- 使用变量
- 定义变量时可以用 = 给变量赋值,= 左右不能加空格,格式“变量=值”
- 使用变量时要在变量名前加上$
- 变量名外加上花括号{}能帮助shell识别变量边界
- 变量可以重新被赋值
- 变量的命名规则
- 最好做到见名知意
- 变量命名时只能使用英文字符,数字和下划线,但首字符不能是数字,变量名中不能有空格
- 变量名区分大小写
- 变量命名时不能使用shell的关键字
- shell脚本可以从命令输出中提取信息并赋值给变量
- 反引号字符串方式赋值:`var=dat`
- ( ) 方式赋值: v a r = ()方式赋值:var= ()方式赋值:var=(date)
常用脚本命令
- readonly 只读变量,可以使用readonly将变量定义为只读变量,只读变量的值不能被修改、删除
- unset 删除变量
- 逻辑运算
- && 逻辑与
- || 逻辑或
- read 获取键盘输入,-p选项可提示输入内容,如:read -p “请输入内容” content
- random 生成随机数,可用取余操作限定范围,如: [ r a n d o m [ random % 100 ]生成0~99之间的随机数, [random[ random % 100 + 1 ]生成0~100之间的随机数
数学计算
以下两种方法只支持整数计算
-
expr:+加 -减 * 乘 /除 %取余,运算符前后要加空格,其中*符号在shell脚本中有其他含义,需要使用转译字符\
var3=$(expr $var1 \* $var2)
-
使用方括号:将一个数学表达式赋值给某个变量时可以用$和方括号将数学表达式围起来,不需要转译
var=$[10 + 20]
条件比较
test用来测试某个条件是否成立:某个变量是否有内容、变量值的比较、文件类型。格式:test $a(也可用中括号 ,中括号和条件中要加空格[ $a ])
- test数值比较
- a -eq b 检查a是否与b相等
- a -ne b 检查a是否不等于b
- a -ge b 检查a是否大于等于b
- a -le b 检查a是否小于等于b
- a -gt b 检查a是否大于b
- a -lt b 检查a是否小于b
- test字符串比较
- str1 = str2 检查str1是否和str2内容相同
- str1 != str2 检查str1是否和str2内容不同
- str1 < str2 检查str1是否比str2小
- str1 > str2 检查str1是否比str2大(>符号前需加转译符\)
- 注意:字符串比较不以长短为依据,以字符的ASCII值为准,从前往后依次比较字符大小直到不相等
- -n str1 检查str1长度是否非0
- -z str1 检查str1长度是否为0
- test文件比较
- -e file 检查文件file是否存在
- -d file 检查文件file是否存在并是一个目录
- -f file 检查文件file是否存在并是一个文件
- -s file 检查文件file是否非空
- -r file 检查文件file是否存在并可读
- -w file 检查文件file是否存在并可写
- -x file 检查文件file是否存在并可执行
流程控制
分支
-
if-then
if command then 语句块 fi
-
if-then-else
if command then 语句块1 else 语句块2 fi
-
elif
if command1 then 语句块1 elif command2 then 语句块2 elif command3 then 语句块3 else 语句块4 fi
循环
-
for
for var in list do command done
- 通常情况下会将一系列值都集中存到一个变量中,然后遍历变量中的数据
- 在for循环中,可以使用任何能产生输出的命令来获取数据
-
while
while test condition do 语句块 done
-
break:结束循环
-
continue:结束当前循环,继续下一次循环
注意:shell脚本循环中定义的变量在循环外仍可使用