#### MatReview练习 #####

https://github.com/green-fox-academy/safely-syllabus/tree/master/materialreview/scripts/bash

1) 处理器编号和类型

#!/bin/bash

函数ProcCount()
{
        Pcnt=`cat /proc/cpuinfo | grep -o processor | wc -l`。
        echo $Pcnt
}

函数 CPUtype()
{
        cputp=`cat /proc/cpuinfo | grep "model name" -m 1 | cut -d ' :' -f 2 `。
        echo $cputp
}

echo $(CPUtype) x $(ProcCount)

2) 日期删除,格式化

#!/bin/bash

#22.11.07

日期+%y.%m.%d.

3) 盘子的数量

#!/bin/bash

lsblk | awk '{print $6}' |grep -o disk | wc -l

4) 递归的因果关系

#!/bin/bash
功能 Fact()
{
        n=$1
    如果[[ $n -eq 0 ]]; 那么
        echo 1
    否则
        echo $((n*$(Fact $n-1))
    en
}
事实5

5) 文件存在e (简单)

#!/bin/bash

文件名=$1

如果[[ -r $FileName ]]
那么
        echo TRUE
否则
        echo FALSE
en

6) 文件存在e (更多)

#!/bin/bash

文件名=$1


#if (($# > 0))
如果[[$FileName == "" ]]
那么
        echo 没有atadott参数
否则
如果[[ -e $FileName ]]
那么
        如果[[ -d $FileName ]]
        那么
                echo $FileName是一个konyvtar。
        否则
                echo $FileName是一个fajl。
        en
否则
        echo 没有这样的文件或konyvtar!
fi

fi

7) 压缩BC

#!/bin/bash

sam1=$1
sam2=$2

结果=$((sam1*sam2))
result2=`echo "$szam1 * $szam2" |bc`.
echo $result
echo $result2

8) 总磁盘空间

#!/usr/bin/bash

TDS=`df | grep -v Filesystem |awk '{sum+=$2} END {print sum}'`。
# ======================================================================
TotalFreeSpace=0
FreeSpaceList=`df | awk '{print $2}'`。
for i in $FreeSpaceList
  做
    如果[[! $i == "1K-blocks"]] ,则
      那么
        ((TotalFreeSpace+=$i))
      en
  完成
TDS2=$TTotalFreeSpace

echo $TDS
echo $TDS2

#### 3.准备考试的巴什 ####

特点
1) get_kernel_version
创建一个名为get_kernel_version的函数,检索Linux内核的版本

提示:通过正确的培训可以解决的任务

例如:5.4.72-generic

函数 get_kernel_version()
{
	echo `uname -r`.
}

2) get_free_space

创建一个名为get_free_space的函数,它将检索每个文件系统的饱和度,并以人类可读的方式检索哪些文件系统点有挂载点。

文件系统大小 已用可用% 挂载在
Overlay 251G 11G 228G 5% /
tmpfs 64M 0 64M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sdd 251G 11G 228G 5% /etc/hosts
临时文件 3.1G 0 3.1G 0% /proc/acpi
临时文件 3.1G 0 3.1G 0% /sys/firmware

提示:只要有正确的指示就能解决的任务

函数 get_free_space()
{
	df -h
}

3) get_total_mem

创建一个名为get_total_mem的函数,它将检索系统中的内存总量。

MemTotal: 6401776 kB
提示:你可以使用grep命令过滤输出行,例如

函数 get_total_mem()
{
	cat /proc/meminfo | grep MemTotal

}

4) compare_line_count
创建一个名为compare_line_count的函数,将两个文件的名称作为参数,并打印出行数较多的文件的名称。

函数compare_line_count()
{
	file1=$1
	file2=$2
	result1=`cat $file1 | wc -l`。
	result2=`cat $file2 | wc -l`。
	如果(($result1>$result2))
	那么
		echo $file1
	否则
		echo $file2
	en
}

#### 3.考试bash部分 ####TP4TTP4T

特点
1) get_kernel_version
创建一个名为get_kernel_version的函数,检索Linux内核的版本

