#### 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
- 练习的结果(输出)必须与示例的输出格式相同,没有不必要/遗漏的空格、字符或标点符号。
任务。
- 创建一个bash脚本,以4个字符的年、2个字符的月和2个字符的日的格式打印今天的日期!分隔符应该是点'.'字符(YYY.MM.DD)。
证据。 | 复制或保存bash脚本。 |
---|---|
文件名称。 | LNX-01.sh |
#!/bin/bash
# chmod a+x Date-format.sh
日期 +%Y.%m.%d
- 编写一个脚本,以下列格式打印参数中指定的文件系统对象是否是一个目录,如果是的话,是否存在。如果作为参数给定的文件系统对象不存在,或者不是一个目录,脚本不返回结果。
输出示例。
指定的conyvtar被检查。
证据。 | 复制或保存bash脚本。 |
---|---|
文件名称。 | LNX-02.sh |
#!/bin/bash
# chmod a+x Directory.sh
dir=$1
如果 [ -d $dir ]
则
echo 找到了指定的目录。
en
- 编写一个脚本,以下列格式打印出参数中指定的文件是否存在,如果存在,它包括多少行。如果文件不存在,该脚本不返回结果。
输出示例。
匹配指定的物种。行数:24
证据。 | 复制或保存bash脚本。 |
---|---|
文件名称。 | LNX-03.sh |
#!/bin/bash
# chmod a+x LineCount.sh
file=$1
如果[[-e $file]] 。
则
echo 指定的物种被匹配。线路设置:`cat $file | wc -l`。
en
- 编写一个脚本,以下列格式打印出参数中的两个字符串是否相同。如果不是,该脚本不返回结果。
输出示例。
字符串是相同的
证据。 | 复制或保存bash脚本。 |
---|---|
文件名称。 | LNX-04.sh |
#!/bin/bash
# chmod a+x StringSame.sh
str1=$1
str2=$2
如果[[$str1 == $str2]] 。
那么
echo 字符串是相同的
en
- 编写一个脚本,以下列格式打印参数中两个数字(第一个或第二个)中较高的一个,并将其打印出来。如果这两个数字都不比另一个大,该脚本将不返回结果。
输出实例。
第一个数字更大: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
- 写一个脚本,将参数中给出的文件按以下格式打印出来,哪一个文件的字符数更多!如果两个文件包含相同数量的字符,脚本将不返回任何结果。
输出实例。
第一部有更多的人物。
第二种有更多的特征。
证据。 | 复制或保存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
- 写一个脚本,将参数中的两个数字相加并打印出结果。
输出示例。
41
证据。 | 复制或保存bash脚本。 |
---|---|
文件名称。 | LNX-07.sh |
#!/bin/bash
sam1=$1
sam2=$2
结果=$((sam1+sam2))
echo $result
- 创建一个bash脚本,在一个文件中包含以下四个函数,并在脚本运行时执行这些函数!
- 创建一个打印Linux内核版本的函数,并将其命名为'get_kernel‘!
- 创建一个打印Linux发行版和版本的函数,并将其命名为'读取数据‘!
- 创建一个函数,打印作为函数参数指定的用户当前在系统上运行的Linux进程。该函数的名称应该是'get_uproc'.调用该函数时的参数应该是你被赋予访问权限的用户名,例如:。 用户0!
- 创建一个函数,以用户友好的方式打印以下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)"
- 不允许根用户通过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
- 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
- 服务器附带了一个尚未使用的磁盘(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
发表评论