Linux快速入门

Linux 快速入门

可以通过 tab键来补全提示命令或者目录,终端命令的格式: 命令 [-选项,多个选项可以结合写] [参数] , 大多数情况可以通过 ctrl c 退出命令

磁盘管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
pwd # 查看当前所在目录   即:print wrok directory

ls [-[l][,h][,a]] [目录] # 查看目录下的所有文件和目录,默认查看当前目录下的 即:list
# 选项 l 代表以列表形式展现,a即 all,显示所有文件包括隐藏的,隐藏文件的特征是文件命名最前面有一个点 .
# ls 命令可配合通配符(即正则表达式)使用
# 通配符 : * 代表任意个字符 ? 代表任意一个字符 [] 代表字符组中的任意一个(即范围)(如[abc]代表有abc中任意一个,[a-z]代表任意一个小写字母)

tree [目录名] # 以树状图的形式列出文件目录

cd 目录名 #切换目录
# 目录名可以使用相对路径和绝对路径 相对路径中: . 代表当前目录, .. 代表上一级目录 即:change directory
# cd ~ 切换到该用户的Home目录

mkdir 目录名 # 创建目录 即:make directory 选项: -p可以创建多级目录
touch 文件名 # 创建文件 如果不存在则新建文件,存在则修改文件末次修改时间

rm 文件名 #删除(不经过回收站),也可结合通配符使用 即: remove 选项 -r 则删除目录, 默认删除文件 -f 不提示删除
clear #清屏

cp 原文件 目标文件 #即: copy,拷贝文件
mv 原文件 目标文件 #即: move 移动文件或者重命名文件
# cp和mv均有命令选项 -i , 覆盖前提示, 默认不提示, -r 操作目录

#查看文件内容
cat 文件名 #即:concatenate, 查看文件内容,创建文件,合并文件,追加文件内容等功能
#选项: -n 对所有行进行编号(行号) , -b 对非空行进行编号
more 文件名 #以分页模式查看,按空格键下一页,回车下一行, b 回滚前一页,f前滚一页, /word 即可搜索word字符串

#查找文件
find [路径] -name "查找内容" # 查找文件,可结合正则表达式使用,不写目录默认在当前目录查找,
#选项-name,代表根据文件名查找 , 如 find -name ".txt" 查找当前目录下后缀名为txt的文件

grep 搜索内容(如果有空格,用引号包裹) 文件 #即:搜索指定文件的内容,可结合正则表达式使用
#选项: -n 显示匹配的行及行号, -i 忽略大小写 , -v显示不包括匹配文本的所有行(相当于求反)
#命令参数: ^string 行首匹配,如 grep ^string a.txt 搜索以stirng开头的行; str$ 行尾匹配,搜索str结尾的行

echo 参数(可以是文本或者执行命令后的结果) #输出参数,默认输出到终端,通常配合重定向使用;
#重定向 > 和 >>
# > 文件 代表将文件内容重写,不存在则新建文件, >> 文件 代表向文件追加内容
#如 echo hello > a.txt 则会向a.txt中内容重写为 hello , ls > a.txt 则向文件中输出 ls命令的结果内容
管道 | # 即: 将一个命令的输出可以通过管道作为另一个命令的输出
# 如 ls -lha ~ | more 将用户home目录分页显示, ls -lha ~ | grep -n root 查找用户home目录中带有root的记录

系统与设备信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#关机/重启
shutdown [选项] [时间] #不写选项默认是关机, 不写时间默认一分钟后
#选项: -r 重启 -c 取消执行计划 时间: now 现在执行, 20:00 今天晚上8点执行, +10 10分钟后执行

#查看或配置网卡信息
ping ip地址 #即:访问ip, 按 CTRL C 退出命令
ifconfig #即: configure a network interface , 查看网卡配置信息

#使用SSH命令远程控制
ssh [-p port] user@remote #不设置选项默认为ssh默认端口22, remote可以是IP地址,域名,或者别名

date #显示系统时间
cal # 显示系统日历, calendar 的缩写
df -h # disk free 显示磁盘剩余量, 选项 -h 显示得更人性化
du -h [目录名] # 显示目录的文件大小, 不写目录名默认是当前目录, 选项 -h 显示更加人性化

