Linux常用命令

思维导图

一、基本命令

$ 命令 [-选项]  [参数] #基本的命令格式
ssh 用户名@域名或IP -p 22 #登录到远程服务器
passwd #修改密码
exit和ctrl-d #退出系统
logout #退出顶层系统
Q #退出         
who #显示用户信息 
who am i #显示个人用户信息 
cal [month] [year]#显示日历,不带选项默认显示当前月份的日历表
#示例:cal 7 2020,显示2020年7月的日历表
backspace或ctrl-h #删除单个字符
ctrl-u #删除一行字符
ctrl-c #中断程序运行
新shell #临时切换shell 
chsh 新shell #永久切换shell 
useradd 用户名 #创建用户 
userdel -r 用户名 #删除用户
command+鼠标左键 #虚拟机释放鼠标
tab #如果只有一个匹配的文件则自动补全文件名,如果有多个需要按两次显示所有匹配文件名

#获取帮助信息 
help command #内部命令
man command #外部命令

#光标移动
B #向前翻页
空格 #向后翻页 #前移一行  #后移一行 

#三种终端类型:
#物理终端:键盘、显示器、鼠标
#虚拟终端:linux默认存在6个虚拟终端
#伪终端:通过终端模拟软件和远程登录模拟出的终端



二、可视化全屏编辑器

创建和保存

vi 文件名 #创建或打开文件
#1、只读选项`-R`以只读模式打开文件
#2、命令选项`-c`允许用户将指定的vi命令作为命令行的一部分
#3、启动vi时可以给出多个文件名而不仅仅是一个文件名

:n	#vi用下一个文件的内容替换工作缓冲区的内容,如果文件已修改,可以先保存或使用n!命令放弃修改并强制替换
ar 	#查看文件名列表
e 文件名 #切换到新文件,如果文件已修改,可以先保存文件或使用e!放弃修改并强制切换
r 文件名 #读另一个文件,将指定文件的副本放到缓冲区中的光标位置之后,指定的文件成为当前文件的一部分

esc #命令模式
#以:开始的vi命令是ex命令

:w #保存文件
#1、如果当前编辑的文件没有文件名,就必须在保存时`:w`后加上文件名
#2、如果想覆盖已存在的文件,使用`:w!`命令
#3、`:w 另一个文件名`可以将当前文件的全部或部分保存到另一个文件,并保持原文件不变
#4、写另一个文件:`[行,列] w 文件名`将指定范围的文本保存到另一个文件中,如果文件已存在,使用`:w!`命令覆盖已存在的文件

#保存并退出文件
:wq
:x
ZZ
#不保存直接退出
:q  #未修改  
:q! #强制退出

ctrl-z #将作业挂起

文本输入模式

#insert插入模式
i #输入正文出现在光标左侧
I #文本出现在光标所在行的开头
#append追加模式
a #输入正文出现在光标右侧
A #文本出现在光标所在行的结尾
#新添一行
o #在文本所在行的下一行添加新行
O #在文本所在行的上一行添加新行

光标移动键

←↓↑→
hjkl
0 #光标移动到所在行的行首
$ #光标移动到所在行的行末
w #将光标向右移动一个字word
b #将光标向左移动一个字
e #将光标移动到字尾end

光标定位键

ctrl-d #将光标向下移动半页
ctrl-u #将光标向上移动半页
ctrl-f #将光标向下移动一页
ctrl-b #将光标向上移动一页
ctrl-g #显示当前行号
nG或:n #移动到第n行,将光标移动到第一行1G或:1或gg,将光标移动到文件尾G

文本修改

x #删除光标位置指定的字符
dd #删除光标所在的行
u #撤销最近的修改
r #替换光标位置上的一个字符replace
R #替换文本输入模式
. #重复上一次的修改

搜索与替换

#搜索
/字符串      #从光标所在位置向后查找字符串
?字符串     #从光标所在位置向前查找字符串
n      #下一个匹配,与命令搜素方向相同
N      #下一个匹配,与命令搜素方向相反
noh    #查找时去掉当前的高亮显示

#替换
:[行范围]s/被替换的单词/新单词/[g]#行范围默认为当前行,g表示行匹配全部替换,举例:1,$s/unix/linux/gc,c表示每次替换需要确认

重排文本

