###### упражнения 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
  • Результат (вывод) упражнения должен быть идентичен формату вывода примера, без лишних/пропущенных пробелов, символов и знаков препинания.

Задачи:

  1. Создайте сценарий bash, который печатает сегодняшнюю дату в формате год 4 символа, месяц 2 символа и день в двухсимвольном формате! Символом-разделителем должна быть точка '.' (YYYY.MM.DD)
Доказательства: Скопируйте или сохраните сценарий bash.
Имя файла: LNX-01.sh
#!/bin/bash

# chmod a+x Date-format.sh

дата +%Y.%m.%d
  1. Напишите сценарий, который выводит в следующем формате, является ли объект файловой системы, указанный в аргументе, каталогом, и если да, то существует ли он. Если объект файловой системы, указанный в качестве аргумента, не существует или не является каталогом, сценарий не возвращает результат.

Пример вывода:

Проверяется указанный конывтар.
Доказательства: Скопируйте или сохраните сценарий bash.
Имя файла: LNX-02.sh
#!/bin/bash

# chmod a+x Directory.sh

dir=$1

if [ -d $dir ]
затем
 echo Указанный каталог найден.
en
  1. Напишите сценарий, который выводит в следующем формате, существует ли файл, указанный в аргументе, и, если да, то сколько строк он состоит. Если файл не существует, сценарий не возвращает результат.

Пример вывода:

Установите соответствие между указанными видами.Количество строк:24
Доказательства: Скопируйте или сохраните сценарий bash.
Имя файла: LNX-03.sh
#!/bin/bash

# chmod a+x LineCount.sh

file=$1

if [[ -e $file ]]
затем
 echo Указанный вид найден.Набор строк:`cat $file | wc -l`.
en
  1. Напишите сценарий, который выводит в следующем формате, одинаковы ли две строки в аргументе. Если нет, сценарий не возвращает результат.

Пример вывода:

Струны идентичны
Доказательства: Скопируйте или сохраните сценарий bash.
Имя файла: LNX-04.sh
#!/bin/bash

# chmod a+x StringSame.sh

str1=$1
str2=$2

if [[ $str1 == $str2 ]]
затем
 echo Строки символов идентичны
en
  1. Напишите сценарий, который печатает большее из двух чисел в аргументе (первое или второе) в следующем формате и выведите его на печать. Если ни одно из них не больше другого, сценарий не вернет результат.

Пример выходов:

Первое число больше: 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
  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 ))
затем
 Эхо В первом варианте больше персонажей.
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, и назовите ее 'get_distver‘!
    3. Создайте функцию, которая печатает процессы Linux, запущенные в системе пользователем, указанным в качестве параметра функции. Имя функции должно быть 'get_uproc'. Параметром при вызове функции должно быть имя пользователя, предоставленное вам для доступа, например: Пользователь0!
    4. Создайте функцию, которая выводит следующую информацию об аппаратном обеспечении 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)"

  1. Запретите пользователю 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
  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. Сервер поставляется с еще неиспользуемым диском (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