# 进程信息
ps aux # process status 查看进程详细情况,参数 a 代表 所有用户的进程, u显示详细状态, x显示没用控制终端的进程 ,
top #动态显示运行的进程并且排序 , 退出直接输入 q
kill [-9] 进程id # 结束进程, 选项 -9 代表强行终止

#查看端口占用情况(查看占用端口的PID)
sudo netstat -nultp #查看所有得端口占用情况,状态为listen则表示为占用
sudo netstat -anp |grep 端口号 #查看指定端口的PID

权限与用户组

使用 ls 命令查看文件列表时, 可以看到文件所属的用户和组,以及相关权限

image-20220202193549623

在/etc/passwd文件中,保存了用户的信息

image-20220203183038509

权限管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 权限管理
chmod +或- 权限(rwx均可) #文件或者目录 即: 增加(+) 或减少(-) 权限 ,
#针对目录而言, x即可执行权限决定目录是否能打开或执行命令,
#目录的可读权限决定目录能否查看目录里的内容,
#可写权限决定是否能修改目录的内容(比如增减文件)
#并且可指定用户的权限 , u (代表user) , g(代表group), o(代表other)
#例如: chmod o-rwx file 代表其他人不能读写执行此文件, chomd u+rw file 代表文件所属用户可以读写文件
chmod 权限(数字表示) 文件或目录名 # 修改权限 , 选项 -R 递归修改子目录
#拓展: chmod 命令的权限用数字表示, 单个权限数字表示: r 对应 4, w 对应 2 , x 对应 1 ,
#多个权限将权限数字加起来 如 rwx 权限为 7, rw- 权限为 6, r-w为 5, -wx 为3, 无任何权限为0
#例如: chmod 763 文件或目录 # 这样即为数字表示,其中763依次代表 文件拥有者, 所属组, 其他用户 所对应的权限

sudo 命令 #借用root用户权限执行命令,管理组只能由超级用户root权限执行 su 即 substitute user 的缩写

# 管理组
chgrp 组名 文件或目录 # 修改组,选项 -R 递归修改子目录
groupadd 组名 #即: 添加组
groupdel 组名 #即: 删除组
chgrp 组名 文件或目录 #即: 修改文件或目录的所属组, 选项 -R 递归的修改目录所属组(即该目录以及所有子目录都修改所属组)

#用户管理
su 用户名 # 切换用户, 选项 -l 切换的同时切换home目录
chown 用户名 文件名或目录名 # 修改文件所属者
useradd 用户名 #即 添加用户, 但是这样添加的用户默认是没有管理员权限,无法使用 sudo命令,
# 选项: -m 自动创建用户home目录,默认不创建, -g 指定所在的组,默认在创建一个同名的组加入
userdel 用户名 #即 删除用户, 选项 -r 删除该用户的 home目录,默认不删除home目录
passwd 新密码 #即修改当前用户密码
id [用户名] #即 : 查询用户的id和所属的组的id, 不指定用户名则查询当前用户
who #即 查询当前主机登陆了哪些用户
usermod [-g或-G] 组 用户名 # 设置用户的主组或者附加组,设置后需要重新登陆,选项 -g 设置主组, -G设置附加组, -s 设置登陆shell
# 主组,即用户所属的组, 附加组为用户附加的权限,常见的附加组有: sudo ,adm,cdrom等

which 命令(如ls, passwd等命令) # 查看命令程序文件所在的目录位置

image-20220203193314724

文件打包压缩与软件安装管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#打包压缩
tar 命令只打包不压缩
tar -cvf 要打包文件名.tar 被打包的文件 # 打包 ,选项带 -c
tar -xvf 包文件名.tar # 打开被打包的文件, 选择带 -x

#gzip压缩
#压缩要使用到gzip 命令,压缩包的后缀是 xxx.tar.gz,但可在tar命令添加选项 -z自动调用压缩命令
tar -zcvf 压缩包文件名.tar.gz #被压缩的文件,多个文件用空格隔开 # 压缩文件
tar -zxvf 压缩包文件名.tar.gz [-C 目标路径] # 解压文件, 其中 -C 选项可以指定解压路径
bzip2(读two)压缩
与gzip 压缩差不多, 区别是在 tar命令第一个命令选项将z替换成 j

