第二周学习 Linux部分

本周主要学习Linux的基本命令,包括docker的部署和操作(下一期)

首先是Linux基础命令

1,cd命令,进入文件夹命令

# 进入网卡配置文件所在目录
cd /etc/sysconfig/network-scripts/

2,ls查看当前目录下的文件

ls有许多参数,比如:

-a all, 显示所有文件及目录 (. 开头的隐藏文件也会列出)

-A 同-a ,但不列出 “.” (目前目录) 及 “…” (父目录)

-l 以长格式显示目录下的内容列表,包括文件的权限、链接数、所有者名称和组所有者、文件大小、最后修改日期时间和文件/目录名称

-r reverse,将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小

-R –recursive,连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来

-S sort by file size。根据文件大小排序,而不是文件名

-t sort by modification time,以文件修改时间排序(从最新开始排)

-d 仅列出目录本身,而不是列出目录内的文件数据(常用)

-f 直接列出结果,而不进行排序 (ls 默认以文件名排序)

-F 根据文件、目录等信息,给予附加数据结构,例如:*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件

-g 像-l,但是不列出所有者

-G, no-group, 不列出任何有关于组的信息

–author 打印出每一个文件的作者

-n 类似-l,用数字UID和GID代替名称

-h 将文件大小以人类较易读的方式(例如 GB KB 等等)列

-c 输出文件的ctime(文件状态最后更改的时间),并根据ctime排序

-C 由上至下的列出项目

--full-time 显示完整时间格式

--time 输出 access 时间或改变权限属性时间 (ctime)而非内容变更时间 (modification time)

--color=never 不要依据文件特性给予颜色显示

--color=always 显示颜色

这是一些常用的参数,有更多可以使用ls --help自行查看

3,mkdir目录创建命令

示例:在root目录下创建一个名为mhy的文件夹,使用ls命令查看

ps:使用mkdir命令时一定要注意文件路径,否则后续寻找时容易丢失

4,touch 创建文件命令

示例:在上述mhy目录内创建yuanshen文件,使用ls命令查看

ps:一般要创建文件并进行编写时可以直接使用vi/vim [文件名],使用vi/vim编辑器的详细命令会在下文讲解

5,chmod 用户权限设置命令

了解chmod首先要了解linux文件权限构成

在 Linux 中,文件和目录的权限用数字表示,通常是三位数字。每一位数字都代表一组权限,分别是文件所有者 (user)、文件所属组(group)、其他用户(others)的权限。 这三位数字是由 7 个权限位组成的,分别是读取 (r)、写入(w)、执行(x),他们的值分别是

读取( r ): 4
写入( w ): 2
执行( x ): 1
这些权限位可以通过相加来得到每组权限的数字表示。例如:
rwx (读、写、执行): 4 + 2 + 1 = 7
rw- (读、写、不执行): 4 + 2 = 6
r-- (只读、不写不执行): 4
查看当前文件的权限是使用ls -l命令,以上文的yuanshen文件为例
可以看到,当前目录的权限是644,我们使用chmod命令改成777
可以看到,当前yuanshen文件是rwxrwxrwx
6,chown 改变文件所属命令
格式: chown 参数 用户 : 用户组 文件路径
参数:
-c 显示更改的部分信息
-f 强制执行
-v 显示详细的处理信息
-R 处理指定目录以及其子目录内容 >  改变当前目录和目录下所有内容的所属用户和组 **
-h 修复符号连接
示例:将mhy及其子目录文件改为root所属
chown -R root /root/mhy

7,cat命令,查看文件内容

示例:查询上文yuanshen文件的内容

8,echo命令,打印后续内容

9,kill 命令 ,杀死进程命令
有一个参数,-9用于杀死僵尸进程
#格式
kill [进程id号]
#强制清除某个进程
kill -9 [id]

10,mv 移动文件命令

示例:把root目录下的benghuan3文件移动到mhy目录下

11,cp命令,复制命令

ps:复制命令在复制时可以改名

示例:把benghuai3复制一份并改名zzz

12,rm 命令,删除文件命令

参数:

-f 直接删除,不需要确认。

-r 递归删除(用来删除目录)

-i 删除前逐一询问。

-v 显示步骤

-d 只删除空目录

示例:强制删除mhy下zzz文件

13,yum命令