命令 = 操作符 + 域
d #删除指定位置的文本,并保存到临时缓冲区,dd删除当前行
y #复制指定位置的文本,并保存到临时缓冲区,yy复制当前行
P #将缓冲区的内容放到当前光标之上(前)
p #将缓冲区的内容放到当前光标之下(后)
c #删除文本并使vi进入文本输入模式,删除和插入命令的组合

#域控制键
$ #标识域为从光标位置到当前行尾
0 #标识域为从光标位置到当前行首
e或w #标识域为从光标位置到当前字尾
b #标识域为从光标位置到当前字首

J #连接两行

定制vi编辑器

:set all #显示所有选项
:set     #显示修改过的选项
:set X?  #显示选项X的值

# 常用的选项
# 布尔选项,set X和set noX
autoindent(ai) #将新行与前一行的行首对齐,默认为noai
ignorecase(ic) #在搜索选项中忽略大小写
magic #允许在搜索时使用特殊字符
showmode(smd) #在屏幕显示编辑器的模式
number(nu) #显示行号
report #通知上一个命令影响的行号
# 数字选项,set X=n
scroll #设定[ctrl-d]命令翻动的行数
shiftwidth(sw) #设置按缩进键缩进的空格数,与autoindent选项一起使用(*)

# 缩写
:ab 缩写 字符串 #给字符串指定缩写,在输入缩写字符串后,需输入空格使被缩写的字符串取代缩写字符串
:unab 缩写 #取消缩写
:ab #查看当前所有缩写目录
# 宏
:map 键 键序列 #指定单个键代表键序列,键序列之间空格算一个字符,如果[return]键和[esc]键是map键赋值的一部分,必须在按他们之前按[ctrl-v]键
:unmap 键
:map #查看当前所有宏目录

#.exrc文件
#当用户启动vi编辑器时,当前工作目录下.exrc文件-->主目录下的.exrc文件-->选项的默认值

其他vi命令

#运行shell命令
:! 命令 #vi编辑器将清屏,并将执行命令的结果输出在屏幕上
:r! 命令 #将命令的结果插入到编辑文件中
#搜索与替换
:[行范围]s /被替换单词/新字符串/[g] #g全行替换
#文件恢复选项
系统或vi崩溃时会产生一个.文件名.swp文件,按R恢复
vi -r 文件名 #打开vi时恢复文件
vi -r #查看可供恢复文件的swap文件
:recover #在vi中恢复文件



三、Unix文件系统

CentOS系统根目录(/)下的重要目录

在这里插入图片描述

#不同颜色文件表示不同类型文件
#1、白色文本文件 
#2、蓝色目录文件 
#3、绿色可执行文件 
#4、红色压缩文件
/ #根目录,包含整个文件系统
/bin #存放用户可以使用的可执行文件(cal、date、who、sh、bash)
/sbin #存放系统管理员可以使用的系统管理命令(agetty、fsck、halt、reboot、shutdown、useradd)
/lib和/lib64 #存放函数库和模块文件
/boot #存放linux系统启动时用到的文件
/dev #存放设备文件 
/dev/tty #终端 
/dev/null #空设备
/mnt和/media #用于临时挂载其他文件系统
/proc #虚拟文件系统,存放反应内核运行状态的一系列特殊文件
/proc/meminfo #存放内存信息 
/proc/cpuinfo #存放cpu信息
/root #管理员root的主目录
/home #存放所有普通用户主目录
/etc #存放配置文件
/etc/passwd #文件中包含了如下的重要信息:用户名、密码(若已设置则为x)、用户标识号、组号、用户登录系统后的主目录、用户所使用的SHELL类型
/usr #/usr不是user的缩写,其实usr是Unix Software Resource的缩写,也就是Unix操作系统软件资源所放置的目录,而不是用户的数据;所有系统默认的软件都会放置到/usr,系统安装完时,这个目录会占用最多的硬盘容量
/usr/bin/ #绝大部分的用户可使用指令都放在这里,他与/bin的不同之处:(是否与开机过程有关)
/usr/sbin/ #非系统正常运作所需要的系统指令
/usr/lib/ #包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script),如果是X86_64的Linux系统, 可能会有/usr/lib64/目录产生
/opt #存放第三方软件
/var #存放系统执行过程中经常变动的文件(日志文件、缓冲文件)
/run #临时文件系统,存放自系统启动以来描述信息的文件
/tmp #存放应用程序产生的临时文件
/sys #存放内核数据信息,类似`/proc`
/srv #存放系统提供服务的数据