#!/bin/bash

函数 get_hostname()
{
 主机名
}

2) get_total_mem
创建一个名为get_total_mem的函数,将打印出系统中的内存总量。

函数 get_total_mem()
{
	cat /proc/meminfo | grep MemTotal

}

3) 第一_20_个字符
创建一个名为first_20_characters的函数,以一个现有文件的路径为参数,读取并打印前20个字符。
文件的存在不需要被检查。

函数first_20_characters()
{
	文件=$1

	结果=`head -c 20 $file`。
	echo $result
}

##### LINUX bash项目任务 ####

2) 创建一个简单的 "Hello World!"脚本!

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 002.sh

echo Hello World!

3) 创建一个脚本,以默认格式打印20天前的日期。

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 002.sh

date=`date -d "-20 days"`。

echo 1TP3Date

4) 写一个脚本,告诉你参数中指定的文件是否存在,并且是可写的。
如果是的话,请写上 "该物种已被注册并可被注册"。"如果不是,脚本不会返回一个值

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 003.sh

文件=$1

如果[[ -w $file ]]
那么
 echo 这个文件已经下载,可以写入
en

5) 写一个脚本来确定参数中的两个字符串是否相同。如果
是的,写出:"它们现在是相同的"。否则,该脚本不应返回一个值。

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 005.sh

str1=$1
str2=$2

如果[[ $str1 == $str2 ]]
那么
 echo 它们现在是相同的
fi

6) 写一个脚本,告诉你参数中的两个数字哪个是
较大的(第一或第二),并把它写出来!按照以下格式。
"现在这个数字大于12".如果2个数字相等,脚本不会返回一个值。

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 006.sh

number1=$1
number2=$2

如果[[ $number1 > $number2 ]]
那么
 echo 现在这个数字更大:$number1
否则
 echo 现在这个数字大于: $number2
en

7) 写一个脚本,用参数中的第一个数字减去第二个数字。并打印The
结果。例如,"88"。

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 007.sh

number1=$1
number2=$2

eredmeny=`echo $number2-$number1 | bc`。
echo $eredmeny

8) 编写一个脚本,打印出参数中指定的文件中哪些包含一个以上的
字符!格式为 "现在/tmp/myfile.txt中出现了更多的字符"。如果它们在
脚本不应该返回一个值。

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 004.sh

file1=$1
file2=$2

filechars1=`cat $file1|wc -m`。
filechars2=`cat $file2|wc -m`。

如果(($filechars1>$filechars2))
那么
 echo 现在$file1有更多的字符
否则
 echo 现在$file2有更多的字符
en

9) 写一个脚本,将参数中的数字相加。并打印结果。例如
"88"

#!/bin/bash
1TP4这是在运行时需要的:
#chmod a+x 007.sh
for number in $@;do echo $number;done | awk ' {sum+=$1} END {print sum}'

10) 写一个有两个参数的脚本,一个是文件名,另一个是一个字符模式。
计算该文件包含多少个这样的字符模式,并按以下格式写出来。
"产生的文件包含11行的字符模式。", 如果没有一个字符模式出现在
文件,用以下格式的字符模式把它写出来:'镜像钻井机从来没有一次
包括"

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 007.sh

文件=$1
string=$2

结果=`cat $1 | grep -o $2 | wc -l`。
#result=`cat $1 | grep -o $2 -c`。

如果(( $result==0 ))
那么
 echo $2没有被列入一次
否则
 echo 结果是一棵树,在第$result行中包含字符串$result。
en

11) 写一个脚本,根据第一个参数打招呼,如果第二个参数是
一个尚不存在的文件,它将包括问候语!

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 011.sh
greeting=$1
文件=$2

echo $greeting

如果 [ ! -f "$file" ]
则
        echo $greeting > $file
en

12) 创建一个脚本,包括一个打印Linux内核的bash函数。
并将其命名为 "get_kernel_OS"!

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 012.sh

函数 get_kernel_OS()
{
 uname -r
}
get_kernel_OS

