Linux基本指令学习笔记

本文详细介绍了Linux操作系统的基础指令,包括网络设置、软件包管理(RPM包管理)以及Shell编程。在软件包管理部分,讲解了RPM软件包的安装、升级和卸载。在Shell编程章节,阐述了脚本运行方式、Bash的基本功能,如历史命令查看、别名、快捷键、输入输出重定向,并深入探讨了Shell脚本的条件判断和流程控制。此外,还涵盖了用户和用户组管理的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell编程 教程

网络设置

使用ifconfig eth0 192.168.1.56即可设置或改变Linux系统的网络IP地址,注意在虚拟机中所设置的ip地址要和主机在同一个网段中,否则不能相互ping通(以上只是临时生效,重启之后则失效)

IP地址分类:
在这里插入图片描述

  • 子网掩码作用:(1代表网络位,0代表主机位)确定任意IP地址是否属于同一个网络段,同一网段之间通讯只需要交换机就可以了,但是不同网络段之间通信需要经过路由器
    在这里插入图片描述

注意:IP地址和子网掩码相与操作就是网络地址,将子网掩码是0的位数和IP地址对应的位数的值变为1就是广播地址

示例(来自兄弟连Linux)
在这里插入图片描述

网卡信息文件

  • vim /etc/sysconfig/network-srcipts/ifcfg-eth0
    在这里插入图片描述