绝对路径与相对路径

#绝对路径:从根目录开始到达文件的路径,其中第一个/表示根目录,之后的/表示子目录之间的分隔符
#相对路径:从当前目录开始到达文件的路径

常用目录表示

.  #当前目录
.. #当前目录的父目录
~  #用户主目录
~用户名 #该用户主目录
-  #上一个目录

文件显示操作

pwd #显示当前工作目录(以绝对路径格式)
cd 目录名[绝对目录/相对目录] #改变工作目录,不加目录名默认回到用户主目录
ls 目录名 #显示指定目录内容,如果不是目录文件则显示文件名
#选项 
-l #以长格式显示文件详细信息 可将命令写为`ll`
:'
输出信息:
第一列
	第1个字符:文件类型  
		-表示普通文件 
		d表示目录文件 
		b块文件 
		c字符文件
		l链接文件
	第2-9个字符:用户权限设置(所有者2-4、组用户5-7、其他人8-10) 
		r读 
		w写 
		x执行 
		-无权限
第二列 目录中直接子目录的个数或文件的链接数
第三列 文件的所有者
第四列 文件所属于的组
第五列 文件的大小,单位为字节
第六列 文件上一次修改的时间
第七列 文件的名称
'
-a #显示隐藏文件 (以`.`开头的文件都是隐藏文件)
-la #以长格式显示隐藏文件
-C #以多列形式显示,按列排序
-s #以块为单位显示每个文件的大小
-i #显示文件的i节点号
tree -L 1 / #以树形显示主目录的第一层 

文件更改操作

#创建目录
mkdir 目录名 #可以同时创建多个目录,
#选项
-p #一次创建多层目录

#删除目录
rmdir 目录名 #只能删除空目录

#创建文件
vi和cat

#删除文件
rm 文件名
#选项 
-i #删除文件前,要求用户确认
-r #删除指定目录以及目录下所有的文件和子目录
-f #不用确认直接删除

#复制文件
cp 文件名1 文件名2 #在同一目录中创建文件1的副本文件2
cp 文件名 目录名 #在目录中创建文件的副本,可以复制多个文件
#选项 
-b #如果制定的文件已经存在,就创建它的备份~,不会覆盖
-i #如果目标文件已经存在,要求确认
-r #将目录复制到新的目录

#移动文件
mv 文件名 目录 #将文件移到其他目录,可以批量移动文件
mv 文件名1/目录名1 文件名2/目录名2 #修改文件/目录名
#选项 
-b #如果制定的文件已经存在,就创建它的备份~,不会覆盖
-i #如果目标文件已经存在,要求确认
-v #解释操作
-f #如果目标文件已存在,就覆盖它

#链接文件
ln 已有文件名 链接文件名 #创建链接文件
ln 文件名 目录 #在目录中创建链接文件
#选项
-s #创建软链接,可以跨分区,可以给目录创建链接

#字数计算
wc [文件名] #计算一个或多个文件的行数、字数和字符数,无参数默认从键盘输入
#选项
-l #统计行数
-w #统计字数
-c #统计字符数

shell重定向

#输出重定向
command > filename #覆盖重定向
command >> filename #追加重定向
#输入重定向
command < filename #命令行中使用
command << filename #脚本编程使用

cat命令

cat #标准输入输出,ctrl-d结束EOF
#选项 
-n #显示行号
cat filename #显示一个或多个文件的内容,选项-n显示行号
cat < filename #输入重定向,选项-n显示文件行号
cat > filename #输出重定向,创建文件,文件存在则覆盖
cat > filename << EOF #以EOF作为结束符输出到文件
content...
content...
EOF
cat >> filename #文件存在则文本追加输入
cat filename > filename.copy #复制文件,可以将多个文件内容合并到一个文件
cat filename >> filename.copy #追加文件,可以将多个文件追加合并到一个文件

文件名替换

