第一章

本章pdf版本:

链接:https://pan.baidu.com/s/1fRs4GXlmWkJYXCDiKPqy8A?pwd=hjd9
提取码:hjd9

OK了,可以打印了,更新时间:2024-1-2,20:30

Inode

软连接的连接数是1,硬连接的连接数是>=2

文件的访问权限指的是: 用户对该文件的内容的访问权限

LINUX 系统的特点

EXT3文件系统有哪几部分组成,都是什么

LINUX文件,如果文件的BLOCK 格式化为4K字节空间,系统中单个文件最大存储容量多少。

如果是4K,最大容量是64GB,把上面的1KB换成4KB

LINUX 系统的连接文件都有哪些,什么特点。

硬链接符号连接(软连接)

  1. 第一:文件类型:软链接 前面是 l 开头的(link),而硬链接是 - 开头,表示文件
  2. 第二:软链接所有者和所属组具有全部操作的权限,rwxrwxrwx;而硬链接不是。也就是软链接的前面都是 lrwxrwxrwx
  3. 第三:软链接类似与 windows 的快捷方式,有一个明显的箭头指向,而指向的是源文件
  4. 第四:硬链接文件除了文件名与源文件不一样,其余所有信息都是一样的。 类似于 cp 复制操作。但是又和复制不一样,硬链接可以同步更新。
  5. 第五:通过 ls -i 操作,来查看 文件的 i 节点。发现硬链接和源文件的 i 节点是相同的,而软链接与源文件的 i 节点是不同的
  6. 第六:不允许将硬链接指向目录;不允许跨分区创建硬链接

LINUX 系统文件的IDE硬盘分区和命名规则是什么。

VI 编辑器有几种模式,他们之间如何切换

vim 主要有三种工作模式,分别是命令模式、插入模式和编辑模式。

输入 vi 文件名 我们可以进入命令模式,输入字符 i或者a或者o,我们可以进入插入模式,进入插入模式之后我们可以进行文件的内容修改,修改完成之后,可以输入 :wq 可以保存退出。

一个文件的用户权限都有哪些?访问权限都有哪些。

用户权限有:查看权限,修改权限。

LINUX 系统的用户有基类,他们之间有哪些区别?

在Linux系统中,用户可以分为两类:基本用户和系统用户。它们之间有以下区别:

  1. 基本用户:

- 普通用户:这是一般系统用户,用于日常操作和任务。普通用户通常由系统管理员创建,并且具有受限的访问权限。他们无法对系统进行全局配置或更改,只能访问自己的主目录和一些其他允许的文件和目录。

- 超级用户(root):这是Linux系统的最高权限用户,也被称为超级管理员。超级用户具有对系统的完全控制权,并可以执行任何操作,包括对系统文件进行修改、安装软件等。超级用户需要谨慎使用,因为误操作可能导致系统崩溃或安全漏洞。

  1. 系统用户:

- 系统用户是用于运行系统服务和进程的特殊用户账号。这些用户通常不用于登录系统,也没有对应的密码。系统用户在系统启动时被创建,并由相应的系统服务使用。它们有自己的用户ID(UID)和用户组ID(GID),用于区分其他用户。

总结来说,基本用户是具有登录权限并用于日常操作的用户,而系统用户是用于运行系统服务和进程的特殊用户账号。超级用户(root)是唯一具有完全控制系统的用户。

显示文件内容有哪些指令,编辑文件有哪些指令,如何使用。

显示文件内容的命令:

  1. cat: 用于连接文件并显示它们的内容。

    cat filename
  2. more: 逐页显示文件内容。

    more filename

    使用空格键逐页翻页,按 q 键退出。

  3. less: 逐页显示文件内容,并提供更多交互性。

    less filename

    使用空格键逐页翻页,按 q 键退出。还可以使用 / 进行搜索。

  4. head: 显示文件的前几行。

    head filename
  5. tail: 显示文件的末尾几行。

    tail filename

    使用 -n 选项指定显示的行数,例如 tail -n 10 filename 显示末尾的最后10行。

编辑文件的命令:

  1. nano: 文本编辑器,易于使用。

    nano filename

    使用箭头键移动光标,进行编辑。按 Ctrl + X 保存并退出。

  2. vi(或 vim): 强大的文本编辑器。

    vi filename
    • 进入编辑模式:按 i 键。
    • 退出编辑模式:按 Esc 键。
    • 保存并退出:在非编辑模式下,输入 :wq
    • 放弃修改并退出:在非编辑模式下,输入 :q!

对于一个目录文件,他的读、写、执行权限(有无该权限),都对应该目录的哪些操作。

第二章

对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。

变量的声明规则

  1. 正确声明变量
  2. 变量不能以数字开头
  3. 变量声明等号两边不能有空格
  4. 变量的值如果有空格,必须用单引号或双引号括起来

什么是Shell脚本?

