###### упражнения 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 `
эхо $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
функция Факт()
{
n=$1
if [[ $n -eq 0 ]]; then
эхо 1
else
echo $((n*$(Факт $n-1)))
en
}
Факт 5
5) Файл существует e (простой)
#!/bin/bash
FileName=$1
if [[ -r $FileName ]]
затем
эхо TRUE
else
эхо FALSE
en
6) Файл существует e (больше)
#!/bin/bash
FileName=$1
#if (($# > 0))
if [[ $FileName == "" ]]
затем
echo нет параметра atadott
else
if [[ -e $FileName ]]
затем
if [[ -d $FileName ]]
затем
echo $FileName - это конывтар.
else
echo $FileName - fajl.
en
else
echo No such file or konyvtar!
fi
fi
7) Компрессия BC
#!/bin/bash
sam1=$1
sam2=$2
результат=$((sam1*sam2))
result2=`echo "$szam1 * $szam2"|bc`.
echo $result
echo $result2
8) TotalDiskSpace
#!/usr/bin/bash
TDS=`df | grep -v Filesystem |awk '{sum+=$2} END {print sum}'`.
# ======================================================================
TotalFreeSpace=0
FreeSpaceList=`df | awk '{print $2}'``
для i в $FreeSpaceList
сделать
if [[ ! $i == "1K-blocks" ]]
затем
((TotalFreeSpace+=$i))
en
сделано
TDS2=$otalFreeSpace
эхо $TDS
эхо $TDS2
###### 3.подготовка к экзамену bash #######
Характеристики
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, которая будет получать информацию о насыщенности каждой файловой системы и о том, какие точки файловой системы имеют точки монтирования в удобочитаемом виде:
Filesystem Size Used Avail Use% Mounted on
наложение 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
tmpfs 3.1G 0 3.1G 0% /proc/acpi
tmpfs 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
else
echo $file2
en
}
###### 3. экзамен bash часть #######
Характеристики
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 символов.
Существование файла проверять не нужно.
функция первые_20_символов()
{
file=$1
result=`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 дней"`.
echo 1TP3Date
4) Напишите сценарий, который сообщает, существует ли файл, указанный в аргументе, и доступен ли он для записи.
Если да, напишите "Этот вид зарегистрирован и может быть зарегистрирован"". Если нет, сценарий не возвращает значение
#!/bin/bash
1TP4Это необходимо для работы:
#chmod a+x 003.sh
file=$1
if [[ -w $file ]]
затем
echo Этот файл загружен и может быть записан
en
5) Напишите сценарий для определения того, являются ли две строки в аргументе одинаковыми. Если
да, выпишите: "Теперь они идентичны". В противном случае сценарий не должен возвращать значение.
#!/bin/bash
1TP4Это необходимо для работы:
#chmod a+x 005.sh
str1=$1
str2=$2
if [[ $str1 == $str2 ]]
затем
эхо Они теперь идентичны
fi
6) Напишите сценарий, который сообщает вам, какое из двух чисел в аргументе является
больше (первый или второй) и выпишите его! В следующем формате:
"Теперь это число больше 12".Если 2 числа равны, скрипт не возвращает значение.
#!/bin/bash
1TP4Это необходимо для работы:
#chmod a+x 006.sh
номер1=$1
число2=$2
если [[ $number1 > $number2 ]]
затем
echo Теперь это число больше: $number1
else
echo Теперь это число больше, чем: $number2
en
7) Напишите сценарий, который вычитает первое число из второго числа в аргументе. И напечатать
результат. например, "88"
#!/bin/bash
1TP4Это необходимо для работы:
#chmod a+x 007.sh
номер1=$1
число2=$2
eredmeny=`echo $number2-$number1 | bc`
эхо $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 больше символов
else
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
file=$1
string=$2
result=`cat $1 | grep -o $2 | wc -l``
#result= `cat $1 | grep -o $2 -c`
если (( $result==0))
затем
эхо $2 не указано ни разу
else
echo Результатом является дерево, содержащее символьную строку $result в строке $result
en
11) Напишите скрипт, который приветствует в соответствии с первым параметром и если второй параметр равен
файл, который еще не существует, он будет включать приветствие!
#!/bin/bash
1TP4Это необходимо для работы:
#chmod a+x 011.sh
приветствие=$1
file=$2
echo $greeting
if [ ! -f "$file" ]
затем
echo $greeting > $file
en
12) Создайте сценарий, содержащий функцию bash, которая печатает ядро Linux
и назовите его '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}'
}
get_kernel
14) Создайте сценарий, включающий функцию bash, которая выводит Linux
процессы, выполняемые от имени пользователя, указанного в качестве параметра. A
Имя функции должно быть 'get_userprocesses '! Если пользователь не существует, возвращается следующий результат
со значением: 'Unrequested use'. Если пользователь существует, но не имеет процесса, используйте это для возврата
обратно: 'Процесс не найден'.
#!/bin/bash
1TP4Это необходимо для работы:
#chmod a+x 014.sh
function get_userprocesses()
{
имя пользователя=$1
echo 1TP3username
checkuser=`getent passwd $username | wc -l`
echo $checkinguser
if (( $checkinguser>0 ))
затем
processcount=`ps auxf|awk '{print $1}'| grep $username|wc -l'
echo $processcount
if (( ! $processcount==0 ))
затем
ps auxf | awk -v user=$username '{if($1==user){ print $0}}''
else
echo Процесс не найден
en
else
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 включительно, доступ осуществляется в основном через автогрейдер (Gradescope).
- Для заданий 8), 9), 10) оценка не автоматизирована. Эти задачи контролируются и выполняются с привилегиями root.
- Ваш ZIP-загрузчик содержит только файлы в подкаталогах, а не
- Убедитесь, что загруженные вами скрипты не содержат синтаксических ошибок и не останавливаются из-за проблем с авторизацией
- Обратите внимание, что скрипты должны выполняться без перерыва, поэтому они не должны требовать взаимодействия с пользователем (например, Is this ok [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 символа и день в двухсимвольном формате! Символом-разделителем должна быть точка '.' (YYYY.MM.DD)
Доказательства: | Скопируйте или сохраните сценарий bash. |
---|---|
Имя файла: | LNX-01.sh |
#!/bin/bash
# chmod a+x Date-format.sh
дата +%Y.%m.%d
- Напишите сценарий, который выводит в следующем формате, является ли объект файловой системы, указанный в аргументе, каталогом, и если да, то существует ли он. Если объект файловой системы, указанный в качестве аргумента, не существует или не является каталогом, сценарий не возвращает результат.
Пример вывода:
Проверяется указанный конывтар.
Доказательства: | Скопируйте или сохраните сценарий bash. |
---|---|
Имя файла: | LNX-02.sh |
#!/bin/bash
# chmod a+x Directory.sh
dir=$1
if [ -d $dir ]
затем
echo Указанный каталог найден.
en
- Напишите сценарий, который выводит в следующем формате, существует ли файл, указанный в аргументе, и, если да, то сколько строк он состоит. Если файл не существует, сценарий не возвращает результат.
Пример вывода:
Установите соответствие между указанными видами.Количество строк:24
Доказательства: | Скопируйте или сохраните сценарий bash. |
---|---|
Имя файла: | LNX-03.sh |
#!/bin/bash
# chmod a+x LineCount.sh
file=$1
if [[ -e $file ]]
затем
echo Указанный вид найден.Набор строк:`cat $file | wc -l`.
en
- Напишите сценарий, который выводит в следующем формате, одинаковы ли две строки в аргументе. Если нет, сценарий не возвращает результат.
Пример вывода:
Струны идентичны
Доказательства: | Скопируйте или сохраните сценарий bash. |
---|---|
Имя файла: | LNX-04.sh |
#!/bin/bash
# chmod a+x StringSame.sh
str1=$1
str2=$2
if [[ $str1 == $str2 ]]
затем
echo Строки символов идентичны
en
- Напишите сценарий, который печатает большее из двух чисел в аргументе (первое или второе) в следующем формате и выведите его на печать. Если ни одно из них не больше другого, сценарий не вернет результат.
Пример выходов:
Первое число больше: 24
Второе семя больше:12
Доказательства: | Скопируйте или сохраните сценарий bash. |
---|---|
Имя файла: | LNX-05.sh |
#!/bin/bash
# chmod a+x CompareNumber.sh
номер1=$1
число2=$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 ))
затем
Эхо В первом варианте больше персонажей.
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, и назовите ее 'get_distver‘!
- Создайте функцию, которая печатает процессы Linux, запущенные в системе пользователем, указанным в качестве параметра функции. Имя функции должно быть 'get_uproc'. Параметром при вызове функции должно быть имя пользователя, предоставленное вам для доступа, например: Пользователь0!
- Создайте функцию, которая выводит следующую информацию об аппаратном обеспечении Linux (общий объем памяти, общее количество процессоров) в удобном для пользователя виде, назвав ее 'get_memcpu‘!
Доказательства: | Скопируйте или сохраните сценарий bash. |
---|---|
Имя файла: | LNX-08.sh |
#!/bin/bash
функция get_kernel_v2()
{
uname -r
}
функция get_distver_v2()
{
cat /etc/*-release | head -3
}
функция get_uproc_v2()
{
имя пользователя=$1
checkuser=`getent passwd $username | wc -l`
echo $checkinguser
if (( $checkinguser>0 ))
затем
processcount=`ps auxf|awk '{print $1}'| grep $username|wc -l'
echo $processcount
if (( ! $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 "Ошибка: Недопустимое количество аргументов"
echo "Использование: $0 "
выход 1
en
имя пользователя=$1
ps -u 1TP3Имя пользователя
}
# Функция для получения информации о памяти и процессоре системы
get_memcpu() {
echo "Total memory: $(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 "Информация о памяти и процессоре: $(get_memcpu)"
- Запретите пользователю root входить в систему через 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
- Сервер поставляется с еще неиспользуемым диском (20 ГБ). Создайте на нем файловую систему. Файловая система должна быть: 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
Оставить комментарий