#注意:由shell首先进行文件名替换,然后再执行命令#解释为文件名中的一个字符
* #文件名中的任意个字符
[] #包含括号中指定的字符
[!] #不包含括号中的字符
[1-3] #1到3之间的任意一个数
{string1,string2,...} #列举字符串之一
#通配符可以在其他需要文件名参数的命令中使用

其他操作

find 路径名 搜索选项 动作选项 #在层次目录中根据文件名或文件属性定位文件
#搜索选项 
-name #按照文件名查找文件,文件名可以使用通配符,但是需要使用引号括起文件名
-size ±n #按文件大小查找文件,默认单位块,可后缀cwbkMG,c字节,w字,b块,+表示大于,-表示小于
-type #通过文件类型查找文件,文件类型bcdf,b块设备文件,c字符文件,d目录文件,f普通文件
-atime ±n #通过文件最后访问日期查找文件,n是整数,1表示大于等于一天小于两天,-1表示小于1天,+1表示大于1天,也就是两天或以上
-mtime ±n #通过文件最后修改日期查找文件
touch filename #更新文件的修改时间或创建文件
-newer #找出比指定文件更近期更新的文件
#动作选项
-print #打印找到的每个文件的路径名(默认),可以对其重定向
-exec command {} \; #对找到的文件执行command,花括号表示找到的文件

head 文件名 #显示文件头部,默认显示前10行,可以显示多个文件
#选项 
-n #显示文件的前n行

tail 文件名 #显示文件尾部,与head用法类似

cut 选项 文件名#选择文件指定的域或列
#选项
-f #指定域
-c #指定字符位置
-d #后面跟非默认域分隔符,默认为制表符,与-f连用
cut -f 1,3 phones #举例,显示phones文件的第一个域和第三个域

paste 文件名1 ... 文件名n #逐行连接两个或多个文件
#选项
-d #指定具体分隔符,默认为制表符

more 文件名 #另页查看,只允许向后移动
#选项
-lines #每屏显示指定的行数lines
+line-number #从第line-number行开始显示
+/pattern #从包含pattern的行上面两行开始显示
-c #在显示每页之前清屏而不是翻动,这样有时更快些
-d #显示提示
space #后翻一页
return #下翻一行
Q或q #退出

less 文件名 #比more更高级的页面查看工具,允许在文件中向前和向后移动

ls .[!.]*的解释

想查看当前目录中的隐藏文件但不想显示.和..目录中的内容
ls 目录名 #显示指定目录内容
.[!.]*   #第一个字符为.,第二个字符不是.且必须存在,此时就排除了.和..文件,*为任意个字符

find . -name "abc*"的解释

shell本身会对*进行解析,所以如果不希望shell解析"*",就一定要把通配符用双引号括起来(单引号使用后,就什么都替换不了)

find . -name "abc*" 这个参数会原封不动的传给find,find命令本身具备解析通配符的能力,会在当前目录下面的各级目录下面寻找以abc开头的文件

find . -name abc* 那通配符会被shell解析
1、如果当前目录下没有以abc开头的文件,那传给find命令的就是空的,相当于:
find . -name
find: missing argument to `-name’
2、如果当前目录下游多个abc开头的文件,会出错,相当于:
find . -name abc1 abc2
find: paths must precede expression: abc2 
第二个name前面没有指定寻找的路径
3、如果当前目录下面只有一个abc开头的文件,那就不会出错,但是相当于:
find . -name abc1
最终最在所有的目录下面搜索abc1的文件



四、shell的特征和功能

shell的功能

命令执行:命令执行是shell的一项主要的功能
文件名替换:若命令行中有文件名替换符,shell首先执行替换,然后执行程序
I/O重定向:输入输出重定向是由shell处理的
管道(|):管道能让用户将简单的程序连接到一起完成一个复杂的任务
环境控制:shell允许用户定制环境以满足用户需要
后台处理:允许用户在前台处理事务的同时能在后台执行程序
shell脚本:通常顺序执行的shell命令序列可放在文件中,该文件称为shll脚本

元字符(shell中具有特殊用途的字符)

#除文件替换符?*[]!{}和重定向元字符<>外,还有其他元字符
` #告诉shell执行命令,并将命令的输出插入到命令行的相应位置,也称为命令替换符,也可以用$()
;  #在一个命令结束时,而忽略其返回值,继续执行下一个命令
&& #在一个命令结束时,若返回值为true,继续执行下一个命令
|| #在一个命令结束时,若返回值为false,继续执行下一个命令
() #在子shell中创建命令组,将几个命令放在一对括号中,将这几个命令编为一组,一个命令组可以像单条命令一样被重定向
& #命令置于后台运行,执行时不封锁键盘,返回[作业号]进程号
fg %作业号 #将该作业拉回前台
| #将一个进程的标准输出用做另一个进程的标准输入,后面必须是从标准输入设备输入的命令,cat,wc,head,tail,cut,grep