Shell脚本是指使用用户环境Shell提供的语法所编写的脚本

文件判断

case 与 grep

此实例检查命令行的第一个参数是否为“-i”或“-e”,如果是“-i”,则计算由第二个参数指定的文件中以i开头的行数;如果是“-e”,则计算由第二个参数指定的文件中以e开头的行数。如果第一个参数既不是“-i”也不是“-e”,则在屏幕上显示一条错误的信息。

shift

在函数中,$1是指传入函数的第1个参数,$2是指传入函数的第2个参数。同时也可以使用shift命令来移动函数参数。

什么是脚本程序(SHELL),什么是系统变量、举出至少5个系统变量。

脚本程序(Shell)是一种命令语言解释器,系统变量提供关于系统环境的信息,例如:HOME、PATH、USER、SHELL、LOGNAME。

脚本程序中,哪些语句能够控制分支循环,哪些语句控制循环流程。

压缩与解压缩指令都有哪些?

find 指令、grep 指令有什么区别。

  • 作用范围:

    • find 主要用于搜索文件,可以按照文件的各种属性进行搜索。
    • grep 主要用于在文本文件中搜索内容,根据模式匹配来筛选行。
  • 搜索目标:

    • find 搜索的是文件和目录。
    • grep 搜索的是文件中的文本内容。
  • 搜索条件:

    • find 使用条件表达式,可以包含文件名、大小、类型等多种条件。
    • grep 使用正则表达式,搜索文本中的模式。
  • 输出结果:

    • find 输出文件和目录的路径。
    • grep 输出包含匹配文本的行。

正 则 表 达 式

脚本程序中哪些操作符可以对局部变量进行数学运算

脚本程序中可以使用以下操作符对局部变量进行数学运算:

  1. 加法操作符(+):用于执行加法运算,将两个值相加。
  2. 减法操作符(-):用于执行减法运算,将一个值减去另一个值。
  3. 乘法操作符(*):用于执行乘法运算,将两个值相乘。
  4. 除法操作符(/):用于执行除法运算,将一个值除以另一个值。
  5. 取模操作符(%):用于执行取模运算,求得两个值相除的余数。
  6. 自增操作符(++):用于将变量的值增加1。
  7. 自减操作符(–):用于将变量的值减少1。

这些操作符可以用于对局部变量进行数学运算操作,根据需要进行加减乘除、取余、自增或自减等操作,从而实现对变量的值进行修改和计算。

代码题

输出内容

for file in *.sh
do
echo "-----------------------------------"
echo $file
echo "------------------------------------"
cat $file
done
# end
  • 作用: 遍历当前目录下的所有 .sh 后缀的文件,打印文件名,并输出文件的内容。
  • 说明: 这个脚本使用 for 循环,对每个 .sh 文件进行操作,打印文件名,并使用 cat 命令输出文件的内容。

求和

sum=0
for p in $*
do
sum=`expr $sum + $p`
done
echo "the total is $sum"
# end
  • 作用: 计算脚本接收的命令行参数之和。
  • 说明: 使用 for 循环,将命令行参数逐个相加,并输出总和。

找最大值

max()
{
while [ $1 ]
do
if [ $maxvalue ]
then
if [ $1 -gt $maxvalue ]
then
maxvalue=$1
fi
else
maxvalue=$1
fi
shift
done
return $maxvalue
}
max $@
echo "Max Value is: $maxvalue"
  • 作用: 找出脚本接收的参数中的最大值。
  • 说明: 定义了一个函数 max(),使用 while 循环找到参数列表中的最大值,最后输出最大值。

小写转大写

while [ "$1" ]
do
if [ "$1" = "-i" ] # 如果是选项-i
then
infile="$2" # 指定输入文件名
shift 2 # 命令行参数左移2位
elif [ "$1" = "-o" ] # 若是选项-o
then
outfile="$2" # 指定输出文件名
shift 2
else
echo "Program $0 does not recognize option $1"
fi
done
tr a-z A-Z < $infile > $outfile # 转换为大写字母
  • 作用: 根据命令行参数处理输入和输出文件,并将输入文件中的小写字母转换为大写字母。
  • 说明: 使用 while 循环处理命令行参数,根据参数 -i-o 分别指定输入和输出文件,然后使用 tr 命令将输入文件中的小写字母转换为大写字母,并将结果输出到指定的输出文件。

case语句

#!/bin/bash

# 打印带有参数的消息
echo -e " Show hello from $1... !"

# 使用 case 语句根据参数值执行不同的代码块
case $1 in
"hello" )
# 如果参数是 "hello",打印相应的问候语
echo "hello, how are you?"
;;
"" )
# 如果参数为空字符串,提示用户输入参数
echo "you must input parameters ex> {$0 someword}"
;;
* )
# 如果参数不是 "hello" 也不是空字符串,给出正确的用法提示
echo "Usage $0 {hello}"
;;
esac

