Bootstrap

【Linux】期末复习

1. 认识Linux系统

  1. Linux特点
  1. 完全免费
  2. 开发性
  3. 多用户、多任务
  4. 丰富的网络功能
  5. 可靠安全、性能稳定
  6. 支持多种平台

2.Linux系统的组成

  1. 内核
  2. Shell
  3. 应用程序
  4. 文件系统

3.Linux版本

Linux版本由形如x1.x2.x3三组数字组成

  1. x1:主版本号,表示内核级别,越大级别越高,目前最高版本为5
  2. x2:次版本号,分为测试版与稳定版,奇数为测试版,偶数为稳定版。
  3. x3:修正序号,此数越大,通常会表示该内核功能更强或以前中的缺陷得到修正

4.Linux应用软件安装

查看软件是否安装成功

rpm -qa|grep 软件名称

有信息输出代表安装成功

无信息输出代表安装中

5.Shell提示符号

  • #:代表超级用户(管理员)
  • $:代表普通用户

2. Shell命令

1.Linux系统的目录结构

  • /home:Linux系统各用户的主目录
  • /root:root用户的主目录
  • /bin:二进制目录,存放很多用户级的GUN
  • /sbin:系统二进制目录,存在很多GUN管理员级工具
  • /dev:设备目录,Linux在这里创建设备节点
  • /lib:库目录,存放系统和应用程序的库文件
  • /tmp:临时目录,可以在该目录中创建和删除临时工作文件
  • /mnt:挂载目录,另一个可移动载体媒体设备的常用挂载点
  • /boot:启动目录,存放启动文件
  • /media:媒体目录,可移媒体设备的常用挂载点
  • /etc:系统配置文件目录
  • /proc:进程目录,存放现有硬件及当前进程相关信息
  • /usr:用户二进制目录,大量用户级的GUN工具和数据文件存储在这里
  • /var:可变目录,用以存放经常变化的文件,比如日志文件

2.目录操作

pwd

显示当前工作目录的绝对路径

3.mkdir 创建目录

mkdir [选项] [目录]
选项说明
-p若路径中的目录不存在,先创建目录
-v每次创建目录都显示信息

4.cd更改工作目录路径 大题会用到

cd [目录]
特殊符号含义
.代表当前目录
代表当前目录位置的上一层目录
~代表家目录,即login时所在目录

5.ls列出目录和文件信息

ls [选项] [目录][文件]
选项说明
-l以详细信息的形式展示出当前目录的文件
-a显示当前目录中的全部文件(包括隐藏文件)
-d查看目录属性
-t按照创建时间顺序列出文件
-F显示文件类型
-i用于显示文件的inode号,inode号是文件在文件系统中的唯一标识,可以用来查看文件的硬链接数,以及查看文件是否被删除。

使用-l属性会输出如下的文件属性

image-20221207111200427

  • 第一个字符:代表文件类型,d代表目录,-代表文件,l代表链接文件,b表示为设备中可提供存储的接口设备,c表示为设备文件中的串行端口设备
  • r表示可读,w表示可写,x表示可执行

6.rmdir删除空目录

rmdir [选项] [目录]
选项说明
-p删除递归目录,当子目录删除后其父目录为空时,也一同删除
-v输出处理的目录详情

7.touch 创建空文件 更改文件时间

touch [选项] 文件
选项说明
-a只更改访问时间
-m更改文件的修改时间记录
-e假如目标文件不存在,则不会创建新的文件
-d<字符串>使用指定字符串表示时间而非当前时间
-t<日期时间>使用MMDDhhmm格式的时间非当前时间

8.cp复制文件和目录

cp [选项] [源文件|目录] [目标文件|目录]
选项说明
-f强制复制文件和目录,无论目的文件或目录是否已经存在
-r递归复制目录下的子目录和文件
-i若目标文件存在,则提示用户如何操作

9.mv文件和目录改名、移动文件和目录路径

mv [选项] [源文件|目录] [目标文件|目录]
选项说明
-f移动时自动替换已经存在的目标文件,不提示
-i若目标文件存在,则提示用户如何操作

10.rm删除文件或目录

rm [选项] [文件|目录]
选项说明
-f强制删除文件,不给出提示信息
-r递归删除目录及其子目录和文件
-i删除前需要确认

