前言bash一般格式
命令名 [选项] [参数1] [参数2]
①命令名必须为小写 ②[选项]是对命令的特殊具体定义 ③"[ ]"中是可选可有可无的
④命令正常执行返回0(无报错即执行)⑤联机后的help对每个命令都做了准确说明+
man man #进入linux工作使用手册,含配置,编程各种操作非常详细!(“q”退出)
info #info是man指令的详细内容(info里有更完整最新的GUN工具信息)
help #显示shell的内部帮助信息
who #输出正在使用系统的用户信息
echo hello wold! #echo将指定内容输出(输出hello wold!)
echo -e 今天 ·date· #echo允许转义将指定内容输出(输出今天加系统时间)
mv #将一个文件移到另一个文件(下面有详解)
cp #将源文件或目录复制到目标文件或目录(下面有详解)
clear #清屏
ls #查看当前路径下文件
date #显示系统日期和时间
cal 10 2022 #显示2022年10月的日历(如果只输出第一个参数,则显示该年的日历)
ip addr #查看自己的网络位置相关数据
passwd #修改用户密码
su #获取管理员操作权限(下载和根目录操作等都需要权限)
sudo #使用管理员权限进行相关的操作
sudo passwd #修改管理员密码
!! #执行上一条指令
!n #执行第n条指令
!string #执行上一条以string开头的指令
poweroff #直接关闭电源
reboot #重启
shutdown #一分钟后关机
exit #退出终端
shutdown -r #关机并重启
shutdown -s -t #设置定时关机
shutdown -c #取消关机
shutdown -f #强行关闭应用
shutdown -h #休眠
ping -b #允许ping一个广播地址
ping -c count #发送count次测试报文
ping -r #绕过正常路由表可用来ping主机是否通
ping -s packetsize #指定发送字节数默认为56字节
~表示用户主目录
.表当前目录
..上级目录
pwd #查看当前工作路径
ls #查看当前路径的内的文件和目录
ls -a #显示所有的文件,包括隐藏文件(以.开头的文件)
ls -A #显示所有的文件,包括隐藏文件,但不包括表示当前目录.和上级目录
ls -c #和-lt一起使用:显示列表并且以ctime(文件状态最后改变时间)排序。
#和-l一起使用:显示ctime并且以文件名排序。其他情况,以ctime排序
ls -d #仅列出目录本身,而不是列出目录里的内容列表
ls -f #直接列出结果,而不进行排序(ls默认会以文件名排序)
ls --color[=WHEN] #是否根据文件类型显示颜色,WHEN可以为never、always或者auto
ls --full-time #以完整的实际模式显示(包含年月日时分)
ls -g #列表显示结果,和-l类似,但是不显示文件所属者。
ls -h #将文件内容大小以GB、KB等易读的方式显示
ls -i #结合-l参数,列出每个文件的inode
ls -l #列出长数据串,显示出文件的属性与权限等数据信息(常用)
ls -n #和-l类似,只是显示的所属用户和组不是名称而是对应的id
ls -r #将排序结果以倒序方式显示。
ls -S #以文件大小排序
ls -t #以修改时间排序
ls --help #显示帮助信息
ll #查看当前目录内的详细内容(权限,创建时间等)
cd ~ #进入当前用户目录
cd / #进入根目录
cd - #进入上一次访问的目录
cd .. #进入上一级目录
cd a/b/c #进入绝对路径(a下的b下的c)
小tips:(命名目录或文件尽量避免 ; | < > ' " $ ! % & * ? \ () [] 因为有特殊含义)
mkdir sn #在当前目录下创建为“sn”的目录
mkdir /abc #在根目录下创建“abc”的目录
mkdir ./bb #在目录上一级创建“bb”的目录2.5 ln(创建连接命令)
ln -d home/m1.c /home/test.1 #给home下的m1.c建立与test.c建立硬链接
ln -s home/m1.c /home/test.1 #给home下的m1.c建立与test.c建立符号链接
ln -i home/m1.c /home/test.1 #给home下的m1.c覆盖test.c(需要用户授权)
find / -name 'a' #搜索根目录下名为"a"的目录和文件
find / -name 'a*' #搜索根目录以为"a"开头的目录和文件
rm -r /abc #删除/目录以及其中的文件(会提醒)
rm -rf /abc #直接强制删除目录及其中文件
文件类型:(一共四种)
普通文件(-):文本文件,数据文件,可执行二进制文件。
目录文件(d):一种特别的文件,可构成文件系统的分层树结构。
设备文件(c字符,b块):一种可以标记各个设备驱动器,字符设备,块设备的文件。
符号链接文件(l):提供其他文件引用的文件。
文件路径:(从某一树节点出发,沿树的分支到达目标文件或者目录所在节点路径)
绝对路径:从根目录(/)出发直到目标文件或者目录的路径
相对路径:从当前目录出发直到目标文件或目录路径
通配符:
* 匹配任意数目的任意字符
? 匹配单一数目的任何字符
[] 匹配[ ]之内的任意字符
[!] 匹配除了[!]内的任意字符
cat -b file #从第一行开始输出file中所有非空内容
cat -n file #从第一行开始输出file中所有内容(包括空行)
cat -s file #将file中相邻空行合并为一个空行
cat -help #查看help的详细用法
more -[num] file #指定一屏显示具体(num)行数
more -c file #显示满后不主动滚屏,清理后显示剩下内容
more -d file #显示时提示还有剩余内容百分比
more -s file #将联系空白行显示一个空白行输出
more +/ file #显示指定文件之前搜索字符串
more +[num] file #从第(num)行开始查看
在进行查看时 Space 显示文本下一屏内容
# B 显示上一屏内容
# Enter 显示文本下一行内容
# / 接着输入一个模式,可在文本中寻找下一个匹配模式
# H 显示帮助信息
# Q 退出more指令)
#(less与more相似,可用上下翻行,pagedown和pageup翻页)
head -[num] file #显示file文件的前num行
head -c -[num] file #显示file文件的前num个字节
head -q file #显示文件内容,但不给出文件名
head -v file #显示文件内容,并给出文件名
touch -a file #改变指定文件的存取时间
touch -m file #改变指定文件的修改时间
touch -f STAMP #使用STAMP指定的时间标签
touch ex2 #创建ex2(空文件)
grep -b -E [file1,flie2...] #查找正则表达式下的输出首次匹配字符串在文件中的位置
grep -n -E [file1,flie2...] #查找正则表达式下的输出匹配模式之前加行号
grep -v -E [file1,flie2...] #查找正则表达式下的显示不包含匹配字符串的文本行号
grep -x -E [file1,flie2...] #查找正则表达式下的显示整个行都要严格匹配行
grep -c -E [file1,flie2...] #查找正则表达式下的匹配字符的行的总数
grep -f -E FILE [file1,flie2...] #查找正则表达式下从文件FILE中获取模式
grep -i -E [file1,flie2...] #查找正则表达式下匹配时不做大小写区分
grep -b -F [file1,flie2...] #查找纯字符串下的输出首次匹配字符串在文件中的位置
grep -n -F [file1,flie2...] #查找纯字符串下的输出匹配模式之前加行号
grep -v -F [file1,flie2...] #查找纯字符串下的显示不包含匹配字符串的文本行号
grep -x -F [file1,flie2...] #查找纯字符串下的显示整个行都要严格匹配行
grep -c -F [file1,flie2...] #查找纯字符串下的匹配字符的行的总数
grep -f -F FILE [file1,flie2...] #查找纯字符串下从文件FILE中获取模式
grep -i -F [file1,flie2...] #查找纯字符串下匹配时不做大小写区分
sort -m file #d对已排序好文件进行合并。
sort -c file #检查是否排序,未排序的报错
sort -o file #将排序放入指定文件里
sort -d file #按字典排序
sort -f file #忽略字母大小写排序
sort -i file #忽略非打印字符排序
sort -r file #按逆序排序
sort -b file #比较关键字忽略前导空白符
sort flie >more #将文件file的前10行定向到more中
uniq -c file #显示输出时在行首加上出现次数
uniq -d file #只显示重复行
uniq -f -fields=N file #忽略比较前的N个字段
uniq -s -chars=N file #忽略比较前的N个字字符
uniq -u file #只显示文件的不重复行
comm -1 file1 flie2 #比较已排序的两个文件不显示第一列
comm -2 file1 flie2 #比较已排序的两个文件不显示第二列
comm -3 file1 flie2 #比较已排序的两个文件不显示第三列
diff -b flie flie1 #忽略空格造成的差别
diff -c flie flie1 #输出格式未上下三行
diff -C n flie flie1 #输出格式为上下n行
diff -e flie flie1 #输出一个合法ed脚本
diff -i flie flie1 #忽略字母大小写区别
diff -r flie flie1 #当file1与file2都是目录,递归找子目录
cmp -b file1 file2 #显示有差异的字节
cmp -i -initial=n file1 file2 #跳过开头n个字节
find [目录名] [条件表达式]
find cat -name filename #查找名为filename的文件
find cat -perm #按执行权限来查找
find cat -user username #按文件属主来查找
find cat -group groupname #按组来查找
find cat -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
find cat -atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
find cat -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
find cat -nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
find cat -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
find cat -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
find cat -size n[c] #查长度为n块[或n字节]的文件
find cat -mount #查文件时不跨越文件系统mount点
find cat -follow #如果遇到符号链接文件,就跟踪链接所指的文件
find cat -prune #忽略某个目录
cp -a /home/mengqc /home/liuz #常在复制目录时使用,递归将所有文件复制到目标文件
cp -d /home/mengqc /home/liuz #当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
cp -i /home/mengqc /home/liuz #交互式复制文件,每个文件都要询问一次,可以输入n或者y进行选择复制或者不复制;
cp -l /home/mengqc /home/liuz #对源文件建立硬连接,实际上不复制文件;
cp -p /home/mengqc /home/liuz #保留源文件或目录的属性;
cp -R/r /home/mengqc /home/liuz #递归处理,复制指定目录里面的层层子目录和对应的文件;
cp -s /home/mengqc /home/liuz #对源文件建立软连接,实际上不复制文件;
cp -u /home/mengqc /home/liuz #复制时比较源文件与目标文件的更改时间,如果源比目标新,则进行复制。或者目标不存在同名时,也会进行复制。
cp -S /home/mengqc /home/liuz #在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
cp -b /home/mengqc /home/liuz #备份已存在的目标文件后再进行覆盖;
cp -v /home/mengqc /home/liuz #显示执行情况的详细信息
rm -f test eample #删除test文件和eample文件(忽略不存在的文件删除)
rm -r /home/a #递归的删除指定目录下的各级子目录和文件(慎用!)
rm -i test #删除test文件(有提醒,输入y确定删除)
rm -d /home #删除空目录
mv -i soure target #将源文件soure,移动到target中(有提醒)
mv -f soure target #将源文件soure,移动到target中(无提醒)
mv /home/mengqc . #将/home/mengqc中所有文件移到当前目录
wc -clw flie #显示文件file的字节数,行数,字数(c[字节]l[行]w[字数]可换位置)
方式:chmod [who] [操作符] [mode] 文件名
例:chmod a+x ex1 #将文件ex1权限改为所用用户可执行
#(具体组合太多以下列出选项
#who u 表示“用户(user)”,即文件或目录的所有者。
# g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
# o 表示“其他(others)用户”。
# a 表示“所有(all)用户”,也就是包括了u、g、o,它是系统默认值。
#操作符
# + 添加某个权限。
# - 取消某个权限。
# = 重新分配权限。
#mode
# r 表示有读取的权限
# w 表示有写入的权限
# x 表示有执行的权限
(umask显示或设置新建文件权限的掩码)
(chgrp 改变文件或目录的用户组)
(chown改变文件或者目录的所属组)
各项参数如下:
USER: 进程的当前用户;
PID : 毫无疑问, process ID的缩写,也就进程号;
PPID :process parent ID,父进程ID
VSIZE : virtual size,进程虚拟地址空间大小;
RSS : 进程正在使用的物理内存的大小;
WCHAN :进程如果处于休眠状态的话,在内核中的地址;
PC : program counter,
NAME: process name,进程的名称
ps -e #显示所有进程
ps -a #显示系统中与tty相关的所有进程信息
ps -f #显示进程的所有信息
ps -l #以长格式显示进程信息
ps -r #显示正在运行的进程
(ncie 取值范围为 -20 ~ 19,数值越小优先级越高)
nice -n , --adjustment=N #在优先级数值加上数字N(默认值为10)
kill 1651 #终止1651号进程
sleep 5s #进程暂停执行5秒
sleep 5m #进程暂停执行5分钟
sleep 5h #进程暂停执行5小时
sleep 5d #进程暂停执行5天
( tar [选项] 文件或者目录)
tar -c file #创建新的打包文件
tar -t file #列出打包文件名
tar -x file #从打包文件中释放文件
tar -f file #指定打包文件名,需要放在选项后
tar -v file #列出详细的tar处理信息
例:
tar zcvf file.tar.gz file #压缩file并打包为file.tar.gz
tar zxvf file.tar.zip file #将file.tar.gz 解压到file
(gizp [选项] [name]一般格式)
gzip -c file #将输出写到标准输出上,并保留原有文件。
gzip -d file #将压缩文件解压。
gzip -l file #对每个压缩文件,显示详细信息
gzip -r file #递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
gzip -t file #测试,检查压缩文件是否完整。
gzip -v file #对每一个压缩和解压的文件,显示文件名和压缩比。
gzip -num file #用指定的数字num调整压缩的速度
(unizp [选项] 被压缩文件名)
unzip -c flie.zip #将解压缩的结果显示到屏幕上,并对字符做适当的转换
unzip -p flie.zip #与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
unzip -l flie.zip #显示压缩文件内所包含的文件
unzip -f flie.zip #更新现有的文件
unzip -t flie.zip #检查压缩文件是否正确,但不解压
unzip -u flie.zip #除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中
unzip -z flie.zip #仅显示压缩文件的备注文字
unzip -v flie.zip #执行是时显示详细的信息。或查看压缩文件目录,但不解压
unzip -T flie.zip #将压缩文件内的所有文件的最新变动时间设为解压缩时候的时间
unzip -x flie.zip #指定不要处理.zip压缩文件中的哪些文件
unzip -d flie.zip #指定文件解压缩后所要存储的目录
unzip -n flie.zip #解压缩时不要覆盖原有的文件
unzip -q flie.zip #安静模式,执行时不显示任何信息
unzip -o flie.zip #不必先询问用户,unzip执行后覆盖原有文件
unzip -a flie.zip #对文本文件进行必要的字符转换
unzip -j flie.zip #不处理压缩文件中原有的目录路径
unzip -aa flie.zip #把所有的文件目录当作文本处理
unzip -UU flie.zip #忽略Unicode编码字符
unzip -C flie.zip #压缩文件中的文件名称区分大小写
unzip -L flie.zip #将压缩文件中的全部文件名改为小写
unzip -I flie.zip #指定字符编码为UNIX
小tips(文本编辑操作有vi和vim两种,vim要下载,建议使用vim,v太反人类,狗都不用)
基本操作
vi m1.c #进入m1文本中操作(若没有则创建该文件)
vi 3 file #进入file文件,光标第3行的行首。
vi word file #进入file文件,光标停留在首次出现word的行首。
vi file1 file2 file3 #依次处理,flie1,flie2,flie3这些文件
命令方式:(进入后默认命令方式)
1. 上下左右--移动光标
2. x --删除字符(可5x,则向右删5个)
3. a --附加命令(附加到当前光标之后)
A --附加命令(附加到行尾)
4. i --插入指令当前位置(进入输出方式)
I --插入指令移动到首行(进入输出方式)
5,. o --打开(在当前行的下一行进入输入方式)
O --打开(在当前行的上一行进行输入方式)
6. k,j, h,l --对应上下左右移动光标
7. 按“0” --光标移动到当前行头
8. w --光标后移至下一个词开头
9. b --光标前移至上一个词开头
10. M --光标移至屏幕中间行的开头
11. dd --删除光标所在整行
12. d[移动命令] --灵活删除
13. u --撤回上一步操作
14. U --撤回对当前行操作
15. J --把当前行与下行合并为一行(“nJ” ,n行合并)
输入方式:(所有操作都将输入文本中,注意上下左右变成abcd)
1, 按esc --退出输出方式进入命令方式
2,Ctrl+U --光标退回刚插入字符串的首字符,并删除
3,Ctrl+W --光标移到最后插入单词首字符,并删除
4,Ctrl+T --光标在开头且有自动缩进,则插入缩进对应的空格
命令替换:(再文本中嵌入命令)
格式:
$(command)
`command`
cmd1$(cmd2)
cmd1`cmd2`
例:
echo now is ·data· i am in $(pwd) #在文本中插入输出时则会显示now is “现在系统时间” i am in “工作路径”
3,ex转义方式:
1,冒号 为ex命令的提示符,按下中断键可以终止正在执行的命令(常规为Delete),
转义方式结束后自动进入命令方式。
#常用的ex命令(包含命令定位,字符检索)
#例
:1 $s/I/i/g
:20
:/this
:?this
退出vi(最好在命令方式下,避免误操作)
1, :wq --保存并退出
2, :ZZ --当对内容修改时将内容写入文件 (:X相同的用法)
3: :q! --不保存退出
一,命令方式:(进入后默认命令方式)
1.1显示
:set nu ##在每一行前显示行号
:set nonu ##取消行号显示
:set mouse=a ##显示鼠标
:set cursorline ##显示行线
1.2字符的搜索:
/关键字
n向下匹配
N向上匹配
1.3字符的管理:
y2l ##复制2个字母
y2w ##复制2个单词
y2y ##复制2行
d2l ##删除2个字母
d2w ##删除2个单词
d2d ##删除2行
c2w ##剪切2个单词
c2c ##剪切2行
1.4字符的替换:
:%s/要替换的字符/替换成的字符/g
:%s/:/@/g ##替换全文的:为@
2,输入方式:
与正常window文本操作差不多
退出vim(最好在命令方式下,避免误操作)
1,:w 将编辑的数据写入到硬盘中。
2,:q 离开vi.后面加!为强制离开。
3,:wq 保存后离开。:wq!为强制保存后离开
shell(解释性编程语言):用于执行复杂的系统管理任务
vim 一个文本加上一个 #!/bin/bash(一定要加且不能错告诉系统这个文本是脚本)
1, bash < 脚本名
bash 2,bash <脚本名 [参数] (与第一个相同可带参数) bash ex2 /user/meng /user/zhang 3, 先加权限,再直接打脚本名字 chmod a+x bash_test1 # 将bash_test1给予执行命令 PATH=$PATH:. # 将脚本所在路径(.为当前工作路径)添加到搜索路径 bash_test1 # 输入脚本名运行脚本 1,常用通配符 ^$ 匹配空行 ^ *$ 匹配含有空格的空白行和空行 ^.*$ 匹配整个行 [abc]*s 匹配s前面含有任意abc随机组合的字符串 [A-Za-z0-9.]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4} 匹配电子邮件地址 \b[[:alpha:]]+\b 或(^| )["({[]*book[]})"?,.:;!'s ]*( |$) 匹配正规文本中的单词 http://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4} 匹配一个HTTP URL 2,引号 “” 双引号中除了($、\)其他均以字符对待 '' 单引号中都以普通字符出现 ` 倒引号中的字符均以命令解释 3、其他符号 命令1&&命令2 逻辑与执行两个命令 命令1||命令2 逻辑或执行两个命令 {echo “你好”; who } 将两个指令组合执行 4、变量 ( 变量区分大小写,为数字(不能开头),字母,下划线组成) 变量名=字符串 定义变量,左右不能有空格 {name} 引用name变量 5,数组 (数组与c语言使用相似) city[0]=beijing city[1]=shanghai 6,位置参数(set 为位置参数赋值) set 参数1 [参数2......] 其中对应 m1 m2 m3 m10 m11 $1 $2 $3 ${10} ${11} let 算数表达式 let "j=i*6+2" #算数运算将i×6+2赋值给j 算数表达式 let ((j=i*6+2)) #算数运算将i×6+2赋值给j if a>b #如果a大于b成立 then max=a #将a赋值给max elif a=b #再判断如果a=b then max=a #将a赋值给max else max=b #将b赋值给max fi #结束 read response #读取响应 case $response in #匹配响应 1)echo one;; #如果匹配到1则执行输出one 2)echo two;; #如果匹配到2则执行输出two 3)echo three;; #如果匹配到1则执行输出three read(从键盘上读取数据,格式 read [选项][变量]) 选项中 -r 取消转义 -t 设置读取时限 -u fd 从文件表述df对应的文件读取数据 -n 读取数据长度不超过nchar个 -N 读取长度等于nchar个 while i<5 #判断条件是否成立 do #do i++ #成立执行的指令 done # 结束 until i<5 #判断条件是否不成立 do #do i++ #不成立执行的指令 done # 结束 for day in Monday Wednesday Friday Sunday #(将day设置为循环变量,遍历后面的星期,与 python相似) do #do echo $day #输出遍历值 done #结束 select choice in a b c d e #从后面的选项中遍历选择 do #do case "choice" in #判断选择的字符 a) echo "This is A choice" #如果选择为a输出This is A choice b) echo "This is B choice" #如果选择为b输出This is B choice c) echo "This is C choice" #如果选择为c输出This is C choice d) echo "This is D choice" #如果选择为d输出This is D choice e) echo "This is E choice" #如果选择为e输出This is E choice break 2 #跳出两层循环 continue 2 #最内层循环向外跳到第2层 exit(退出正在执行的脚本) 1test -[选项] "对象" 2[ -[选项] "对象" ] 3[[ 条件表达式]](测文件属性和字符串比较) 文件方面的测试 选项 参数 功能 -r 文件名 如文件存在并且是用户可读的,则测试条件为真 -w 文件名 如文件存在并且是用户可写的,则测试条件为真 -x 文件名 如文件存在并且是用户可执行的,则测试条件为真 -f 文件名 如文件存在并且是普通文件,则测试条件为真 -d 文件名 如文件存在并且是目录文件,,则测试条件为真 -p 文件名 如文件存在并且是命名的FIFO文件,则测试条件为真 -b 文件名 如文件存在并且是块特殊文件,则测试条件为真 -c 文件名 如文件存在并且是字符特殊文件,则测试条件为真 -s 文件名 如文件存在并且文件长度大于0,则测试条件为真 -t 文件描述符 如文件被打开切文件描述符是与终端设备相关的,则测试条件为真,默认文件描述符是1 字符串测试 选项 参数 功能 -z s1 如果字符串s1的长度为0,则测试条件为真 -n s1 如果字符串s1的长度大于0,则测试条件为真 sl 如果字符串s1不是空字符串,则测试条件为真 != s1!=s2 如果s1不等于s2,则测试条件为真 < s1 > s1>s2 如果按自定顺序s1在s2之后,则测试条件为真 数值测试 数值测试运算符的形式及功能 参数 功能 n1 -eq n2 如果整数n1等于n2,则测试条件为真 n1 -ne n2 如果整数n1不等于n2,则测试条件为真 n1 -lt n2 如果如果n1小于n2,则测试条件为真 n1 -le n2 如果如果n1小于或等于n2,则测试条件为真 n1 -gt n2 如果n1大于n2,则测试条件为真 n1 -ge n2 如果n1大于或等于n2,则测试条件为真 bg %9630 #将9630号进程放入后台运行 fg %9630 #将9630号进程放在前台运行7.3 shell特殊字符
7.4算数运算(两种)
7,5控制结构
if语句
case语句
while语句
until语句
for语句
select语句(常用做菜单)
break语句(跳出循环体)
continue语句(跳出本次循环)
7.6条件测试(三种写法)
7.7 bg和fg命令(bg [进程号]作业的前后台切换)