显示消息

echo [message] #将消息参数显示在用户终端即标准输出设备上,如果没有参数,默认会产生一个空行增加到输出
#选项
-n #禁止换行
-e #解释反斜杠转义字符

#转义字符(不同于元字符,是特殊用途的字符组合),如果用在字符串中,一定要用双引号括起来
\n #回车换行
\b #回退,后面的输入会覆盖当前位置的字符
\c #在输出结尾不换行,下一个输出在末尾继续
\t #水平制表符
\v #垂直制表符
\0n #0后面跟字符的ASCII码

#引用字符集,消除元字符(注意不是转义字符)的特殊含义
\  #反斜杠后面的任何字符按该字符字面解释
"" #双引号中除\$`"之外的任何字符按该字符字面解释
'' #单引号中除'外的任何字符按该字符字面解释
#  ’强于\强于”

shell变量

#环境变量:由系统管理员定义,用来保存系统所必需的内容,也称为标准变量,用户可以修改,需要在配置文件中永久修改
#局部变量:由用户定义

env #显示环境变量
set #显示所有变量
unset 变量名 #删除不需要的变量
变量名=字符串 #给变量赋值,=两端不能有空格,如果变量的取值串中含有空白字符(空格、制表符等),那么该字符串应该用双引号括起来
$变量名 #从变量中取值
#shell变量在命令行经常用做命令参数

#shell的标准参数
#用户可以改变标准的变量的值,但改变是暂时的,如果想永久改变,应该将这些变量放到.profile文件中
HOME #用户主目录的完整路径
PATH #设置shell定位命令时所要查找的目录名,路径串中的目录以冒号分开
#运行可执行文件,需要将该文件所在的目录加入PATH,或以路径形式运行文件
#若将所有自己的可执行文件放在mybin子目录中,可以使用PATH=$PATH:/usr/mybin将mybin加入到PATH变量中

PS1  #命令提示符的字符串
[\u@\h \W]\$ #bash的命令提示符初始设置
#转义序列
\u #当前用户的名称
\h #当前机器的主机名
\W #工作目录
\$ #当前用户是root,显示#,否则显示$
\s #当前运行的shell名称
\w #工作目录的完整路径
\d #显示当前日期
\t #显示当前时间
\# #显示当前终端命令序号
\! #显示历史终端命令序号
PS2  #在用户尚未输入完整命令前输入\并按下[Return]键后显示的命令提示符,表示shell在等待命令的剩余部分,初始设置为>
SHELL #设置用户登录shell的完整路径
PWD #当前目录
USER #当前用户名
$ #当前shell的进程号

其他UNIX系统工具

#延时定时
sleep n; command #使执行该命令的进程延时n秒

#显示PID
ps [PID] #显示指定进程号的进程,不带任何选项时显示用户活动进程的状态
#状态信息:
#PID:进程ID号
#TTY:控制进程的终端号
#TIME:进程已经运行的时间
#COMMAND:命令名
#选项
-e #显示所有活动进程的状态,而不仅仅是当前用户进程
-f #显示信息的完整列表,包括完整的命令行

#终止进程
kill [-signal] PID #终止进程PID
#选项
-l #显示信号列表
#信号值
1)SIGHUP   #重新启动
2)SIGINT   #ctrl-c
9)SIGKILL  #强制终止
15)SIGTERM #正常方式终止进程(默认方式)
kill -9 0  #退出shell

#分离输出
command | tee filename #将命令执行结果显示到终端并保存到指定文件(可指定多个)中