#下载yum 包,并自动同意安装需求
yum -install -y [package_name]
#更新源
yum update
#清除yum缓存
yum clean all
#列出所有源
yum repo list
#删除下载的包
yum remove [package_name]

ps:yum命令还有很多,博主只列出了一些常用命令,具体可以使用yum --help查看具体命令

14,systemctl命令

#启动服务
systemctl start [package_name]
#重启服务
systemctl restart [package_name]
#停止服务
systemctl stop [package_name]
#永久停止命令
systemctl disable [package_name]
#开机自启动命令
systemctl enable [package_name]
#查看服务状态
systemctl status [package_name]

15,vi/vim编辑器命令

#使用编辑器进入文件名
vi/vim [file_name]
编辑完了想回到之前状态命令: u
复制命令: yy
粘贴命令: p
批量粘贴:数字 +p
复制多行:数字 +yy
删除一行: dd
批量删除:数字 +dd
复制从当前光标位置开始到当前行最后一个位置: y+$
复制从当前光标位置开始到当前行最前一个位置: y+^
复制当前单词: yw
删除当前单词: dw 从哪个字母开始就从哪个字母开始往后删空格也会删掉如果要想删除全部单词就要去单词的开头删
剪切操作:小写 x
后退删除: shift+ 小写 x 表示从光标后面的不会删除会删除前面内容
更改当前字母:选中字母然后按 r 键就可以修改了
更改一串字母: shift+r 就从当前光标开始的位置输入相关内容就自动替代
光标移动到行前: shift+6
光标移动到行尾: shift+4
光标跳到当前词尾: e
回到当前文档的开头: gg shift+h
到文档末尾:大写 G
显示行号:输入命令 set nu
去除行号:输入命令 set nonu
查找某内容: /+ 搜索内容 跳转到下一个搜索内容按 "n" 如果过了想往回找就按 "N"
取消高亮:输入命令 noh
替换:输入命令: s/ 需要修改的内容 / 需要修改的新内容 替换的内容是光标所在行的第一个被查找到的内容
替换:输入命令: s/ 需要修改的内容 / 需要修改的新内容 /g 替换的内容是光标所在行的全部被查找到的内容
替换:输入命令: %s/ 需要修改的内容 / 需要修改的新内容 替换的内容是每一行所在行的第一个被查找到的内容
替换:输入命令: %s/ 需要修改的内容 / 需要修改的新内容 /g 替换的内容是每一行所在行的全部被查找到的内容
16,用户相关命令
(1)查看用户
cat /etc/passwd ---全部
tail -n 数字 /etc/passwd ---查看文件最后数字行信息
head -n 数字 /etc/passwd ---查看文件开头数字行信息
user1:x:1001:1009::/home/user1:/bin/bash
#1.用户名 (username): 用户在系统中的登录名。
#2.密码占位符 (x):占位符。
#3.用户ID (1000): 用户的唯一标识符,也称为用户ID(UID)。
#4.组ID (1000): 用户的主要组的标识符,也称为组ID(GID)。
#5.用户信息 (): 一些关于用户的额外信息,通常是用户的全名等。
#6.家目录 (/home/username): 用户登录后所在的初始目录。
#7.登录 shell (/bin/bash): 用户登录后启动的默认shell

(2)新建用户

useradd 用户名
useradd -g 用户组 -c "注释" 用户名
参数:
-g --- 指定用户的用户组,该参数的值可以用户组的 id ,也可以是组名
-G --- 指定用户的用户附加组,该参数的值可以用户组的 id ,也可以是组名。在 Linux 系统中,每个用户都有一个主要
组和零个或多个附加组。主要组通常与用户的用户名相同,而附加组允许用户在不更改主要组的情况下,访问其他组
的资源。 ( 了解 )
-u --- uid 用户 id ,系统默认会从 500 之后按照顺序分配 uid ,如果不想使用系统默认分配的,可以通过 -u 自定义。在
Linux 系统中,每个用户都有一个唯一的用户 ID User ID ,通常缩写为 UID )。用户 ID 是一个整数,用于唯一标 识系
统中的每个用户。用户 ID 通常与用户名关联,但实际上是与用户名无关的系统级标识符。
-c --- 给用户加注释

(3)删除用户