11.find用于查找文件或目录

find [查找范围] [选项] [查找条件]
选项说明
-name<文件名>匹配文件的名称
-user<用户名>匹配文件的所有者
-perm<权限>匹配文件的权限
-type<文件类型>匹配文件类型查找
-size n< ckMG >匹配文件的大小(+50k查找超过50k的文件,而-50k则表示查找小于50k的文件)
–exec {} \ ;后面可接对搜索到结果进一步处理的命令

例如,搜索/etc中所有以host开头的文件

find /etc -name "host*" -type f
-type[选项]
	f:普通文件
	d:目录文件
	l:连接文件
	b:块设备文件
	c:字符设备文件
	p:管道文件
	s:套接字文件

12.查找文件或目录 which/whereis

which

主要用于搜索二进制文件、可执行文件或者Shell命令行的位置

whereis

主要用来搜索二进制文件的位置、源代码的位置和man帮助文件位置

13.cat显示文本文件、连接文本内容

cat [选项] [文件]
选项说明
-n对输出的所有行编号
-b对非空输出行编号

14.more分页显示文本文件

more [选项] [文件]
选项说明
+n从第n行开始显示文件内容,n代表数字
-n一次显示的行数,n表示数字

Ctrl + f是向下显示一屏

Ctrl + b是向上滚动一屏

Enter键向下滚动一行

q是退出more命令

15.head显示指定文件的前若干行

head -n 行数值 [文件]

默认缺省显示文件的前10行

比如head -5 /etc/passwd 表示显示/etc/passwd文件的前5行

16.tail查看文件末尾数据

tail -n 行数值[文件]

默认缺省显示文件后10行内容

例如,tail -5 /etc/passwd 表示显示/etc/passwd文件的后5行

17.grep 在文件中搜索与字符串匹配的行输出

grep [选项] 查找条件 源文件
选项说明
-i查找时忽略大小写
-v反转查找,输出与查找条件不相符的行

查找字符串以双引号括起来,“^……”表示以……开头,“……KaTeX parse error: Expected group after '^' at position 11: ”表示以……结尾,“^̲”表示空行

18.tar文件打包、压缩

tar [参数] 打包文件名 文件
选项说明
-c产生.tar打包文件
-v列出打包/解包的详细过程
-f指定打包文件的名称
-z以.gz的格式压缩或解压打包文件
-j以.bz2的格式压缩或解压打包文件
-x以打包文件中还原文件
-C解压到指定目录
-r将文件追加到打包文档末尾

打包:

  1. tar -czvf [存放路径]打包文件名.tar.gz 源文件或目录
  2. tar -cjvf [存放路径]打包文件名.tar.bz2 源文件或目录
  3. tar cJvf [存放路径]打包文件名.tar.xz 源文件或目录

解压

  1. tar -xzvf [存放路径]打包文件名.tar.gz [-C 解压目录]
  2. tar -xjvf [存放路径]打包文件名.tar.bz2 [-C 解压目录]
  3. tar -xJvf [存放路径]打包文件名.tar.xz [-C 解压目录]

19.输入重定向

命令<文件名

20.输出重定向

类型操作符用途
重定向标准输出>将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上
>>将命令执行的结果追加输出到指定文件中
重定向标准错误2>清空指定文件的内容,并将标准错误信息保存在该文件中
2>>将标准错误信息追加输出到指定文件中
重定向标准输出和标准错误&>将标准输出、标准错误的内容全部保存在指定文件中而不是直接显示在屏幕中

find /etc -name “passwd” 2>>error

21.管理用户及组

添加用户

useradd [选项] 用户名
选项说明
-u指定用户ID
-G指定用户的附属组(补充组)
-s指定用户登入所使用的Shell
-d设置登录时使用的主目录
-M不创建用户组

注意,不指定用户ID的时候由系统自主生成

创建一个不可登录无用户主目录的用户

useradd -M -s /bin/nologin user

统计系统可登录用户数量有几个

grep "bash$" /etc/passwd | wc -l

给用户设置密码

passwd [选项]用户名

删除用户

userdel [选项]用户名
选项说明
-r同时删除用户及子目录

22.chmod设置基本权限