主机名文件

  • vim /etc/sysconfig/network
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3L0Maf3-1577364732575)(en-resource://database/1823:1)]

DNS文件

  • vim /etc/resolv.conf

补充:

  • df -h:查看系统分区使用情况
软件包管理
1软件包管理简介

1.1、软件包分类

  • 源码包:使用C语言编写
  • 二进制包(源码包经过编译)(RPM包,即是系统默认包):好处在于安装比较快,坏处在于不可以查看里面的代码

1.2、源码包
优点

  • 开源:可以修改
  • 可以自由选择需要的功能
  • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
  • 卸载方便(直接删除对应的安装文件就可以了)

缺点:

  • 安装过程步骤比较多,尤其安装较大的软件集合时,容易出现拼写错误
  • 编译过程时间较长,安装比二进制安装时间长
  • 因为是编译安装,安装过程中一旦报错很难解决

1.3、RPM包
优点:

  • 包管理系统简单,只通过几个命令就可以实现报的安装、升级、查询和卸载
  • 安装速度比源码安装快许多

缺点:

  • 经过编译,不再可以看到源代码
  • 功能选择不如源码包灵活
  • 依赖性

注意:在centos中的二进制包是PRM包,但是在Ubuntu中的二进制包是dpkg

2RPM软件包管理-rpm命令

2.1、 rpm包命令原则
在这里插入图片描述

2.2、rmp包依赖性

  • 树形依赖:a依赖b依赖c
  • 环形依赖:a依赖b依赖c依赖a
  • 模块依赖:模块依赖查询网站:www.rpmfind.net

2.3、包全名和包名

  • 包全名:操作的包是没有安装的软件包是,使用包全名(一般安装和更新),而且要注意路径
  • 包名:操作已经安装的软件包时,使用包名(查询和卸载)。

2.4、 RPM安装

使用命令rpm -ivh 包全名

选项:

  • -i:安装
  • -v: 显示详细信息
  • -h: 显示进度
  • – nodeps: 不检测依赖性

2.5、 RPM升级
使用命令rmp -Uvh 包全名

  • U :升级

2.5、 RPM卸载
使用命令:rpm -e 包名
注意:不需要使用包的全名

Shell编程
1 脚本运行方式(P64)
1.1 脚本文件

以“.sh”结尾的文件,并且在文件第一句是 #!/bin/bash 表明这是一个shell文件,并且注释语句为“#”

  • 补充:采用echo输出内容,echo 内容
  • 注意:如 echo $PATH 输出环境变量PARH的值,注意,如果直接在命令行里面输入$变量名 ,那么会将变量的具体值取出,如果该值是具体命令如ls 会执行该命令,但是该值不是具体值,则会报错
1.2 运行shell文件
1.2.1赋予执行权限,直接运行
  • 首先使用 chmod 755 shell_name.sh为其添加运行的权限

  • 使用绝对路径或者相对路径的方式运行脚本文件

/home/fei/shell_dir/hello.sh 或者./hello.sh

1.2.2 通过bash调用执行脚本文件

在当前路径下执行bash hello.sh,Linux系统下的所有命令都没有大写的

2 Bash 基本功能
2.1 历史命令查看
  • 使用history命令可以查看历史命令

  • 使用history -c 清空历史命令

  • 使用history -w 默认将缓存中的10000条历史命令保存到指定文件,默认保存到~/bash_history

2.2 历史命令的调用
  • 使用 上下箭头 条用以前的历史命令
  • 使用 !n 重复执行第 n 条历史命令
  • 使用!!重复执行上一条命令
  • 使用!字符串重复执行最后一条以该字符串开头的命令
2.3 命令自动补全功能

使用 tab键 补全 文件名、命令、目录等

2.4 别名
  • 使用 alias 来查看已经定义的别名
  • 使用 alias 别名 = “命令名临时定义别名 如:alisa vi = vim ",使用 unalias 别名删除别名
  • 使用vim /root/.bashrc 编辑系统文件,使得让别名永久生效

注意:查看Linux中的变量时候需要在变量前面加上“ " 符 号 , 如 " "符号,如" ""PATH"则是显示环境变量,使用echo &PATH则输出系统环境变量的值,其值是个命令的绝对路劲环境变量

2.5 快捷键
  • ctrl + A: 将光标移到命令开头
  • ctrl + E: 将光标移到命令行行尾
  • ctrl + C: 强制终止当前命令
  • ctrl + D: 退出终端
  • ctrl + L : 清屏
  • ctrl + u: 删除或剪切光标之前的命令
  • ctrl + k: 删除或剪切光标之后的命令
  • ctrl + Y:粘贴
2.6 输入输出重定向

1 标准输入输出

设备文件描述类型
键盘0标准输入
显示器1标准输出
显示器2标准错误输出

2 输出重定向

类型符号示例作用
标准输出重定向命令 > 文件cat hello.sh > abc以覆盖的形式,把命令的正确输出结果输出到指定的文件设备当中
标准输出重定向命令 >> 文件以追加的形式,把命令的正确输出结果输出到指定的文件设备当中
标准错误输出重定向命令 2> 文件lsss > haha以覆盖的形式,把命令的错误输出结果输出到指定的文件设备当中
标准错误输出重定向命令 2>> 文件以追加的形式,把命令的错误输出结果输出到指定的文件设备当中

注意:命令需要能输出内容,如cd 命令则不能使用,并且当命令产生正确输出时候,比如使用date 2> haha,并不会产生重定向文件haha,因为date会产生正确输出,并且执行上条命令后会将时间输出到屏幕,所以在使用以上命令之前要判断命令的正确与否,不实用,所以通常使用以下命令。

类型符号示例作用
正确输出和错误输出同时保存命令 > 文件 2>&1 或 命令 &> 文件以覆盖的形式,把正确的输出结果 和 错误的输出结果 同时保存到一个文件当中
正确输出和错误输出同时保存命令 >> 文件 2>& 或 命令 &>> 文件以追加的形式,把正确的输出结果 和 错误的输出结果 同时保存到一个文件当中
正确输出和错误输出同时保存命令 >>文件1 2>> 文件2ls >> abc 2>> cuowu把正确的输出追加到文件1中,把错误的输出追加到文件2中

3 输入重定向

wc xaing [选项][文件名]

2.6多命令顺序执行
多命令执行符格式作用
命令1 ; 命令2命令1 无论正确执行还是错误执行之后,接着执行命令2,适合没有逻辑关系的几条命令
&&命令1 && 命令2逻辑与,只有当命令1正确执行后,才会执行命令2
||命令1 || 命令2逻辑或

例子:
命令 && echo yes || echo no 常用来判断“命令”的正确与否,如果命令正确则先执行命令然后输出yes, 如果命令错误则输出no…

2.6 管道符

命令格式:命令1 | 命令2
作用: 命令1 的正确输出 作为命令2 的操作对象
注意:如果命令1执行错误或没有输出则命令2不会被执行
示例: ll -a /etc | more

补充:grep 命令

2.7 通配符和其他特殊字符号
通配符作用
匹配一个任意字符
*匹配0个或任意多个任意字符,也就是可以匹配任何内容
[abc]匹配括号中的任意一个字符
[-]如 [a-z]
[^]逻辑非,如[^0-9]

示例:
rm -rf /home/fei/Demo/* 删除该文件目录下的所有文件

符号作用
’ ’单引号,在单引号中的所有特殊字符(如“$”等)都没有特殊含义
“”双引号,在双引号中的特殊符号(除了“$"、` 和\之外)都没有特殊含义,且三者分别表示 “调用变量的值”,“引用命令”和“转义符”的含义
``反引号,反引号括起来的内容是系统命令,在bash中会优先执行它
#在shell表示注释
$用于调用变量的值
\转义字符,跟在\后面的特殊字符会失去特殊含义,变为普通字符
2.8 变量

变量类型

  • 用户自定义变量
  • 环境变量:
  • 位置参数变量:
  • 预定义变量:
2.8.1 用户自定义变量
  • 组成:字母、数字、下划线,且不能以数字开头
  • 类型:变量的默认类型是字符串型,如果要进行数值运算,则需要指定变量类型为数值型
  • 变量用等号连接值,等号左右两侧不能有空格
  • 变量的值如果有空格,则需要使用单引号或双引号
  • 在变量的值中,可以使用\ 转义符
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量值需要使用双引号包含,如“$变量名”
    在这里插入图片描述
  • 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
    如:
(base) fei@carrot:~$ local_time=$(date)
(base) fei@carrot:~$ echo $local_time 
2019年 03月 16日 星期六 20:40:14 CST

(base) fei@carrot:~$ local_time2=`date`
(base) fei@$ echo $local_time2
2019年 03月 16日 星期六 20:41:44 CST
  • 环境变量名建议大写
  • 查看当前系统的所有变量:set
  • 删除变量: unset val_name

注意:本地变量即自定义变量只在当前bash中存在,如果进入子bash 中,则不存在刚定义的本地变量,但是环境变量存在于所有的bash中,及环境变量相当于全局变量,使用pstree即可查看当前在哪一层bash中

2.8.2 环境变量

定义: export 变量名=变量值
查询环境变量:env (只显示环境变量)
删除环境变量:unset 环境变量名
调用:$变量名

系统常用环境变量:PATH 、 PS1

有一个hello.sh脚本文件存放于目录:/home/fei/Desktop/linux/shell
在没有添加该文件的环境变量时候,直接运行会直接报错,但是将该文件的目录添加发哦系统环境变量中后,直接运行hello.sh之后直接出结果!
在这里插入图片描述

$ pwd
/home/fei/Desktop/linux/shell
$ hello.sh
hello.sh:未找到命令
$ PATH="$PATH":/home/fei/Desktop/linux/shell 
$ hello.sh 
hello world
2.8.2 位置参数变量

当shell程序里面需要用户交互输入程序运行的参数变量时候,需要在shell程序中使用$来定义位置参数,执行该shell程序的时候,需要在其后加上对应的参数

位置参数变量作用
$nn为数字,$0代表命令本身,$1~ 9 代 表 第 一 到 第 9 个 参 数 , 10 以 上 的 参 数 需 要 使 用 大 括 号 包 含 , 如 9代表第一到第9个参数,10以上的参数需要使用大括号包含,如 9910使{12},程序如例2821
$*这个变量代表命令行中所有的参数,$* 把所有的参数看作成一个整体,程序如例2822
$@这个变量代表命令行中所有的参数,不过把每个参数区别对待,程序如例2823
$#这个变量代表命令中所有参数的个数,程序如例2822

例子2821:
      首先编写一个shell脚本,内容如下:

#!/bin/bash
echo $0
echo $1
echo $2
echo $3

      运行结果如下:
在这里插入图片描述
例子2821:
在这里插入图片描述
     运行结果
在这里插入图片描述
例子2822(使用$*,$@,$#的区别):

  1 #!/bin/bash
  2 
  3 echo '使用$*的循环:'
  4 for i in "$*"
  5     # $*将所有的除了$0之外的参数看作成一个整体,所以这个循环只会执行一次
  6     do
  7         echo "the parameters is: $i"
  8     done
  9 
 10 echo "\n"
 11 
 12 echo '使用$@的循环:'
 13 for i in "$@"
 14     #$@ 相当于一个列表,将所有的参数分别存放在里面,每次调用一次,依次从头到尾部给出一个值
 15     do  
 16         echo "the parameter is: $i \n"
 17     done
 18 
 19 echo "the nums of parameters is : $#"

在这里插入图片描述
执行结果:
在这里插入图片描述

2.8.3 预定义变量
预定义变量作 用
$?其值为最后一次执行的命令的返回状态,如果这个变量的值为0,表示上一条命令正确执行,如果这个变量的值非0,则表示上一条命令执行不正确,比如若其值为127表示上一条命令不存在,具体的值已经设定好,程序代码示例如图2831
$$当前进程号(PID),程序代码示例2832
$!表示后台运行的最后一个进程的进程号,程序代码示例2832

程序代码示例2831:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cQDVl7pd-1577364732587)(en-resource://database/1625:1)]
程序代码示例2832:
在这里插入图片描述

2.8.4 接受键盘输入

命令read [选项] [变量名]
选项:

  • -p “提示信息” :在等待read输入时,输出提示信息
  • -t 秒数 : read命令默认会一直等待用户输入,使用此选项可以指定等待时间,超过指定时间没有输入则终止命令
  • -n 字符数 : 表示read命令只要接受指定长度的字符数,就会自动执行该命令
  • -s :隐藏输入的内容,适用于机密信息的输入,如同输入密码一样效果
    注:命令末尾是变量名,用于接受用户屏幕的输入值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dh2ygChY-1577364732589)(en-resource://database/1631:1)]
在这里插入图片描述

补充:换行命令echo -e \n

2.8.5 数值运算与运算符

1 使用declare命令声明变量类型,进行数值运算

格式:declare [+ / -][选项] 变量名

  • - :给变量设定类型属性
  • +:取消变量的类型属性
  • -i :将变量声明为整数型(int)
  • -x:将变量声明为环境变量
  • -p:显示指定变量被声明的类型

在这里插入图片描述

2 使用expr 或let 进行数值运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAa7TRBw-1577364732593)(en-resource://database/1639:1)]

注意:上图中的 ( . . . ) 是 将 里 面 的 运 行 结 果 赋 值 给 d d 即 (...) 是将里面的运行结果赋值给dd 即 (...)dd()中括号里面的是命令,

3 使用$((…))进行数值运算 最常用
在这里插入图片描述

4 运算符
在这里插入图片描述

2.8.6 变量测试与内容替换

目的:根据x的值来判断y的值情况,如是否存在、是否为空,以前的值是什么!因为echo语句可以将某一变量的值取出来给人来来判断,所以变量测试用以计算机来判断
在这里插入图片描述

2.8.6 环境变量配置文件

1 source 命令

 作用及来源:当修改环境变量等配置文件之后,只有退出登录且重新登录之后才会,被修改的环境变量等配置文件才会生效,使用source 配置文件名. 配置文件名(此处的. 相当于source)之后可以无需重新登录而强制立生效。

2 环境变量配置文件简介

  • 环境变量举例:PATH, HOSTNAME, HISTSIZE, PS1等
  • 环境变量配置文件如下五类:
    • /etc/profile
    • /etc/profile.d/*.sh
    • /etc/bashrc
    • ~/.bash_profile
    • ~/.bashrc

备注:含有etc路径名的配置文件,作用对象是所有的用户,因为每个用户都有家目录,所以在不同的用户的家目录下修改配置文件,配置文件则分别作用于对应的用户

3 环境变量配置文件作用

用户登录系统之后,首先读取/etc/profile

各个配置文件的作用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 shell编程
3.1 正则表达式
3.1.1 正则表达式与通配符
  • 正则表达式用来在文件中匹配符合条件的字符串,正则式包含匹配。grep、awk、sed等命令可以支持正则表达式。

如使用grep命令在文件中搜索符合搜索条件的字符串
在这里插入图片描述

  • 通配符,在shell中,有*、?、[] 用来匹配符合条件的文件名,匹配符是完全匹配。ls、find、cp这些不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

注意:在非linux的shell中,通配符只是RE中的一个符号

3.1.2 基础正则表达式

在这里插入图片描述

  • *
    在这里插入图片描述

  • .
    在这里插入图片描述

  • ^ & $
    在这里插入图片描述

  • []
    在这里插入图片描述

  • \
    在这里插入图片描述

  • \{n\}
    在这里插入图片描述

  • \{n,m\}
    在这里插入图片描述
    补充:grep 只会提取文件中符合搜索条件的行,-n会显示行号

3.1 字符提取

cut -d "分割规则" -f 2,3,4 filename 用来提取文件中的某些列,通常结合grep(用来提取文件中的某一些列)使用

  • d :表示使用什么规则分割每行,默认是分割符是制表符,可以指定;
  • f :表示提取哪一列

如以下命令:
在这里插入图片描述

3.2 字符截取

2 printf命令
在这里插入图片描述
在这里插入图片描述

3 awk命令

难点!!!

4 sed命令

3.2 字符处理命令

1 使用关键词sort [选项] 文件名

选项如下:

  • f : 忽略大小写
  • n : 以数值型数据进行排序,默认使用字符串类型排序
  • r : 反向排序,即逆序
  • t : 指定分割符,默认分隔符是制表符
  • k n[ ,m]: 按照指定的字段范围进行排序。从第n字段开始,m字段结束

如:sort /etc/pass 不加选项默认按照每行字段的首字母开始排序

sort -t ":" -k 3,3 /etc/passwd 表示将passwd 文件每行按照“:”进行分割,分割规则按照按照以第三列开始并以第三列结束的***字符串***,按照分割规则进行排序

sort -n -t ":" -k 3,3 /etc/passwd 表示将passwd 文件每行按照“:”进行分割,分割规则按照按照以第三列开始并以第三列结束的 ***“数值型数据”***,按照分割规则进行排序

2 统计命令 wc

wc [选项] 文件名

选项

  • -l : 只统计行数
  • -w: 只统计单词数
  • -m: 只统计字符数
3.3 条件判断

1 按照文件类型进行判断
在这里插入图片描述

  • 两种判断格式:

test -e /root/install.log 用于判断该路径下的install.org文件是否存在,存在返回True,否则返回false
[空格-e /root/install.log空格] 作用同上 常用
常与其他命令结合使用,如下所示:
[ -f /root/student.txt ] && echo"yes" || echo "no"

2 按照文件权限进行判断
在这里插入图片描述

3 两个文件之间进行比较
在这里插入图片描述
示例:
在这里插入图片描述

4 两个数值的比较:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPtYVHZi-1577364732703)(en-resource://database/1711:1)]
示例:
在这里插入图片描述

5 字符串的比较
在这里插入图片描述

6 多重条件判断
在这里插入图片描述
示例:
在这里插入图片描述

3.4 流程控制
3.4.1 if-语句格式

1 单分支if 语句

if [ 条件判断式 ]:then
    程序
if
 # 或者
if [ 条件判断式 ]
    then
        程序
fi

注意:if 中的test语句,在中括号里面的条件判断式两端一定要有空格,此外注意如下:
在这里插入图片描述
示例:
建立一个脚本sda_use_rate.sh,判断其磁盘是否快用满!

#!/bin/bash
rate=$(df -h | grep /dev/sda1 | awk '{print $5}' | cut -d "%" -f1)
if [ $rate -ge 80 ]
    then
        echo "/dev/sda1 if full "
 fi

2 双分支if语句

if [ 条件判断句 ]
then
pass
else
pass
fi

示例2:备份mysql数据库

#!/bin/bash

ntpdate asia.pool.ntp.org &> /dev/null

#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量date

size=$(du -sh /var/lib/mysql)
#tongjia mysql数据库的大小,并把大小复制size变量

在这里插入图片描述
示例3:
在这里插入图片描述

4 用户和用户组管理
4.1用户配置信息

4.1.1 /etc/passwd 文件

改文件每一行代表一个用户,每一行有7个字段

  • 第一个字段:用户名称 #useradd 用户名命令添加用户
  • 第二字段:密码标志 #passwd 用户名命令设置用户密码
  • 字段3:UIP(用户ID)
    • 0:超级用户
    • 1-499:系统用户(伪用户)
    • 500-65535:普通用户
  • 字段4:GID(用户初始组ID)
    • 初始组:指用户一登录就立即拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组(一般不建议修改初始组)
    • 附加组:指用户可以加入多个其他的用户组,并拥有这些则的权限,附加组可以有多个
  • 字段5:用户说明
  • 字段6:家目录
    • 普通用户:/home/用户名/
    • 超级用户:/root/
  • 字段7:用户登录之后的shell类型

4.1.2 用户配置文件–影子文件/etc/shadow

每一行表示一个用户的信息,每行九段

  • 字段一:用户名
  • 字段二:加密密码
    • 加密算法为SHA512散列加密算法
    • 如果密码位是“!!”或“*”代表没有密码,不能登录
  • 字段三:最后一次修改时间

4.1.3 组信息文件
在这里插入图片描述
在这里插入图片描述

4.2用户配置信息

1、用户的家目录
在这里插入图片描述

4.3 用户管理命令

4.3.1 用户添加命令

  • useradd [选项] 用户名
    –u UID : 手工指定用户的UID号,UID号为0的用户一定是超级用户
    –d 家目录:
    • -c 用户说明:
    • -g 用户初始组组名:
    • -G 附加组组名:指定用户的附加组
    • -shell: 手工指定用户的登录shell。默认是/bin/bash

举例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值