#文件搜索
grep 字符串 [文件名] #在文件中(可搜索多个)查找包含字符串的行,如果不写文件名,默认从键盘输入,如果找到字符串,命令返回值为1,否则为0
# grep所使用的样式称为正则表达式(Regular Expression),grep(Global Regular Expression Print)
#选项
-l #只显示具有匹配的行的文件名
-n #每个输出行前显示行号
-c #只显示每个文件中包含匹配样式的行数
-i #搜索匹配时忽略大小写
-v #仅显示不匹配的行
-w #严格匹配,不能真包含字符串
#示例:在animal文件中查找只包含cat不包含dog的行
grep cat animal | grep -v dog animal

#文本文件排序
sort 文件名 #对文件内容按照字母或数字顺序排序
#选项
-b #忽略前导空格
-d #用字典顺序排序,忽略标点符号和控制字符
-f #忽略大小写的区别
-n #数字以数值排序
-o #将输出存储在指定文件中,在选项后写出存储文件位置
-r #倒序排序
-k #忽略前n个字段并按照指定字段进行排序

启动文件

#系统配置文件:全局性,适用于所有用户
/etc/profile     #设置系统整体环境与自启动程序;登录时执行
	#定义全局环境变量
	PATH     #可执行文件或命令的搜索路径
	USER     #用户登录时使用的用户名
	LOGNAME  #$USER
	MAIL     #用户的电子邮箱
	HOSTNAME #所使用的主机名
	HISTSIZE #命令历史记录的行数
	#设置umask值,umask用于设置用户创建文件或者目录的默认权限,不同权限的编码为r4w2x1,创建目录时,初始权限为777,创建文件时,初始权限为666,umask默认为022,初始权限减去umask为文件创建后的权限
	#调用执行其他配置文件,/etc/profile.d保存应用程序所需的启动脚本
/etc/bashrc      #配置系统整体函数与缩写;打开bash时执行
#用户配置文件:局部性,适用于某个用户
~/.bash_profile  #设置登录用户的基本环境;执行~/.bashrc
~/.bashrc        #设置当前用户的bash环境;执行/etc/bashrc
~/.bash_logout   #用户退出bash时执行

#配置文件的执行顺序
#登录shell:通过虚拟终端、远程登录方式等登录系统打开的shell需要输入账号和密码
/etc/profile
~/.bash_profile --> ~/.bashrc --> /etc/bashrc
~/.bash_logout
#非登录shell:GUI中使用伪终端打开的shell无需输入账号和密码
~/.bashrc --> /etc/bashrc

Bourne Again Shell

export [变量名]     #使一系列shell变量可用于子shell,不带参数查看哪些变量已经输出

alias [别名=变量名]  #为命令定义一个更短,更易记的名字,不带参数显示已定义的别名,等号两侧不能有空格,如果被赋值的值中有空格,必须用引号将该赋值括起
unalias 别名        #取消别名

history            #列出以前输入的命令

进程管理

进程表:为掌握进程信息,系统为每个进程创建维护进程表
进程号
进程状态(就绪/准备)
进程等待的事件号
系统数据区地址

管理进程步骤
fork
wait
exec
exit

五、shell编程

shell脚本

#三种执行方式:使用shell命令和将该脚本程序转成可执行文件
#使用shell命令(不需要执行权限,无路径时首先检查当前目录,然后检查PATH变量路径)
shell名 脚本名
#产生可执行文件(需要执行权限,无路径时只检查PATH变量路径)
chmod 作用对象 权限操作 权限分类
#命令选项
#作用对象
u #用户/所有者
g #用户组
o #其他用户
a #所用用户;可以用来代替ugo
#权限操作
+ #赋予权限
- #取消权限
= #设置权限
#权限分类
r #读权限
w #写权限
x #执行权限
- #没有权限
#在当前的shell中执行脚本(不需要执行权限,无路径时首先检查当前目录,然后检查PATH变量路径)
. 脚本名

#退出系统的三种方式
[Ctrl-d]
exit
logout
kill -9 0 #唯一可以不在登录shell中退出系统的方式

#!/usr/bin/python3
print("hello #!")
#!必须放在脚本第一行,且与解释器路径之间没有空格

#读取输入
read 字符串 变量名1 变量名2 ... #读取用户输入,并将其值存入用户自定义变量中
#如果输入串中包含的字数多于变量数,则所有剩余字将存入最后一个变量中
#如果输入串中包含的字数少于变量数,则剩余的变量为空
#选项
-p #输出字符串后不换行