#软件安装卸载/更新(需使用root 权限),需说明一下,Linux分两大类,ubuntu这种通常用apt-get, CentOS通常用yum,d
apt install 软件名 #安装, 其中apt 是 Advanced Package Tool
apt remove 软件名 #卸载
apt upgrade #检查更新软件

常见软件环境安装

1
2
3
4
5
#ssh
sudo apt-get install openssh-server #安装ssh
sudo service ssh start #启动ssh
sudo ps -e |grep ssh #查看ssh服务是否启动

vim编辑器使用

vim 有三种模式:

  • 只读模式(打开默认进入)
  • 可写模式(在只读模式下按a键或i键可切换) ,在此模式下按 Esc 可以退出可写模式重新回到只读模式
  • 命令行模式(按shift + ; 或者大写模式下的 :) ,
1
vim 文件名  #使用vim 打开文件(文件不存在则新建)

保存或者退出: 在命令行模式下, 输入: ==q!== 强制退出不保存 , ==wq== 保存退出

显示/隐藏行号: 在命令行模式下, 输入: set nu / set nonu

搜索关键字: 在命令行模式下 , 输入 : ==/ 搜索的内容==

撤回: 在命令行模式下 ,输入: u

取消撤回: 在只读模式下 , 按 Ctrl 和 r

删除行和转换至某行: 在只读模式下 , 按 dd 删除某行 , 按 n 和 shift 跳转到某行

软连接和硬链接

在Linux中,文件名与文件数据是分开存储的

image-20220206135757684

软连接相当于window系统的快捷方式

软连接与硬链接的区别是被链接的源文件删除后,软连接就会失效,但硬链接依然不受影响

Shell

shell基本概念:

什么是shell ?

shell(外壳) 是一个用c语言编写的程序 , 它是用户使用linux的桥梁, shell 既是一种命令语言 , 又是一种程序设计语言

shell 是指一种应用程序, 这个应用程序提供了一个界面, 用户通过这个界面访问操作系统内核的服务

什么是脚本?

脚本简单说就是一条条的文字命令 , 这些命令是可以看到的(可以用文本编辑器编辑) , 常见的脚本: JavaScript , VBscript , ASP , JSP, PHP , Shell , python ,Ruby , JavaFx

Shell 种类

在linux中有很多类型的shell , 不同的shell 具备不同的功能 ,shell还决定了脚本中函数的语法, linux中默认的shell 是 ==/bin/bash== , 流行的shell 有 : ash , bash , ksh , csh , zsh

shell 入门

编写一个hello.sh , 内容如下:

1
echo "hello world" ; 

随后使用chmod hello.sh +rwx 给文件添加权限 , 最后运行命令 ./hello.sh , **注意: 即使在当前目录下也不能使用hello.sh**去运行 , 因为这样系统会去寻找Path(即系统环境变量)下的路径,而Path里只有: /bin , /sbin , /user/sbin 等路径

Shell变量

1
2
3
4
5
#定义变量:
变量名=值 #注意:变量后的等号前后不能空格

#使用变量: $变量
echo $变量名 #打印变量

==注意事项:==

变量命名规范与大多数C语言类似,不支持中文汉字,并且在变量名后面的等号不能有空格 ,不可使用关键字(可用help命令查询)

反引号引用自带命令

1
2
3
4
5
6
#内置显示时间命令
data +"%F %T" #显示当前时间,格式为 年-月-日 00:00:00

#shell内容
mg=`data +'%F %T'` ;
echo $mg ;

接受用户输入

语法格式;

1
read -p "提示信息" 变量名

如下例子演示接受用户输入的文件路径然后根据此字符串创建文件

1
2
3
4
read -p "Enter the path name of the file you want to create!" filePath ;
touch $filePath ;
echo the file created! ; #打印提示信息
ls -lh $filePath #显示文件信息

扩展:只读变量(常量):

语法格式:

1
readonly 变量名  #此变量会被修饰被常量

扩展:删除变量:

语法格式:

1
unset 变量名 

条件判断语句

参考:Shell 流程控制 | 菜鸟教程 (runoob.com)

shell 中貌似没有 switch 语句,

与大多数编程语言不同: 没有{} ,而是采用了then , if语句最后结束要加个 fi , 条件内容不需要加括号 , else if 写成了 elif