13) 创建一个脚本,其中包括一个bash函数,打印出Linux
内核版本创建(编译)的时间,其名称应该是'get_kernel'!

#!/bin/bash
1TP4这是在运行时需要的:
#chmod a+x 012.sh
函数 get_kernel()
{
 uname -v | cut -d ' ' -f 4,5,6,7,8,9
 # uname -v | awk '{print $4, $5, $6, $7, $8, $9}' 。
}
获取内核

14) 创建一个脚本,其中包括一个bash函数,打印出Linux
代表作为参数指定的用户运行的进程。A
函数名称应该是'get_userprocesses'!如果该用户不存在,返回如下
其值为:'未请求的使用'。如果用户存在但没有进程,用这个来返回
back: 'Process not found'.

#!/bin/bash
1TP4这是在运行时需要的:
#chmod a+x 014.sh

函数 get_userprocesses()
{
username=$1
echo 1TP3username
checkinguser=`getent passwd 1TP3username | wc -l`。
echo $checkinguser
如果(( $checkinguser>0 ))
那么
processcount=`ps auxf|awk '{print $1}'| grep $username|wc -l`。
echo $processcount
 如果(( ! $processcount==0 ))
 那么
  ps auxf | awk -v user=$username '{if($1=user){ print $0}}'
 否则
  echo 未找到进程
 en
否则
 echo 不成功的解决方案
en
}
get_userprocesses $1

15) 创建一个包括bash函数的脚本,对用户友好
打印一些Linux硬件数据(内存大小,处理器数据)的方法,该函数的名称是
应该是'get_hwinfo'!显示格式由你选择。

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 014.sh

函数 get_hwinfo()
{
cat /proc/meminfo | grep Mem
cat /proc/cpuinfo | grep bogo | uniq && cat /proc/cpuinfo | grep "model name" | uniq && cat /proc/cpuinfo | grep "cpu Mhz" | uniq && cat /proc/cpuinfo | grep "cpu cores" | uniq &&
cat /proc/cpuinfo | grep "cache size" | uniq

}
get_hwinfo

16) 创建一个脚本,在一个文件中包含你之前写的四个函数,并下载它
如果脚本运行,将运行所有四个!

#!/bin/bash
1TP4这是在运行时需要的。
#chmod a+x 014.sh



./012.sh
./013.sh
./014.sh 用户3
./015.sh

##### Linux bash(以下简称bash)知识水平评估 ######

请注意。

  • 从 LNX-01.sh 到 LNX-07.sh,包括 LNX-07.sh,主要是通过 autograder(Gradescope) 进行访问。
  • 对于任务8),9),10)的评估不是自动的。这些任务被控制并以root权限运行。
  • 你的ZIP上传只包含子目录下的文件,而不是子目录下的文件
  • 确保你上传的脚本不包含语法错误,并且不会因为授权问题而停止。
  • 请注意,这些脚本必须不间断地运行,因此它们不应要求用户互动(例如,这是否可以[y/N]:不要包括它,使用-y选项)。
  • 使用UTF-8(无BOM)字符编码和Unix行结束符
  • (仅适用于 LNX-01.sh - LNX-07.sh ) 由于评估器是在 Docker 容器中运行的,所以 systemd 无法使用,而且 bc 在容器中是不可用的
  • (仅适用于 LNX-01.sh - LNX-07.sh 任务)这些文件将由非root用户运行,请勿使用sudo
  • 练习的结果(输出)必须与示例的输出格式相同,没有不必要/遗漏的空格、字符或标点符号。

任务。

  1. 创建一个bash脚本,以4个字符的年、2个字符的月和2个字符的日的格式打印今天的日期!分隔符应该是点'.'字符(YYY.MM.DD)。
证据。 复制或保存bash脚本。
文件名称。 LNX-01.sh
#!/bin/bash

# chmod a+x Date-format.sh

日期 +%Y.%m.%d
  1. 编写一个脚本,以下列格式打印参数中指定的文件系统对象是否是一个目录,如果是的话,是否存在。如果作为参数给定的文件系统对象不存在,或者不是一个目录,脚本不返回结果。