userdel 用户名
参数:
-r --- 删除用户同时删除目录
(4)修改用户
usermod -l 新用户名 旧用户名
usermod 参数 用户名
参数:
-g --- 指定用户的用户组,该参数的值可以用户组的 id ,也可以是组名
-G --- 指定用户的用户附加组,该参数的值可以用户组的 id ,也可以是组名
-u --- uid 用户 id ,系统默认会从 500 之后按照顺序分配 uid ,如果不想使用系统默认分配的,可以通过 -u 自定义
-l --- 修改的用户名
(5)用户密码管理
passwd 用户名 ---> 设置时密码处于加密模式
ps:密码过于简单 / 不符合规范会有提示,输入两遍也可以设置成功 , 正规设置应该是 8 位及其以上,包含数字,大小字母,特殊符号构成
示例:修改root密码
ps:修改用户密码时要有足够的权限,下同
查看用户密码
cat /etc/shadow
修改用户密码
passwd 用户名
用户切换
su 用户名 ---如果是root用户不用写用户名

17,用户组相关命令

(1)添加用户组

groupadd 参数 用户组名
参数:
-g 自定义用户组 id ,如果不设置,用户组 id 默认从 500 开始往后依次递增

(2)用户组修改

groupmod 参数 用户组名
参数:
-g 自定义用户组 id ,如果不设置,用户组 id 默认从 500 开始往后依次递增
-n 定义新的用户组名称

(3)用户组删除

groupdel 用户组名

ps:如果该用户组被用户使用了,此时就不允许删除

第二部分是基础shell编程

1,shell脚本的概念:

shell 脚本是由一些按照一定格式组合起来的 shell 命令, shell 脚本不需要编译就可以直接执行,因此是边 解释边执行的 ----- 定义一个 shell 脚本其中命令就会一键执行,可以用 shell 执行一些定义操作,就不用每次输入了
2,shell 脚本格式
shell 脚本都是以 .sh 结尾的文件,下列是一个基本shell脚本的编写 ,以及一些注意事项
 
#!/bin/bash
echo "woaiwanyuanshen"
#第一行:必须是指定一个解释器,来解释脚本中的命令,如果需要使用其他解释器,对应修改
#1:除了第一行的#之外,其他的#代表的都是注释所谓注释就是一段标记文字,这段文字不会被当作代码执
行
#2: shell脚本文件会有权限问题需要使用chmod赋予"运行权限【x】"
#3:执行时只有写明这个shell脚本路径即可执行,例如 ./hello.sh 就可以执行它
#4:也可以执行时来定义解释器, 格式为: 解释器 shell脚本 ---> sh hello.sh 以sh解释器运行
shell.脚本
#5. shell的文件后缀必须是.sh

示例:编写ruozhi.sh

运行他

可以看到项目被输出

3,shell变量

解释:

变量是一个容器,用于存储数据的容器,其中存储的数据可以改变,因此称为变量,例如:一个 杯子,这个 杯子可以装可乐,也可以装雪碧,可以往里面添加,也可以喝掉。杯子本身没变化,变化的 是里面的装的东西,因此这个杯子就是一个变量,可乐雪碧就是数据 shell 脚本属于弱类型语言数据类型决定变量类型,例如:一个杯子本身没有性质,装入水就是水杯,装牛奶就是奶杯,因此性质【变量类型】由装入东西性质【数据类型】【决定】,在脚本中无法指定 变量的类型,缺省状态下,shell 脚本的变量都是字符串【一段文字】

变量规范:

1 、变量定义【创建】: 变量名 = 变量值 ----> 注意等号两边不能有空格,例如 op=yuanshen
2 、变量引用: $ 变量名 ----> 例如: $yuanshen
3 、变量分类:
--- 普通用自定义变量,例如上面的op
--- 系统预定义好的环境变量 ,例如: PATH / SHELL ,可以使用 env environment 环境】命令查看
案例:定义一个变量并引用
#!/bin/bash
wanyuanshen=op
echo $wanyuanshen

命令行变量的含义
案例: 传1 2两个参数
echo "wodeyuanshen uid:" $$
echo "woshidi" $1 "gewanyuanshenderuozhi"
echo "nishidijige" $2
echo "nirukengyuanshendeshijian:" `date`
echo "nideyuanshen mingcheng" $0

运行结果:

4,shell数组