注意!!! 条件表达式 想使用 <, > , =<, >= 等符号 表达式格式为: (( 条件 ))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#语法1:
if 条件
then
语句(块)
fi

#语法2:
if 条件
then
语句(块)
else
语句(块)
fi

#语法3;
if 条件3
then
语句(块)
elif 条件
then
语句(块)
else
语句(块)
fi

运算符

**原生bash不支持简单的数学运算 ,但是可以通过其他命令来实现,例如 awk , expr(最常用) , ==注意:除了赋值等号之间不能用空格隔开,其大多数都必须用空格隔开== **

expr是一款表达式计算工具, 如可以在终端中使用命令expr 2 + 2 , 需要注意的是:

  • ==表达式中的运算数和运算符之间要有空格隔开,这里与大多数编程语言不同==

  • 由于expr也是一个原生命令 , 故在shell中使用时需要用 反引号包裹 例如:

    1
    2
    val=`expr 2 + 2` ; 
    echo "$val" ;

算术运算符

运算符 说明 举例
+ 加法 expr $a + $b 结果为 30。
- 减法 expr $a - $b 结果为 -10。
* 乘法 expr $a \* $b 结果为 200。
/ 除法 expr $b / $a 结果为 2。
% 取余 expr $b % $a 结果为 0。
= 赋值 a=$b 把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true

注意:==条件表达式要放在方括号之间,并且要有空格==,例如: [$a==$b] 是错误的,必须写成 **[ $a == $b ]**。

例:

1
2
3
4
5
6
7
8
9
10
a=10 ;
b=20 ;

echo "a=$a,b=$b"

echo "a+b=" `expr $a + $b`
echo "a-b=" `expr $a - $b`
echo "a*b=" `expr $a \* $b` # 注意:*原指的 通配符 , 所以乘法需要转义 \*
echo "a/b=" `expr $a / $b`
echo "a%b=" `expr $a % $b`

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。**(equal)** [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 (not equal ) [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。**(相当于 > , greater than)** [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。**(相当于 < , less than)** [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。**( >= ,greater than equal)** [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。**(<= , less than equal)** [ $a -le $b ] 返回 true。

逻辑(布尔)运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。

注意: 使用下面的逻辑运算符需要 用两个 方括号d

运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否不相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n “$a” ] 返回 true。
$ 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

文件测试运算符d

操作符 说明 举例
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-b file 检测文件是否是块设备文件(如u盘之类的),如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。

shell脚本附带参数选项

自定义的shell 脚本其实也可以设置命令选项, 接收选项的方式通过 $1 $2 $3 $4 等去接受, 分别代表了第一个选项,第二个选项第三个选型 …

1
2
3
4
#讲命令选型打印出来 , $0表示脚本文件自身
echo $1
echo $2
echo $3

案例:自定义命令user -add 用户名 添加用户, user -del 用户名 删除用户 ,

  1. 编写shell文件,
1
2
3
4
5
6
7
8
9
if [$1 = "-add"]
then
useradd $2 ;
elif [$1 = -del]
then
userdel -r $2 ;
else
echo "命令有误!"
if
  1. 随后定义别名 , 在~/.bashrc文件中添加如下内容:

    1
    alias user='shell文件路径及文件名.sh'

别名(alias)

Linux允许我们给脚本文件或者内置命令自定义别名 , 别名配置信息都存储在~/.bashrc,文件,

1
alias -p  #查看已经设置的别名

image-20220313000429055

==注意:添加别名后需要切换一下用户才能生效==

SSH远程链接

  1. 安装SSH
  2. 根据主机ip进行链接

CentOS 命令补充

防火墙放行

1
2
3
4
5
6
7
8
9
10
11
firewall-cmd --permanent --add-service=dns
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
# 查看放行的服务:
firewall-cmd --list-services

# 关闭SELinux,重启后失效
setenforce 0
# 查看是否SELinx关闭成功, 成功提示 Permissive
getenforce

网卡相关配置

1
2
3
4
5
6
7
8
9
10
# 查看网卡信息
nmcli device
# 添加连接
nmcli connection add con-name 连接名 ifname 网卡名 type ethernet
# 修改ip地址
nmcli connection modify 连接名 ipv4.method manual ipv4.addresses IP地址/网络位
# 激活连接
nmcli connection up 连接名
#查看所有链接
nmcli connection show