输出示例。

指定的conyvtar被检查。
证据。 复制或保存bash脚本。
文件名称。 LNX-02.sh
#!/bin/bash

# chmod a+x Directory.sh

dir=$1

如果 [ -d $dir ]
则
 echo 找到了指定的目录。
en
  1. 编写一个脚本,以下列格式打印出参数中指定的文件是否存在,如果存在,它包括多少行。如果文件不存在,该脚本不返回结果。

输出示例。

匹配指定的物种。行数:24
证据。 复制或保存bash脚本。
文件名称。 LNX-03.sh
#!/bin/bash

# chmod a+x LineCount.sh

file=$1

如果[[-e $file]] 。
则
 echo 指定的物种被匹配。线路设置:`cat $file | wc -l`。
en
  1. 编写一个脚本,以下列格式打印出参数中的两个字符串是否相同。如果不是,该脚本不返回结果。

输出示例。

字符串是相同的
证据。 复制或保存bash脚本。
文件名称。 LNX-04.sh
#!/bin/bash

# chmod a+x StringSame.sh

str1=$1
str2=$2

如果[[$str1 == $str2]] 。
那么
 echo 字符串是相同的
en
  1. 编写一个脚本,以下列格式打印参数中两个数字(第一个或第二个)中较高的一个,并将其打印出来。如果这两个数字都不比另一个大,该脚本将不返回结果。

输出实例。

第一个数字更大:24
第二颗种子更大:12
证据。 复制或保存bash脚本。
文件名称。 LNX-05.sh
#!/bin/bash

# chmod a+x CompareNumber.sh

number1=$1
number2=$2

如果(( $number1 > $number2 ))
那么
 echo 第一个数字大于:$number1
elif (( $number1 < $number2 ))
那么
 echo 第二个数字大于:$number2
en
  1. 写一个脚本,将参数中给出的文件按以下格式打印出来,哪一个文件的字符数更多!如果两个文件包含相同数量的字符,脚本将不返回任何结果。

输出实例。

第一部有更多的人物。
第二种有更多的特征。
证据。 复制或保存bash脚本。
文件名称。 LNX-06.sh
#!/bin/bash

# chmod a+x CompareNumber.sh

file1=$1
file2=$2
number1=`cat $file1| wc -m`。
number2=`cat $file2 | wc -m`。

如果(( $number1 > $number2 ))
则
 echo 第一个有更多的字符。
elif (( $number1 < $number2 ))
那么
 echo 第二种类型有更多的字符。
en
  1. 写一个脚本,将参数中的两个数字相加并打印出结果。

输出示例。

41
证据。 复制或保存bash脚本。
文件名称。 LNX-07.sh
#!/bin/bash
 
sam1=$1
sam2=$2
 
结果=$((sam1+sam2))

echo $result
  1. 创建一个bash脚本,在一个文件中包含以下四个函数,并在脚本运行时执行这些函数!
    1. 创建一个打印Linux内核版本的函数,并将其命名为'get_kernel‘!
    2. 创建一个打印Linux发行版和版本的函数,并将其命名为'读取数据‘!
    3. 创建一个函数,打印作为函数参数指定的用户当前在系统上运行的Linux进程。该函数的名称应该是'get_uproc'.调用该函数时的参数应该是你被赋予访问权限的用户名,例如:。 用户0!
    4. 创建一个函数,以用户友好的方式打印以下Linux硬件信息(总内存大小,总处理器bogomips),命名为'get_memcpu‘!
证据。 复制或保存bash脚本。
文件名称。 LNX-08.sh

 

#!/bin/bash

函数 get_kernel_v2()
{
 uname -r
}


