一入终端深似海,从此妹子是路人。妹子神马的从今天起雨我无瓜。 --2021.4.12
入门介绍
命令行用户界面
命令提示符
[xiemenghang@localhost ~]普通用户,#root用户
常用技巧
- 命令历史:上下箭头显示历史命令(历史命令)
- 自动补全:tab键
- 清空屏幕:clear
- 退出命令行界面:exit命令
- man命令查看文档
用户与文件操作
文件系统介绍
Linux文件系统是一个典型的单根,分层,树形结构,系统第一级目录为根目录,“/”表示。
以字符"."开头的文件为隐藏文件,默认不显示。 目录也是文件,是一种属性不同的文件。 后缀名不是文件名称的必要元素,仅仅方便使用。
文件系统常用目录
、
命令
-
语法:pwd当前工作目录 参数:-P非链接路径
-
语法:which 【-a】获取命令的可执行文件的位置 参数 -a:若有多个可执行文件,列出所有。其根据环境变量的先后顺序列出(echo $PATH)
- 语法:ls [aAdFhlrSt]列出文件和目录 参数:
- 语法:cd [相对路径或绝对路径] 特殊目录:
- .当前目录
- ..上级目录
- -前一个工作目录
- ~当前用户主目录
- ~用户名 用户名的主目录
- 语法:du [-aAdFhlrSt] 显示目录包含的文件大小(Disk Usage) 参数:
- -h:以K ,M ,G方式显示大小
- -a:显示目录大小
- -s:显示总计大小
- 语法:cat 文件名 一次性显示文件内容
(yum.log位置为/var/log)
-
缺点:全部打印所有内容,对长内容不太友好
-
替代:
- less 文件名 分页显示文件内容
- 其他显示文件内容命令
- 语法:od [-t TYPE]文件 参数:
- -t:指定输出内容
- a:默认字符
- c:使用ASCII字符输出
- dox: 十进制,八进制,十六进制
- f:浮点数输出
- 语法: touch 文件 新建一个空白文件,或者修改文件最后修改时间(文件已存在)
- 语法:mkdir [-mp] 目录名称 创建目录 参数:
- -m 指定权限,不考虑默认权限(umask)
- -p递归创建目录
- 语法:cp [-adfilprsu] 源文件 目标文件 cp[options] 源文件1 源文件2 。。。 目标文件 拷贝文件(拷贝=复制+移动!=复制)
参数:
- -a :相当于-pdr(pdr是下面的具体参数)
- -r :递归持续复制(例如如果拷贝一个目录到某个地方,则其不会将目录中内容一起拷贝,这时便用到-r)
- -d :若文件为链接文件,则复制链接文件而不是文件本身
- -i :若文件已经存在,覆盖时会进行交互
- -p :连同文件的属性一起复制,不是使用默认属性
13.语法: rm [-fir]文件或目录 删库跑路(哈哈 哈哈哈 笑) 在服务器上不要使用此命令(很危险) 参数:
- -f:强制删除,忽略不存在的文件,不出现警告信息 删库跑路命令: rm -f /*
- -i:交互删除
- -r:递归删除
用户和权限
Linux用户与用户组
用户分类
1.所有者U 2.使用者
- 组内用户G
- 其他用户O
用户相关文件
- 用户账号信息 /etc/passwd
- 用户密码信息 /etc/shadow
- 组账号信息 /etc/group
- 组管理及密码信息 /etc/gshadow
[root@VM-4-9-centos /]# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
账户名称:密码(加密):UID:GID:用户信息:主文件夹:shell
[root@VM-4-9-centos /]# head -n 5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
组名称:组密码:GID:该用户组支持的账号
- 一个新建的用户了隶属于和其同名的用户组,称为初始用户组
- 初始用户组包含的用户不会在第四个字段列出
- 一个用户可以隶属于多个组
账号密码管理
用户管理其他常用命令
文件权限
[root@VM-4-9-centos ~]# ls -l
total 44
-rw-r--r-- 1 root root 1759 Jan 30 11:10 cosfs.sh
-rw-r--r-- 1 root root 1237 Jan 28 11:55 dnspod.sh
-rw-r--r-- 1 root root 25373 Mar 19 11:43 install_panel.sh
-rw-r--r-- 1 root root 2258 Mar 3 15:14 install.sh
-rw-r--r-- 1 root root 1219 Feb 5 10:40 txcdn.sh
- -rw-r--r-- :权限字符串
- 1:文件链接数
- root:文件所属用户名
- root:文件所属组的名称
- 1759:字节数表示文件大小
- Jan 30 11:10:最近修改时间
权限字符串:10个字符
- 字符1:
语法:file 文件名 确定文件具体类型,即权限字符串第一字符为-时,可以用file语法查看文件具体类型
[root@VM-4-9-centos ~]# file cosfs.sh
cosfs.sh: Bourne-Again shell script, UTF-8 Unicode text executable
- 字符2-4,5-7,8-10分别用于UGO的
针对目录权限的意义:
- 读(r):表示具有读取目录的权限,可以用ls命令查询该目录下的文件信息
- 写(w):具有更改该目录结构列表的权限。包含:创建新的文件与目录,删除已存在的文件与目录,将已存在的文件或目录进行重命名,转移该目录内的文件或目录的位置。
- 执行权限(x),表示能否进入该目录 cd
- 用-代表不具备权限
针对文件:
- 读(r):可读取文件的实际内容。
- 写(w):可以改变文件内容,不能删除。
- 执行权限(x),该文件具有可以被系统执行的权限。
如:-rw-r--r-- :所有者(U)可读,写,不可执行
改变权限
语法:chmod [-R] 权限表达式 文件名
两种权限修改方式
- 使用数字时直接在chmod命令后跟数字形式的权限字符串
[root@VM-4-9-centos test1]# ls -l
total 4
drwxr-xr-x 2 root root 4096 Apr 14 22:24 test2
[root@VM-4-9-centos test1]# chmod 700 test2
[root@VM-4-9-centos test1]# ls -l
total 4
drwx------ 2 root root 4096 Apr 14 22:24 test2
2。 使用字符时:
[root@VM-4-9-centos test1]# chmod g+r test2
[root@VM-4-9-centos test1]# ls -l
total 4
drwxr----- 2 root root 4096 Apr 14 22:24 test2
文件操作进阶
搜索与查找
泛用查找
- 语法:which [-a] 命令名 在PATH变量中匹配的所有文件均列出,否则只列出第一次匹配的文件。
PATH自左至右依次搜寻对应的程序名。
[root@VM-4-9-centos test1]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/bin:/root/bin
[root@VM-4-9-centos /]# which -a cd
/usr/bin/cd
2.语法 whereis [-blmsu] 文件或目录名 在系统规定的几个常用目录内查找指定文件或目录 参数:
- -b:只查找二进制文件
- -l:列出查找的目录范围
- -m:只在man命令对应的目录下查找
- -s:只查找source源文件
- -u:查找不在-b,-m,-s范围内的文件
[root@VM-4-9-centos /]# whereis -m passwd
passwd: /usr/share/man/man1/passwd.1.gz
- 语法:locate [-iclSr] 关键字 在索引数据库内用关键字搜索文件或目录(Linux有内置的数据库,其用键值对的形式对每个文件进行存储索引,索引时间是系统负载较少,因此可能刚创建的文件查不到) 参数:
- -i:忽略大小写
- -c:输出找到的文件数,不输出文件名
- -l:指定输出时找到的结果行数
- -S:输出所查找的索引数据库的相关信息
- -r:支持正则表达式的表示方式
[root@VM-4-9-centos /]# locate -l 3 .html
/usr/java/jdk1.8.0_121/README.html
/usr/java/jdk1.8.0_121/db/README-JDK.html
/usr/java/jdk1.8.0_121/db/RELEASE-NOTES.html
[root@VM-4-9-centos /]# locate -S
Database /var/lib/mlocate/mlocate.db:
23,604 directories
166,093 files
11,933,911 bytes in file names
4,526,836 bytes used to store database
通用查找find
语法:find [PATH] [option] [action] 在PATH路径下,用option的内容进行搜索,搜索后执行action操作。
缺点:不适用索引数据库,速度较慢 参数:
- 时间 option:-atime,-ctime,-mtime +-天数(+代表几天前,-代表几天内)
- mtime:文件内容更改时就会修改该时间
- ctime:文件属性(状态)修改时就会修改该时间
- atime:文件内容被访问时修改该时间
[root@VM-4-9-centos ~]# find /test1/test2 -mtime -3
/test1/test2
#### option
-
用户或组option -uid,-gid 用户或组id -user,-group 用户或组名 -nouser,-nogroup
-
权限,文件名或其他属性option -name 文件或目录名 -size +- SIZE(c字节,kKB) -type 文件类型(f,d,b,c,l) -perm 权限(完全匹配) -perm -权限(完全包含) -perm /权限(任一包含)
action
语法:-exec 命令名 {} ;
[root@VM-4-9-centos ~]# find /usr/src/springbootProject -mtime -3 -exec ls -l {} \;
total 37320
-rw-r--r-- 1 root root 993 Apr 14 16:24 log.txt
-rw-r--r-- 1 root root 389671 Apr 14 15:50 mingchu.jpg
-rw------- 1 root root 22197 Apr 14 22:35 nohup.out
-rw-r--r-- 1 root root 993 Apr 14 16:19 nohup.txt
-rwxr-xr-x 1 www www 35628768 Apr 14 15:43 yuntu-0.0.1-SNAPSHOT.jar
-rwxr-xr-x 1 www www 2151302 Apr 14 15:43 yuntu-0.0.1-SNAPSHOT.jar.original
-rw-r--r-- 1 root root 389671 Apr 14 15:50 /usr/src/springbootProject/mingchu.jpg
-rwxr-xr-x 1 www www 35628768 Apr 14 15:43 /usr/src/springbootProject/yuntu-0.0.1-SNAPSHOT.jar
-rw------- 1 root root 22197 Apr 14 22:35 /usr/src/springbootProject/nohup.out
-rwxr-xr-x 1 www www 2151302 Apr 14 15:43 /usr/src/springbootProject/yuntu-0.0.1-SNAPSHOT.jar.original
-rw-r--r-- 1 root root 993 Apr 14 16:24 /usr/src/springbootProject/log.txt
-rw-r--r-- 1 root root 993 Apr 14 16:19 /usr/src/springbootProject/nohup.txt
-rw-r--r-- 1 root root 46 Apr 14 16:56 /usr/src/springbootProject/.user.ini
归档与压缩
归档
概念:将多个文件变为一个文件 语法:tar [-z|-j|-J] [-c|-t|-x] [-v] [-f] 文件名 用于打包或解包文件夹,配合参数可以在打包或解包的同时压缩或解压 参数:
- -c建立打包文件
- -x解包或解压缩
- -t查看打包的文件内容,不解包
- -zjJ 分别指定压缩程序为gzip,bzip2,xz进行压缩或解压缩
- -v显示过程信息
- -f制定文件命名
压缩
概念:利用压缩算法将文件大小进行压缩 gzip,bzip2,xz是目前用用最广泛的三种压缩程序,压缩比以及性能依次递进。(示例为gzip) 语法:gzip [-cdtv#] 文件名 gcat,gmore,gless 文件名.gz gzip命令用于压缩或解压文件 gcat,gmore,gless用于查看压缩后的文件内容。 参数:
- -d:解压缩
- -c:显示压缩过程的信息
- -t:校验压缩文件一致性
- -v:显示压缩比的信息
- -#:为1-9数字,越小压缩比越低,压缩速度越快,默认为6
文本编辑器nano
文本编辑程序
- 文本编辑程序:用于编辑与查看文本文件,但不能对文字做格式处理(加粗,倾斜等)
- 常见如WIndows记事本,Linux中Vi,Vim,Nano,Emacs等
文本处理程序
- 文本处理程序:不仅可以编辑查看文本文件,还可以进行格式处理。
- 常见Windows:Office,MacOS的iWork
命令
- 打开或新建文件:#nano 文件名
- 禁止自动换行:#nano -w /etc/fstab
- 保存:CTRL+O
- 退出:CTRL+X
- 搜索:CTRL+W
- 剪切:CTRL+K
- 粘贴:CTRL+U
磁盘管理
数据流与重定向
基本概念
将数据从指定的流输入或输出,称为数据流重定向
- 标准输入(stdin):代码为0,符号位<或<<;
- 标准输出(stdout):代码1,符号为>或>>;
- 标准错误输出(stderr):代码为2,符号为2>或2>>
几个示例
管道命令
- 对前面的命令进行处理,界定符号为‘|’,仅会处理stdout,对stderr会忽略。
- 管道命令必须要能够接受来自前一个命令的数据作为stdin。
选取命令 cut与grep
- 语法: cut [-df] [-c] 将前一个命令输出的单行内容进行切割和分解 参数:
- -d:后面接用于分隔的字符,如|“;”,和 -f一起使用。
- -f:依据-d的分隔字符将一行的信息进行分隔,-f指定选取第几段。
- -c:以行内字符的位置取出某段字段,eg"5-10"
[root@VM-4-9-centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/bin:/root/bin
[root@VM-4-9-centos ~]# echo $PATH | cut -d ':' -f 5
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/bin
[root@VM-4-9-centos ~]# echo $PATH | cut -c 5-10
/local
- 语法:grep [-cinv] '关键字' 在前一个命令的多行输出内容中选取符合关键字的行进行显示 参数:
- -c:对匹配的关键字的次数进行计数
- -i:忽略大小写
- -n:输入符合条件的行的同时将行号一起输出
- -v:反向选择,即输出不符合关键字的行
其他命令
进程管理
ps命令
某个时刻的进程状况 语法:
- ps -aux 系统的所有进程数据
- ps -lA 所有进程的另一种形式
- ps -axjf 查看进程树
[root@VM-4-9-centos ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 51920 3560 ? Ss Apr07 1:28 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Apr07 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< Apr07 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S Apr07 0:23 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S Apr07 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Apr07 0:00 [rcu_bh]
进程列表的常用属性值:
top命令
- 动态进程管理,实时监控进程的活动状态。
- top命令按照CPU的使用状况,内存使用情况以及执行时间对进程进行排序
- top命令执行过程中,可以使用各种命令进行交互。
语法: top [-d 数字]|top [-bnp] 参数:
- -d :参数为秒,top更新的频率,默认为5秒
- -b :以批次的方式执行top,通常会搭配数据流
- -n :与-b搭配,需要进行几次的top的输出结果
- -p :指定某个PID进行监测
top执行过程可以使用的按键指令:
其他常用的进程管理命令
网络管理
Shell脚本编程
基本概念
-
Shell是指系统内核程序之上的一系列程序的集合。
-
如:bash,sh,csh
-
#是注释,其后为注释内容
-
#!用于指定当前脚本所使用的Shell版本
-
后缀名一般为.sh
两种执行方式
- 直接命令行执行,必须拥有Shell脚本文件的可读以及可执行权限 如:myscript.sh
- 以bash命令执行,只要拥有Shell脚本文件的可读权限即可。 如:bash myscript.sh
自定义命令别名
语法:alias/unalias alias 别名 = '命令字符串' 用于设定自定义命名 unalias 别名 取消自定义别名
[root@VM-4-9-centos ~]# alias test1='cd/usr; ls;'
[root@VM-4-9-centos ~]# test1
-bash: cd/usr: No such file or directory
常用通配符以及实例
VI/VIM文本编辑器
概念
VI原意为‘visual interface’,即可视化编辑器,是一个文本编辑程序。vim是vi的加强版。其中vs code 就是由其开发而来。
两种命令
- 命令模式:命令序列组成,完成某些特定的动作;
- 插入模式: 输入或编辑文本。
进入与退出
- 进入: vi 文件名
- 退出: ":wq"保存文件并退出,":q!":退出但不保存修改。
变量与输出
echo 命令
基本功能:显示一行文本内容
相当于C里面的printf()
展开功能
- 展开字符串
- 展开变量值
- 展开表达式
- 展开命令
第一个Shell脚本
[root@VM-4-9-centos lighthouse]# vi sh01.sh
#!/bin/bash
#This is my first shell script.
#Show "hello world"
echo -e "hello world"
exit 0
[root@VM-4-9-centos lighthouse]# sh sh01.sh
hello world
- 注释部分一般说明该脚本的功能,版本信息,作者,版权等
- 执行shell脚本一般使用sh命令或bash命令
- shell脚本的后缀名一般为.sh
Shell的变量功能
Shell变量相关常用命令
- 变量的表示:{变量名}
- 设值与取消:变量名=变量值,unset 变量名,这里一般不会在变量名前加$
- 变量的显示:echo
- 环境变量相关操作:env,export
- 变量的输入:read
- 数组:declare/typeset
-
env用于查看已有的环境变量
-
set用于查看所有的变量,即比如说当前脚本中自定义的变量+环境变量
环境变量的功能:
- 环境变量与自定义变量的主要区别是作用域的不同
- 环境变量在整个bash运行过程中均有效,而自定义变量只在当前进程中有效
- 使用export命令将自定义变量转为环境变量
[root@VM-4-9-centos /]# name=xie-super
[root@VM-4-9-centos /]# export name
[root@VM-4-9-centos /]# env
XDG_SESSION_ID=19479
HOSTNAME=VM-4-9-centosSHELL=/bin/bashTERM=vt100
HISTSIZE=3000
SSH_CLIENT=119.28.22.215 43414 22
SSH_TTY=/dev/pts/1
name=xie-super
- 语法:read [-pt] 变量名 从终端键盘输入变量值 参数:
- -p:输入前终端提示语句
- -t:输入变量时等到用户的时间,后面加时间,单位秒
[root@VM-4-9-centos lighthouse]# read -p "pleash input:" test
pleash input:haha
[root@VM-4-9-centos lighthouse]# echo $test
haha
- 语法:declear [-aixr] 变量名 参数:
- -a:声明为数组
- -i:声明为整形
- -x:声明为环境变量
- -r:声明为只读变量
[root@VM-4-9-centos lighthouse]# declare -a array
[root@VM-4-9-centos lighthouse]# array[1]="xie-super"
[root@VM-4-9-centos lighthouse]# echo $array[1]
[1]
[root@VM-4-9-centos lighthouse]# echo ${array[1]}
xie-super
- test 用于测试逻辑表达式
因为echo "exist"与echo "not exist"永远为真,就只是判断逻辑表达式是否为真即可,为真则执行前者,为假则执行后者。
参数传值:
vim sh02.sh
echo "the script name is $0"
echo "total parameter number is $#"
echo "whole parameter is $@"
echo "first parameter is $1"
[root@VM-4-9-centos lighthouse]# sh sh02.sh software csu china
the script name is sh02.sh
total parameter number is 3
whole parameter is software csu china
first parameter is software
条件与循环语句
if语句
1.
if [表达式]; then
语句
fi
2.
if [表达式]; then
语句
elif
语句
else
语句
fi
使用范例
vim sh03.sh
read -p "input your choice(y/n)" flag
if [ "$flag" == "Y" ] || [ "$flag" == "y" ]; then
echo "your choice is yes, continue"
elif [ "$flag" == "N" ] || [ "$flag" == "n" ]; then
echo "your choice is no"
else
echo "no meaningful input"
fi
[root@VM-4-9-centos lighthouse]# sh sh03.sh
input your choice(y/n)y
your choice is yes, continue
[root@VM-4-9-centos lighthouse]# sh sh03.sh
input your choice(y/n)N
your choice is no
[root@VM-4-9-centos lighthouse]# sh sh03.sh
input your choice(y/n)i
no meaningful input
- 注意表达式与中括号之间的空格
- linux的shell脚本中 == 和 = 含义相同
case ... esac语句
相当于C中的switch
case $变量名 in
"变量值")
语句
;;
"变量值")
语句
;;
esac
范例:
while循环语句
1.
while [条件表达式]
do
语句
done
2.
until [条件表达式]
do
语句
done
until 是满足条件表达式退出循环,while是不满足表达式退出
范例
read -p "please input ,Yes to quit:" flag
while [ "$flag" != "Yes" -a "$flag" != "YES" ]
do
read -p "input flag:" flag
done
echo "input Yes to quit"
[root@VM-4-9-centos lighthouse]# sh sh04.sh
please input ,Yes to quit:No
input flag:Yes
input Yes to quit
for循环语句
1.
for 变量名 in value1 value2 value3
do
语句
done
2.
for ((初始值;终止条件;执行步长))
do
语句
done
函数function
语法: function 函数名() { 程序段 }
#调用函数的语法: 函数名
- 由于shell脚本不是编译执行,是从上到下,从左到右解释执行,故函数定义在脚本最前面
- 函数可传参,直接在函数名后列出参数,空格隔开,为局部变量
- 在函数里可以访问参数,为1...
Shell脚本的调试与跟踪
语法:sh [-nvx] script.sh 参数:
- -n :不执行script,仅检查语法
- -v:执行之前,先将script内容显示在屏幕
- -x:跟踪执行过程
软件安装
make与makefile
软件包管理
Linux平台下的软件都是以源代码方式进行发布的
RPM
发行商代表:Red Hat/CentOS 软件管理机制:RPM 命令:rpm 解决依赖与升级:yum
使用RPM安装软件
YUM
基于RPM的前端软件包管理器,主要特点为:
- 从指定服务器自动安装RPM包并安装
- 自动处理包依赖关系
- 引入仓库和容器的概念
DPKG
发行商代表:Debian/Ubuntu 软件管理机制:DPKG 命令:dpkg 解决依赖与升级:apt-get