概念:数组也是一个容器,可以存储一组数组,数组存储的数据称为元素,每个元素会分配一个唯一标识称为 下标,下标都是从0开始依次+1

规范:

1、数组定义: 数组名【自定义】=(元素 元素 元素 元素.....)

2, 获取某个元素: ${ 数组名 [ 下标 ]}
案例:输出array的第三个元素
array1=('1' '2' '3' '4' '5' '6')
echo ${array1[2]}

获取全部元素

echo ${数组名[*]}

案例:查询数组array1所有元素

echo ${array1[*]}
给数组赋值
设置元素:数组名[下标]=值

案例:给数组array1的第2个元素赋值999

array1[1]=999
echo ${array1[*]}

5,for循环

概念:循环就是重复执行既定的流程,比如输出 10 hello, 可以 echo ”hello“ 10 遍,也可让 echo ”hello“ 执行 10次【循环】,因此循环就是重复,可以有效的提高代码的利用率,让代码可读性增强【代码少了自然 可读性就强】
格式规范:
格式 1: 依次输出数据包中数据,要求数据包的格式 值 值 值 值 值 “---> 数组
for 变量名 in 数据包【可以是数组】
do -- 开始循环定义
--- 这里开始写要重复执行的代码
done -- 结束循环定义

案例:把数组arr全部以niyaowanshenmoyouxi :值的结构打印出来

#!/bin/bash
arr=(yuanshen bengtie benghuai3)
for names in ${arr[*]}
do
echo "niyaowanshenmoyouxi:"$names
done

运行结果:

格式 2 :可以自定义循环次数
for(( 起始值 ; 条件 ; 步长 ))
do
--- 循环体
done
案例:将我玩了114514次原神打印出来
#!/bin/bash
i=0
for ((j=1 ; j<=114514 ; j++))
do
 i=$(( i+1))
done
echo "niwanle $i ciyuanshen"

运行结果:

6,if分支语句

概念:if语句称为条件分支,满足对应条件去执行对应的流程

格式规范:
if [ 条件 1 ] ; then 代码 1 --- > 如果条件 1 成立执行代码 1
elif [ 条件 2 ]; then 代码 2 --- > 反之如果条件 2 成立执行代码 2
elif [ 条件 3 ] ;then 代码 3 --- > 反之如果条件 3 成立执行代码 3
.... ....
else 代码 4 ----> 反之 执行代码 4
fi --- if结束
条件分支是从上到下依次过滤,先满足先执行,如果都不满足就走 else
条件是指 一个结果为真 / 假的运算,此处就要用到比较运算符, linux 的比较运算符有特殊写法
-- -gt 大于
-- -eq 等于
-- -lt 小于
-- -ge 大于等于
-- -le 小于等于
简单案例:
#!/bin/bash
if(($1 >= 0 && $2 >= 4)); then
echo "好"
fi

复杂案例:

#!/bin/bash
if(($1 >= 0 && $2 <= 4)); then
echo "好"
elif(($1 <= 10 && $2 >=5)); then
echo "你好"
else
echo "大家好"
fi

7,case语句

概念:case分支只能用于判断是否等于某个值, 只有符合了才会执行后面代码

格式规范:

case in
比较值 1)
等于比较值 1 时候执行的代码
;;
比较值 2)
等于比较值 2 时候执行的代码
;;
....
esac
案例:
#!/bin/bash
case $1 in
a)
echo "第一个选项"
;;
b)
echo "第二个选项"
;;
c)
echo "第三个选项"
;;
esac

8,while循环

概念:可以使用while循环来重复执行一段代码块,直到指定的条件不再满足为止

案例:初始化了一个变量count为1,然后使用while循环来检查count是否小于等于5。如果是,就打印出count的值,并将count加1。当count大于5时,循环结束

#!/bin/bash

count=1
while [ $count -le 5 ]
do
    echo $count
    count=$((count + 1))
done

for循环和while循环的区别:

  1. for循环通常用于遍历一个序列(如列表、元组、字符串等),而while循环没有明确的迭代次数或序列。
  2. while循环的条件是在每次循环开始时检查,只要条件为真,就会一直执行循环体。而for循环则是在循环开始前确定迭代的次数。
  3. 使用for循环时,通常需要事先知道循环的次数或者要遍历的对象的长度;而while循环更适用于不确定循环次数的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值