# #注释

命令行参数

#shell脚本可以从命令行读取最多10个命令行参数存入特殊变量(也称为位置变量),命令行参数是用户输入命令后所跟的数据项,通常用空格分隔
$0 #包含脚本文件名,与命令行上输入的脚本文件名相同
$1,$2,...,$9 #分别包含第一个到第九个命令行参数
$# #包含命令行参数的个数
$@ #包含所有的命令行参数:$1,$2,...,$9,每个参数都用一对””括起来
$* #包含所有的命令行参数:$1,$2,...,$9,所有参数用一对””括起来
$? #包含最后一个命令的退出状态
$$ #包含正在执行进程的ID(PID)

#赋值
set 参数1 参数2 ... #将输入的参数赋给位置变量1、2、…

#终止程序
exit n #终止程序的进行,n为返回码,如果没有提供退出值,则使用shell执行的最后一条命令的退出值

条件和测试

#条件结构
if [ condition_1 ] #[]与表达式之间必须要加空格
then
	commands_1
elif[ condition_2 ]
then
	commands_2
elif[ condition_3 ]
then
	commands_3
...
...
else
	commands_n
fi

test 参数表达式 #如果表达式为真,则test返回0,否则返回非0值,等价于[ 参数表达式 ]

不同类型的判断

#逻辑运算符
-a #逻辑与,必须在[]之内
&& #逻辑与,可以在[]之外
-o #逻辑或,必须在[]之内
|| #逻辑或,可以在[]之外#逻辑非

#数值(整数)
-eq #相等
-ne #不等
-gt #大于
-ge #大于等于
-lt #小于
-le #小于等于

#字符串
=  #等于
!= #不等
-n #是否非空
-z #是否为空串(空格和tab为空)

#文件
-r #是否存在且可读
-w #是否存在且可写
-s #是否存在且长度非0
-f #是否存在且是普通文件
-d #是否存在且是目录文件

算术计算(整数)

expr 算术表达式 #表达式之间的元素之间必须有空格,能够对数字或非数字字符串进行计算,将表达式计算结果显示在标准输出设备上
#算术运算符,除以下两个之外与c语言相同
\* #乘,利用\取消*的特殊含义
\% #取余
#关系运算符,除以下两个之外与c语言相同
\< #小于
\> #大于

let 算数表达式
# 表达式之间的元素之间不能有空格
# let命令自动使用变量的值
# let命令不需要用\消除特殊含义
(( 算术表达式 )) # let命令的缩写

循环结构

#for循环
for variable in list-of-values
do
	commands
	...
	last-command
done
{1..100} #从1到100的序列
$(seq 1 2 5) #初始值为1,步长为2,终止值为5的序列
#输出当前目录所有文件内容
for file in *
do
    cat $file
done

#while循环,只要循环条件为真(0),循环体中的命令就重复执行
while [ condition ]
do
	commands
	...
	last-command
done

#until循环,只要循环条件为假(非0)就执行循环体
until [ condition ]
do
	commands
	...
	last-command
done

六、Linux系统特殊命令

磁盘空间

df         #显示未用磁盘空间
#显示
Filesystem #文件系统设备名
1K-blocks  #文件系统包含的块的个数
Used       #已经使用的数据块的个数
Available  #可用的块的个数
Use%       #普通用户所用的磁盘空间占整个磁盘空间的百分比
Mounted on #文件系统的挂载点
#选项
-h         #以易读方式显示

du [选项] [目录] #显示目录和文件占用磁盘块情况
#不指定目录则默认显示当前目录及其子目录存储空间使用情况,单位:块
#选项
-a         #显示目录中目录和文件占用情况
-b         #以字节为单位显示
-s         #只显示指定目录,不显示子目录

其他Linux命令

at #在指定时间执行程序
#指定时间
	#1-2个数字:整点时间(HH):24小时制,除非使用am,pm
	#3-4个数字:小时和分钟(HHMM)
	#单词时间:noon、midnight、now
#指定日期
	#星期几:Wednesday、Wed
	#月日年:Aug 10,2022
	#单词时间:today、tomorrow