有两种方法,一种是字符法,一种是数字法

字符法

chmod [ugoa] [+-=] [rwx] [文件或目录]

u、g、o、a分别表示属主、属组、其他用户、所有用户

+、-、=分别表示增加权限、去除权限、设置权限

chmod o+w my.txt
my.txt文件的其他人增加读权限

数字法

权限项执行执行执行
字符表示rwxrwxrwx
数字表示421421421
权限分配文件所有者文件所属组其他用户

例如数字777表示 111 111 111,也即是rwxrwxrwx

数字664表示110 110 100,也就是rw-rw-r–

23.ps指令

ps [选项]
选项说明
-a显示当前终端上的所有进程,包括其他用户的进程信息
-e显示系统中所有进程,包括其他用户进程和系统进程信息
-l以长格式显示进程信息
-u显示面向用户的格式(包括用户名、CPU及内存使用清空等信息)
-x显示后台进程的信息
-f显示进程的所有信息

显示所有进程

ps -ef

查找某一个进程

ps -ef|grep 进程名

24.周期性计划任务

编辑计划任务

crontab -e [-u  用户名]

查看计划任务

crontab -l [-u  用户名]

删除计划任务

crontab -r [-u  用户名](root用户可以管理指定用户的计划任务,普通用户只能管理自己的计划任务)
字段说明
分钟取值0-59任意整数
小时取值0-23任意整数
日期取值1-31任意整数
月份取值1-12任意整数
星期取值0-7任意整数
命令要执行的命令或程序脚本
  • *:表示该范围内的任意时间
  • ,:表示间隔的多个不连续时间点
  • -:表示一个连续的时间范围
  • /:指定间隔的时间范围

image-20221207145946458


3. VI编辑器的使用

1.VI编辑器的三种操作模式

image-20221207150330587


4. Shell脚本编程

1.Shell中常用符号

  1. 注释符#
  2. 美元符$:变量符,与反斜杠转义符相反,使其后面的普通字符作为变量名
  3. 单引号:被单引号引起的字符全部做普通字符,即全部原样
  4. 倒引号:倒引号内的字符串做为Shell命令行解释执行,得到的结果取代整个倒引号括起来的部分
  5. 双引号:被双引号引起来的内容,除了$、转义符\、倒引号保留特殊作用,其他均做普通字符
  6. 反斜线:转移字符,将特殊字符变成普通字符

2.Shell预定义变量(五分)

用户不可修改

  1. $#:传送给Shell程序的位置参数的数量
  2. $?:最后命令得的完成码或者在Shell程序内部执行的Shell程序(返回值)
  3. $0:Shell程序的名称
  4. $*:调用Shell程序时所传诵的全部参数的单字符串,“参数1”“参数2”……形式保存参数
  5. $@:“参数1”“参数2”……形式保存的参数
  6. $n:第n个参数
  7. $$:本程序的PID
  8. $!:上一个命令的PID

3.用户变量(赋值)

变量名=

取值取空格,必须用引号(单引号或双引号)括起来

取值

echo $变量

4.|| 和 | 和 \ 的区别

  1. || : 表示上一条命令执行失败后,才执行下一条命令,echo 'step1‘ || echo ‘step2’
  2. | :表示管道,上一条命令的输出,作为下一条命令参数
  3. \:转义字符

5.算术扩展运算符

  • $((x + y)):加法运算
  • $((x - y)):减法运算
  • $((x / y)):除法运算,结果仅保留整数位
  • $((x * y)):乘法运算
  • $((x % y)):自加运算
  • $((x --)):自减运算
  • $((x ** y)):幂运算,x的y次方

5. 实验部分

  1. 新建Shell脚本文件test1,在“/home/user/自定义”目录下新建数个文件名的后缀为“*.txt“的文件,编辑如下脚本程序。
#!/bin/bash
path="/root/linux"
cd $path
for file in  *.txt
do
       leftname=`basename $file .txt`
           mv /root/linux/$file /root/linux/$leftname.doc
 done

将目录下的全部*.txt文件修改成.doc,也就是修改文件后缀

  1. 上面的test2脚本改良
#!/bin/bash
cd $1
for file in $(ls  *.txt)
do
       leftname=`basename $file .txt`
	   mv $1/$file $1/$leftname.doc
 done