函数 get_distver_v2()
{
cat /etc/*-release | head -3
}

函数 get_uproc_v2()
{
username=$1
checkinguser=`getent passwd $username | wc -l`。
echo $checkinguser
如果(( $checkinguser>0 ))
那么
processcount=`ps auxf|awk '{print $1}'| grep $username|wc -l`。
echo $processcount
 如果(( ! $processcount==0 ))
 那么
  ps auxf | awk -v user=$username '{if($1=user){print $0}}'
 
 fi
fi
}

函数 get_memcpu_v2()
{
echo MEM: `cat /proc/meminfo | head -1 | awk '{print $2,$3}'`。
echo BogoMIPS: `cat /proc/cpuinfo | grep bogomips | uniq |awk '{print $3}'`.
 
}

get_kernel_v2
get_distver_v2
get_uproc_v2 用户3
get_memcpu_v2


##############################################################################################

#!/bin/bash

# 获取Linux内核版本的函数
get_kernel() {
    uname -r
}

# 获取Linux发行版和版本的函数
get_distver() {
    cat /etc/*release
}

# 用于获取特定用户运行的进程的函数
get_uproc() {
    if [ $# -ne 1 ]; then
        echo "Error: Invalid number of arguments" (错误:参数数量无效)。
        echo "Usage: $0 "
        退出 1
    en

    username=$1
    ps -u $username
}

# 获取系统内存和CPU信息的函数
get_memcpu() {
    echo "总内存:$(free -m | awk 'NR==2{printf "%.2f GB/n", $2/1024})"
    echo "CPU bogomips: $(cat /proc/cpuinfo | grep bogomips | awk '{sum+=$3} END {print sum}')
}

# 调用函数
echo "内核版本:$(get_kernel)"
echo "分布和版本:$(get_distver)"
echo "用户User0所运行的进程:$(get_uproc User0)"
echo "内存和CPU信息:$(get_memcpu)"

  1. 不允许根用户通过SSH登录。
证据。 /etc/ssh/sshd_config
文件名称。 LNX-09.txt
#!/usr/bin/bash
#futtatas之前。
#chmod a+x ~/Megoldasaim/Linux-Admin/001.sh
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config-_`date +"%Y%m%d_%H%M%S" `
 
this="#PermitRootLogin prohibit-password
this="PermitRootLogin no"
what="/etc/ssh/sshd_config"
 
sudo sed -i "s/$ez/$erre/g" $miben

如果(($# > 0 ))
那么
sudo cat /etc/ssh/sshd_config | sudo tee $1 ls > /dev/null
en
  1. SElinux功能被关闭。
证据。 /etc/selinux/config
文件名称。 LNX-10.txt
#!/usr/bin/bash
#futtatas之前。
#chmod a+x ~/Megoldasaim/Linux-Admin/002.sh
sudo cp /etc/selinux/config /etc/selinux/config-_`date +"%Y%m%d_%H%M%S"`。
 
this="SELINUX=enforcing"
this="SELINUX=disabled"
what="/etc/selinux/config"
 
sudo sed -i "s/$ez/$erre/g" $miben
 
#getenforce
#reboot
如果(( $#>0 ))
那么
sudo cat /etc/selinux/config | sudo tee $1 ls > /dev/null
en
  1. 服务器附带了一个尚未使用的磁盘(20GB)。 在上面创建一个文件系统。该文件系统应该是。 EXT4。 将其添加到机器中 /WEBDATA 有挂载点,并且卷被贴上了标签。 网络数据 (WEBDATA)
证据。 df -h的结果是LNX-11.txt文件和
/etc/fstab结果添加到LNX-11.txt文件中。
文件名称。 LNX-11.txt
#!/bin/bash
#elotte:
#chmod a+x ~/Megoldasaim/Linux-Admin/003.sh
 
sudo ls /sys/class/scsi_host | sudo awk '{print "echo "- - -" > /sys/class/scsi_host/" $1 "/scan" }' | sudo /usr/bin/bash
 
lsblk
 
#(echo n; echo p;echo ""; echo ""; echo ""; echo w ) | sudo fdisk /dev/sdb
< 0 ))
那么
sudo df -h | sudo tee $1 ls
sudo cat /etc/fstab | sudo tee -a $1 ls > /dev/null

en