#实例
$at 04 tomorrow
at > sort BIG_FILE #未指定输出文件,以电子邮件将输出信息传送给用户
at > [Ctrl-d]      #退出at命令
$mail              #打开邮箱
&t 1               #查看第一封邮件
&q                 #退出邮箱
#选项
-l                 #列出所有用at命令提交的作业
-m                 #作业完成时向用户发送一个简短的确认信息
-r                 #从at作业调度队列中删去指定的作业号
#实例
$at -l[Return]
1
$at -r 1[Return]
$at -l[Return]
$_

type #显示命令类型,判断一个命令是外部命令、内部命令还是别名

time 命令#计时程序
#显示
real #实际时间:从命令开始执行到命令执行完毕的时间间隔
user #用户时间:命令运行在用户态的时间间隔
sys  #系统时间:命令运行在核心态的时间间隔

tar  #将一组文件复制到另一个文件中
#选项
-c	#创建一个新的存档文件
-t	#列出存档文件中所有被打包的文件
-x	#从存档文件中还原打包文件
-v  #提供打包文件的附加信息
-f	#使用下一个参数作为存档文件的存放位置
-z	#压缩或解压缩
#示例
tar -cvf ./tarfiles/projects.tar . #对当前目录进行归档
tar -tvf ./tarfiles/projects.tar   #列出文件projects.tar中的内容
tar -xvf ./tarfiles/projects.tar . #从projects.tar中还原文件到当前目录中

Linux系统安全

#口令保护
/etc/passwd	#保存用户账户信息,root用户可读可写,其他用户可读
#显示
login-name	#用户名
password	#x表示设置了密码,空为无密码,真实密码保存在/etc/shadow中
user-ID		#用户ID
group-ID	#组ID
user-info	#用户详细信息
directory	#用户主目录的绝对路径
program		#用户登录后要运行的程序,一般为/bin/bash

#文件保护
chmod	#设置文件权限
#数字法设置文件权限,每种权限的权值
r 4
w 2
x 1
- 0
#实例
chmod 777 mayfiles #将mayfiles的访问权限修改为允许所有用户读、写和执行
#目录访问权限
	#读:用户可以用ls命令列出目录中的文件名
	#写:用户可在目录中添加和删除文件
	#执行:用户可用cd命令进入该目录或使用该目录作为路径名的一部分

#超级用户
	#超级用户UID=0
	#系统管理员必须是超级用户
	#超级用户登录名root
	#无权限限制
	#无限制授权:su命令可获得无限制的超级用户权限,需要知道root口令
	#有权限授权:sudo命令需要授权许可,并且无需知道root口令

FTP(File Transfer Protocol)

#连接命令
open romote-name(IP)#与远程FTP服务器建立连接
close				#关闭当前连接,返回本地FTP命令
quit或bye			#关闭当前连接,返回shell

#文件传输命令
ascii				#设置传输模式为文本模式,也是默认模式
binary				#设置传输模式为二进制模式
get remote-filename [local-filename] #下载远程文件到本地,缺省则本地文件名与远程文件名一致
mget remote-filenames #下载多个远程文件到本地
put local-filename [remote-filename] #上传本地文件到远程服务器,缺省则远程文件名与本地文件名一致
mput local-filenames #上传多个本地文件到远程服务器

#下载远程文件或者目录到本地
scp local_file remote_username@remote_ip:remote_file #提前输入用户名
scp local_file remote_ip:remote_folder

#文件和目录控制命令
cd remote-directory-name	#改变远程服务器目录为指定目录
lcd remote-directory-name	#改变本地主机的目录为指定目录
dirls						#列出远程服务器的目录内容
pwd							#显示远程服务器的当前目录名
mkdir remote-directory-name	#在远程服务器上创建一个目录
delete remote-filename		#在远程服务器上删除一个文件
mdelete remote-filenames	#在远程服务器上删除多个文件
#其他命令
?或者help	#显示指定命令的帮助信息
!			#临时切换到shell
hash		#每传送一个数据块显示一个#作为提示

压缩文件

compass 文件名		#压缩文件
#选项
-v	#显示文件的压缩比
umcompass 文件名		#对文件进行解压缩



其他命令

切换使用者的身份su
重新初始化终端reset
xargs命令

$() #命令替换
${} #变量替换,一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
#举例
A=Linux
echo $AB    #表示变量AB

echo ${A}B    #表示变量A后连接着B
LinuxB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值