image-20221207161941334

其中$1 是执行该shell脚本后面接的参数,也就是home/user/test

  1. 该脚本功能是什么
#!/bin/bash   
function rand(){ 
    min=$1
    max=$(($2-$min+1)) 
    num=$(($RANDOM+10000000000)) #增加一个10位的数再求余 
    echo $(($num%$max+$min)) 
} 
rnd=$(rand 400000 500000) 
echo $rnd 

这里面顶一个方法rand,rand方法需要接收两个参数,第一个参数赋值给min变量,使用第二个参数减第一个参数再加1将这结果赋值给max。接着顶一个num**,$RANDOM是Linux的内置函数,用于生成0到32767之间的任一随机数**,用来生成随机数。该函数的返回值就是一个生成400000~500000的随机数

  1. 自己设计一脚本程序test4,要求该程序的运行能判断LINUX计算机上是否在运行sshd进程,如果该进程正在运行,则显示“running”,如果不在运行则显示“not running”.
#!/bin/bash
ps_out=`ps -ef | grep $1 | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep "$1")
if  [ "$result" != "" ];then
echo "Running"
else
    echo "Not Running"
fi
  1. 编写一个shell脚本程序test5,它能根据输入的命令行参数采取不同的动作:如果是目录,则列出该目录中的文件;如果是可执行的文件,则用shell执行之;如果是可读的文件,则cat显示其内容;如果不是以上三种类型,则显示“异常对象”。
#!/bin/bash
echo file
read file #输入
if [ -d $file ]
then
   echo "ls:"
   ls $file/
elif [ -x $file ]
then
   echo "result:"
   ./$file
elif [ -f $file ]
then
   echo "contoxt:"
   cat $file
else
   echo "abnormal"
fi
  1. 统计LINUX系统中可以正常登录的用户数量,在LINUX系统上写出命令。
cat /etc/passwd|grep /bin/bash|wc –l

  1. 自己设计一脚本程序test2,要求该脚本能删除指定目录下文件大小为0的文件
#!/bin/bash
for file in `ls $1`
do
	if [ -f $1"/"&file ]
	then
		if [ -s $1"/"$file ]
		then
			echo "$file is docution but > 0"
		else
			rm $1"/"$file
		fi
	else
		echo "$file is no docution and > 0"
	fi
done
  1. 设计脚本test3,对命令行参数求平均值
#!/bin/bash
[ $# -ne 1 ] && exit  #判断参数个数
[ "$1" -le 0 ] && exit  #判断参数合法性
sum=0
for (( i=1;i<=$1;i=i+1 ))
do
read -p "Input number #$i: " num[$i]
sum=$((sum+num[$i]))
done
average=$((sum/$1))
echo "sum: $sum"
echo "average: $average"
  1. 写出在当前目录下创建下面文件树的命令序列。

image-20221207173724092

mkdir 1
cd 1
mkdir 11 12
cd 11
touch 111 112
cd ..
cd 12
touch 121 122
  1. Apache服务器基本配置

首先检查httpd软件包是否有安装

rpm  -qa |grep httpd	

启动httpd服务

systemctl start httpd.service

设置httpd服务为自启动

chkconfig  httpd  on	

编辑Apache主配置文件/etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd"		:这是Apache的工作目录,不需修改
KeepAlive On				:修改为On,使得一次TCP连接可以传输多个文件
Listen 自己机器IP地址:8080	:修改HTTP服务监听IP地址和端口号
Include conf.d/*.conf		:/etc/httpd/conf.d/*.conf都是Apache的附加配置文件,不需修改
ServerAdmin root@localhost	:管理员邮箱,可修改为自己的邮箱
ServerName www.example.com:80		:设置服务器名称,如果没有配置DNS解析,可设									:置为IP地址和端口号的组合。把这一行修改为
								:ServerName 自己机器的IP地址:80
DocumentRoot "/var/www/html"		:这是网站文档主目录,建议保留

设置主页文件内容

#vi  /var/www/html/index.html			:添加主页文件,随意输入内容

重启Apache服务器

systemctl restart httpd.service

在操作系统中利用浏览器访问http://自己机器IP地址,测试能否显示主页文件index.html。

;