文件判断

#!/bin/bash

# 提示用户输入文件名
echo -e "input filename please"

# 通过 read 命令获取用户输入的文件名
read -p "Input a file: " filename

# 检查用户是否输入了文件名,如果没有,则提示并退出
test -z $filename && echo "Must input filename " && exit 0

# 检查文件是否存在,如果不存在,则提示并退出
test ! -e $filename && echo "the filename: $filename do not exist " && exit 0

# 判断文件类型
test -f $filename && filetype="regular file"
test -d $filename && filetype="Directory"

# 判断文件权限
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"

# 打印文件类型和权限信息
echo "the file : $filename is a $filetype "
echo "And the permission are : $perm"

网络端口号

#!/bin/bash

# 打印检测服务的提示信息
echo -e " Now I will detect your Linux server's services !"
echo -e " the www ,ftp , ssh and mail will be detected !"

# 检测端口是否处于监听状态,并将结果存储到 testing 变量中
testing=$(netstat -tuln | grep ":80 ")
# 输出调试信息
#echo "testing is :$testing"

# 检测 WWW 服务是否运行,并输出相应信息
if [ "$testing" != "" ]; then
echo "WWW is running on your system."
fi

# 重复上述过程,检测 SSH、FTP、MAIL 和 UDP 服务是否运行
testing=$(netstat -tuln | grep ":22 ")
#echo "testing is :$testing"
if [ "$testing" != "" ]; then
echo "SSH is running on your system."
fi

testing=$(netstat -tuln | grep ":21 ")
#echo "testing is :$testing"
if [ "$testing" != "" ]; then
echo "FTP is running on your system."
fi

testing=$(netstat -tuln | grep ":25 ")
#echo "testing is :$testing"
if [ "$testing" != "" ]; then
echo "MAIL is running on your system."
fi

testing=$(netstat -tuln | grep ":5353 ")
#echo "testing is :$testing"
if [ "$testing" != "" ]; then
echo "UDP protocol is supported on your system."
fi

  1. 脚本目的:

    • 该脚本的目的是检测 Linux 服务器上是否运行了常见的网络服务,包括 WWW(Web)、FTP、SSH、邮件(MAIL)和 UDP 协议。
  2. 提示信息:

    echo -e " Now I will detect your Linux server's services !"
    echo -e " the www ,ftp , ssh and mail will be detected !"
    • 这里使用 echo 打印了提示信息,通知用户接下来将要检测哪些服务。
  3. 服务检测:

    testing=$(netstat -tuln | grep ":80 ")
    # 输出调试信息
    #echo "testing is :$testing"
    if [ "$testing" != "" ]; then
    echo "WWW is running on your system."
    fi
    • 使用 netstat -tuln 列出所有正在监听的端口,并通过 grep ":80 " 检测端口 80 是否在监听。
    • 将检测结果存储在变量 testing 中,然后使用 if 判断端口 80 是否在监听,如果是,则输出 “WWW is running on your system.”。
  4. 服务重复检测:

    testing=$(netstat -tuln | grep ":22 ")
    #echo "testing is :$testing"
    if [ "$testing" != "" ]; then
    echo "SSH is running on your system."
    fi
    • 通过类似的方式检测 SSH(端口 22)、FTP(端口 21)、邮件(端口 25)和 UDP 协议(端口 5353)是否在监听,并输出相应的运行信息。

$(netstat -tuln | grep ":80 ") 这个命令用于检测端口 80 是否在监听状态。让我们来分解这个命令的各个部分:

  1. netstat -tuln: 这部分命令用于显示网络统计信息。具体选项的含义如下:

    • -t: 仅显示 TCP 协议相关的信息。
    • -u: 仅显示 UDP 协议相关的信息。
    • -l: 仅显示监听状态的端口。
    • -n: 使用数字形式显示端口号,而不是尝试解析为服务名。

    所以,netstat -tuln 将显示正在监听的 TCP 和 UDP 端口的数字形式。

  2. | grep ":80 ": 这部分命令用于在上一个命令的输出中过滤出包含 “:80 “ 的行,即查找端口号为 80 的行。

  3. $(...): 这是一个命令替换结构,它将 $(netstat -tuln | grep ":80 ") 的输出结果嵌入到外部命令中。

因此,整个命令的作用是检测是否有端口 80 在监听状态。如果有输出(即端口 80 在监听),那么这个命令的结果将是非空字符串,反之则为空字符串。在脚本中,这个结果被存储在变量 testing 中,并在后续的条件判断中用于确定是否输出相应的服务运行信息。

2*(3+4)

输出n^2

#!/bin/bash
#This is example 1 about while.
int=1 # int赋初值
while [ $int -le 5 ] # 当int<=5时,执行循环
do
sq=`expr $int \* $int` # 计算int的平方
echo $sq
int=`expr $int + 1` # int加1
done
echo "finished"
# end