##### MatReview feladatok #####

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

1) Processzor száma és típus

#!/bin/bash

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

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

echo $(CPUtype) x $(ProcCount)

2) Dátum kiiratása, formázva

#!/bin/bash

#22.11.07

date +%y.%m.%d.

3) Diskek száma

#!/bin/bash

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

4) Faktoriális rekurzívan

#!/bin/bash
function Fakt()
{
        n=$1
    if [[ $n -eq 0 ]]; then
        echo 1
    else
        echo $((n*$(Fakt $n-1)))
    fi
}
Fakt 5

5) File létezik e (egyszerű)

#!/bin/bash

FileName=$1

if [[ -r $FileName  ]]
then
        echo TRUE
else
        echo FALSE
fi

6) File létezik e (bővebb)

#!/bin/bash

FileName=$1


#if (($# > 0))
if [[ $FileName == "" ]]
then
        echo Nincs atadott parameter
else
if [[ -e $FileName  ]]
then
        if [[ -d $FileName  ]]
        then
                echo $FileName egy konyvtar.
        else
                echo $FileName egy fajl.
        fi
else
        echo Nincs ilyen file vagy konyvtar!
fi

fi

7) Szorzás BC

#!/bin/bash

szam1=$1
szam2=$2

result=$((szam1*szam2))
result2=`echo "$szam1 * $szam2"|bc`
echo $result
echo $result2

8) TotalDiskSpace

#!/usr/bin/bash

TDS=`df | grep -v Filesystem |awk '{szumma+=$2} END {print szumma}'`
# ======================================================================
TotalFreeSpace=0
FreeSpaceList=`df | awk '{print $2}'`
for i in $FreeSpaceList
  do
    if [[ ! $i == "1K-blocks" ]]
      then
        ((TotalFreeSpace+=$i))
      fi
  done
TDS2=$TotalFreeSpace

echo $TDS
echo $TDS2

##### 3.vizsgafelkészítő bash #####

Függvények
1) get_kernel_version
Készíts egy függvényt get_kernel_version néven, amely kiiratja a Linux kernel verzióját

Tipp: egy megfelelő utsítással megoldható feladat

példa: 5.4.72-generic

function get_kernel_version()
{
	echo `uname -r`
}

2) get_free_space

Készíts egy függvényt get_free_space néven, amely kiiratja az egyes file rendszerek telítettségét, valamint hogy milyen file rendszer ponton találunk mount pointokat ember számára könnyen olvasható módon:

Filesystem Size Used Avail Use% Mounted on
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
tmpfs 3.1G 0 3.1G 0% /proc/acpi
tmpfs 3.1G 0 3.1G 0% /sys/firmware

Tipp: egy megfelelő utasítással megoldható feladat

function get_free_space()
{
	df -h
}

3) get_total_mem

Készíts egy függvényt get_total_mem néven, amely kiiratja, összesen mennyi a teljes memória mérete a rendszerben:

MemTotal:                6401776 kB
Tipp: pl. a grep utasítás segtéségvel tudsz szűrni a kimeneti sorok között

function get_total_mem()
{
	cat /proc/meminfo | grep MemTotal

}

4) compare_line_count
Készíts egy függvényt compare_line_count néven, amely két fájl nevét kapja argumentumban, és kiírja annak a fájlnak a nevét, amelyben több sor van

function compare_line_count()
{
	file1=$1
	file2=$2
	result1=`cat $file1 | wc -l`
	result2=`cat $file2 | wc -l`
	if (($result1>$result2))
	then
		echo $file1
	else
		echo $file2
	fi
}

##### 3. vizsga bash része #####

Függvények
1) get_kernel_version
Készíts egy függvényt get_kernel_version néven, amely kiiratja a Linux kernel verzióját

#!/bin/bash

function get_hostname()
{
 hostname
}

2) get_total_mem
Készíts egy függvényt get_total_mem néven, amely kiíratja, összesen mennyi a teljes memória mérete a rendszerben:

function get_total_mem()
{
	cat /proc/meminfo | grep MemTotal

}

3) first_20_characters
Készíts egy függvényt first_20_characters néven, amely argumentumban megkapja egy létező fájl elérési útját, és kiolvassa és kiírja az első 20 karaktert.
A fájl létezését nem kell vizsgálni.

function first_20_characters()
{
	file=$1

	result=`head -c 20 $file`
	echo $result
}

###### LINUX bash projektfeladatok #####

2) Készíts egyszerű “Hello World!” szkriptet!

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 002.sh

echo Hello World!

3) Készíts szkriptet ami kiírja a 20 nappal ezelőtti dátumot alapértelmezett formátumban.

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 002.sh

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

echo $datum

4) Írj szkriptet, mely megadja, hogy az argumentumban megadott állomány létezik-e és írható-e!
Ha igen írja ki, hogy „Ez a fajl letezik es irhato”.” Ha nem, akkor a szkript ne térjen vissza értékkel

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 003.sh

file=$1

if [[ -w $file ]]
then
 echo Ez a fajl letezik es irhato
fi

5) Írj szkriptet, mely megadja, hogy az argumentumban megadott két karakterlánc azonos-e! Ha
igen, irja ki : „Ezek most azonosak”. Egyébként a szkript ne térjen vissza értékkel.

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 005.sh

str1=$1
str2=$2

if [[ $str1 == $str2 ]]
then
 echo Ezek most azonosak
fi

6) Írj szkriptet, mely megadja, hogy az argumentumban megadott két szám közül melyik a
nagyobb (első, vagy második) és írja is ki! A következő formátumban:
„Most ez a szám nagyobb: 12”.Ha 2 szám egyenlő a szkript ne térjen vissza értékkel.

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 006.sh

number1=$1
number2=$2

if [[ $number1 > $number2 ]]
then
 echo Most ez a szám nagyobb: $number1
else
 echo Most ez a szám nagyobb: $number2
fi

7) Írj szkriptet, mely kivonja az argumentumban megadott második számból az elsőt! És kiírja Az
eredményt. pl. „88”

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 007.sh

number1=$1
number2=$2

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

8) Írj szkriptet, mely az argumentumban megadott fájlok közül kiírja, hogy melyikben van több
karakter! A következő formátumban: „Most a /tmp/myfile.txt-ban tobb a karakter”. Ha egyformák a
szkript ne térjen vissza értékkel.

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 004.sh

file1=$1
file2=$2

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

if (($filechars1 > $filechars2))
then
 echo Most a $file1-ban van tobb karakter
else
 echo Most a $file2-ban van tobb karakter
fi

9) Írj szkriptet, mely összeadja az argumentumban megadott számokat! És kiírja az eredményt. Pl.
„88”

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 007.sh
for number in $@;do echo $number;done | awk '{sum+=$1} END {print sum}'

10) Írj szkriptet, mely két paramétert kap, az egyik egy fájl neve, a másik egy karakterminta.
Számolja ki, hogy a fájl hány ilyen karaktermintát tartalmaz! , és írja ki a következő formátumban:
„A kapott fájl a karaktermintat 11 sorban tartalmazza.”, Ha egyszer sem Szerepel a karakterminta a
fájlban, írja ki a karaktermintával együtt a következő formátumban: „A tükörfúrógép egyszer sem
szerepel”

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 007.sh

file=$1
string=$2

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

if (( $result==0 ))
then
 echo A $2 egyszer sem szerepel
else
 echo A kapott fajl a karaktermintat $result sorban tartalmazza
fi

11) Írj olyan szkriptet, ami a megadott első paraméter szerint köszönt és ha a második paraméter
egy még nem létező fájl, akkor abba is beleírja a köszöntést!

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 011.sh
greeting=$1
file=$2

echo $greeting

if [ ! -f "$file" ]
then
        echo $greeting > $file
fi

12) Készíts olyan szkriptet ami tartalmaz egy bash függvényt / function-t ami kiírja a Linux kernel
verzióját és a neve legyen ‘get_kernel_OS’!

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 012.sh

function get_kernel_OS()
{
 uname -r
}
get_kernel_OS

13) Készíts olyan szkriptet ami tartalmaz egy bash függvényt / function-t ami kiírja a Linux
Kernelverzió létrehozásának (fordításának) idejét és a neve legyen ‘get_kernel’!

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 012.sh
function 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) Készíts olyan szkriptet ami tartalmaz egy bash függvényt / function-t ami kiírja a Linux
folyamatok / process-ek közül azokat amik a paraméterként megadott felhasználó nevében futnak. A
függvény neve legyen ‘get_userprocesses ‘! Ha a felhasználó nem létezik, térjen vissza a következő
értékkel: „Ervenytelen felhasznalo”. Ha a felhasználó létezik, de nincs folyamata, ezzel térjen
vissza: „Folyamat nem talalhato”.

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 014.sh

function get_userprocesses()
{
username=$1
echo $username
checkinguser=`getent passwd $username | wc -l`
echo $checkinguser
if (( $checkinguser>0 ))
then
processcount=`ps auxf|awk '{print $1}'| grep $username|wc -l`
echo $processcount
 if (( ! $processcount==0 ))
 then
  ps auxf | awk -v user=$username '{if($1==user){ print $0}}'
 else
  echo Folyamat nem talalhato
 fi
else
 echo Ervenytelen felszanalo
fi
}
get_userprocesses $1

15) Készíts olyan szkriptet ami tartalmaz egy bash függvényt / function-t ami felhasználó barát
módon kiírja a Linux néhány hardver adatát (memória méret, processzor adatok) A függvény neve
legyen ‘get_hwinfo’! Megjelenítési formátum szabadon választott.

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 014.sh

function 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) Készíts olyan szkriptet ami tartalmazza a korábban megírt négy függvényt egy fájlban és le is
futtatja mind a négyet, ha a szkriptet lefuttatjuk!

#!/bin/bash
#ez kell a futtatáshoz:
#chmod a+x 014.sh



./012.sh
./013.sh
./014.sh User3
./015.sh

###### Linux bash (továbbiakban bash) tudásszint felmérő ######

Figyelem:

  • LNX-01.sh-tól LNX-07.sh-val bezárólag a kiértekelés elsődlegesen autograder(Gradescope) révén történik
  • 8),9),10)-es feladatoknál a kiértékelés nem automatizált. Ezeknek a feladatoknak az ellenőrzése, futtatása root jogosultsággal történik.
  • A ZIP feltöltésed csak a fájlokat tartalmazza alkönyvtárakat ne
  • Ügyelj rá, hogy a feltöltött szkriptjeid ne tartalmazzanak szintaktikai hibákat, és ne álljanak meg jogosultsági probléma miatt
  • Figyelj arra, hogy megszakítás nélkül kell lefutnia a szkripteknek, így user interakciót nem igényelhetnek (pl. Is this ok [y/N]: ne legyen benne, ehhez használd a -y kapcsolót)
  • Használj UTF-8 (without BOM) karakterkódolást és Unix sorvégződést
  • (csak LNX-01.sh – LNX-07.sh esetén ) Mivel a kiértékelő egy Docker konténerben fut, a systemd nem érhető el, és bc sem áll rendelkezésre a konténerben
  • (csak LNX-01.sh – LNX-07.sh feladatok esetén) A fájlokat root joggal nem rendelkező felhasználó fogja futtatni, ne használd a sudo parancsot
  • A feladatok eredményének (kimenetének) a példakimeneti formátummal karakterazonosnak kell lennie, nem lehet benne felesleges/hiányzó szóköz,karakter, írásjel.

Feladatok:

  1. Készíts bash szkriptet ami kiírja a mai dátumot év 4 karakter, hónap 2 karakter és nap kétkaraker formában! Az elválasztó karakter pedig legyen a pont ‘.’ karakter. (ÉÉÉÉ.HH.NN)
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-01.sh
#!/bin/bash

# chmod a+x Date-format.sh

date +%Y.%m.%d
  1. Írj szkriptet, mely kiírja a következő formátumban, hogy az argumentumban megadott fájlrendszer-objektum könyvtár-e és ha igen, akkor létezik-e! Amennyiben a paraméterként kapott fájlrendszer-objektum nem létezik, vagy nem könyvtár, a szkript ne térjen vissza eredménnyel.

Példa kimenet:

A megadott konyvtar letezik.
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-02.sh
#!/bin/bash

# chmod a+x Directory.sh

dir=$1

if [ -d $dir ]
then
 echo A megadott konyvtar letezik.
fi
  1. Írj szkriptet, mely kiírja a következő formátumban, hogy az argumentumban megadott állomány létezik-e és ha igen, akkor hány sorból áll! Amennyiben a fájl nem létezik, a szkript ne térjen vissza eredménnyel.

Példa kimenet:

A megadott fajl letezik.Sorok szama:24
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-03.sh
#!/bin/bash

# chmod a+x LineCount.sh

file=$1

if [[ -e $file ]]
then
 echo A megadott fajl letezik.Sorok szama:`cat $file | wc -l`
fi
  1. Írj szkriptet, mely kiírja a következő formátumban, hogy az argumentumban megadott két karakterlánc azonos-e! Amennyiben nem, a szkript ne térjen vissza eredménnyel.

Példa kimenet:

A karakterlancok azonosak
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-04.sh
#!/bin/bash

# chmod a+x StringSame.sh

str1=$1
str2=$2

if [[ $str1 == $str2 ]]
then
 echo A karakterlancok azonosak
fi
  1. Írj szkriptet, mely kiírja a következő formátumban, hogy az argumentumban megadott két szám közül melyik a nagyobb (első, vagy második) és írja is ki! Amennyiben egyik sem nagyobb a másiknál a szkript ne térjen vissza eredménnyel.

Példa kimenetek:

Az elso szam nagyobb:24
A masodik szam nagyobb:12
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-05.sh
#!/bin/bash

# chmod a+x CompareNumber.sh

number1=$1
number2=$2

if (( $number1 > $number2 ))
then
 echo Az elso szam nagyobb:$number1
elif (( $number1 < $number2  ))
then
 echo A masodik szam nagyobb:$number2
fi
  1. Írj szkriptet, mely az argumentumban megadott fájlok közül kiírja a következő formátumban, hogy melyikben van több karakter! Amennnyiben a két fájl egyforma karaktermennyiséget tartalmaz a szkript ne térjen vissza eredménnyel.

Példa kimenetek:

Az elso fajlban van tobb karakter.
A masodik fajlban van tobb karakter.
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-06.sh
#!/bin/bash

# chmod a+x CompareNumber.sh

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

if (( $number1 > $number2 ))
then
 echo Az elso fajlban van tobb karakter.
elif (( $number1 < $number2 ))
then
 echo A masodik fajlban van tobb karakter.
fi
  1. Írj szkriptet, mely összeadja az argumentumban megadott két számot és kiírja az eredményt!

Példa kimenet:

41
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-07.sh
#!/bin/bash
 
szam1=$1
szam2=$2
 
result=$((szam1+szam2))

echo $result
  1. Készíts olyan bash szkriptet, ami tartalmazza az alábbi négy függvényt egy fájlban és le is futtatja azokat, ha a szkriptet lefuttatjuk!
    1. Készíts olyan függvényt, ami kiírja a Linux kernelverzióját és a neve legyen ‘get_kernel‘!
    2. Készíts olyan függvényt, ami kiírja a Linux disztribúcióját és verzióját és a neve legyen ‘get_distver‘!
    3. Készíts olyan függvényt, ami kiírja azokat a Linux folyamatokat/process-eket, amik a függvény paramétereként megadott felhasználó által fut épp a rendszerben. A függvény neve legyen ‘get_uproc‘. A paraméter a függvény meghíváskor legyen a felhasználónév amit a hozzáféréshez kaptál pl.: User0!
    4. Készíts olyan függvényt, ami felhasználó barát módon kiírja a Linux következő hardver adatait (teljes memória méret, processzor összesített bogomips), a neve legyen ‘get_memcpu‘!
Evidencia: A bash szkript kimásolása vagy elmentése.
File neve: LNX-08.sh

 

#!/bin/bash

function get_kernel_v2()
{
 uname -r
}


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

function get_uproc_v2()
{
username=$1
checkinguser=`getent passwd $username | wc -l`
echo $checkinguser
if (( $checkinguser>0 ))
then
processcount=`ps auxf|awk '{print $1}'| grep $username|wc -l`
echo $processcount
 if (( ! $processcount==0 ))
 then
  ps auxf | awk -v user=$username '{if($1==user){print $0}}'
 
 fi
fi
}

function 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 User3
get_memcpu_v2


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

#!/bin/bash

# Function to get the Linux kernel version
get_kernel() {
    uname -r
}

# Function to get the Linux distribution and version
get_distver() {
    cat /etc/*release
}

# Function to get the processes running by a specific user
get_uproc() {
    if [ $# -ne 1 ]; then
        echo "Error: Invalid number of arguments"
        echo "Usage: $0 <username>"
        exit 1
    fi

    username=$1
    ps -u $username
}

# Function to get the memory and CPU information of the system
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}')"
}

# Call the functions
echo "Kernel version: $(get_kernel)"
echo "Distribution and version: $(get_distver)"
echo "Processes running by user User0: $(get_uproc User0)"
echo "Memory and CPU information: $(get_memcpu)"

  1. Tiltsuk le, hogy a root user SSH-n be tudjon lépni.
Evidencia: /etc/ssh/sshd_config
File neve: LNX-09.txt
#!/usr/bin/bash
#futtatas elott:
#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"`
 
ezt="#PermitRootLogin prohibit-password"
erre="PermitRootLogin no"
miben="/etc/ssh/sshd_config"
 
sudo sed -i "s/$ezt/$erre/g" $miben

if (($# > 0 ))
then
sudo cat /etc/ssh/sshd_config | sudo tee $1 ls > /dev/null
fi
  1. SElinux funkciót kapcsoljuk ki.
Evidencia: /etc/selinux/config
File neve: LNX-10.txt
#!/usr/bin/bash
#futtatas elott:
#chmod a+x ~/Megoldasaim/Linux-Admin/002.sh
sudo cp /etc/selinux/config /etc/selinux/config-_`date +"%Y%m%d_%H%M%S"`
 
ezt="SELINUX=enforcing"
erre="SELINUX=disabled"
miben="/etc/selinux/config"
 
sudo sed -i "s/$ezt/$erre/g" $miben
 
#getenforce
#reboot
if (( $# > 0 ))
then
sudo cat /etc/selinux/config | sudo tee $1 ls > /dev/null
fi
  1. A szerverhez hozzá van adva egy disk, ami még nincs használatban (20GB). Készíts rá fájlrendszert. A fájlrendszer legyen: EXT4. Add hozzá a géphez /WEBDATA mount point-tal, a kötet címkéje pedig: WEBDATA
Evidencia: df -h eredménye LNX-11.txt file-ba és
/etc/fstab eredménye hozzáírva LNX-11.txt file-ba
File neve: 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
<<com
 
echo "n
p
1
 
 
w
"|sudo fdisk /dev/sdb
com
#sudo sfdisk /dev/sdb
 
 
echo -e 'n\np\n\n\n\nw\n'|sudo fdisk /dev/sdb
echo --------------------------------------------------------------------------------------------
 
sudo mkfs.ext4 -f /dev/sdb1 -L WEBDATA

sudo mkdir -p /WEBDATA

echo "LABEL=WEBDATA	/WEBDATA	ext4	defaults	0 0" | tee -a /etc/fstab

sudo mount /dev/sdb1 /WEBDATA

if (($# > 0 ))
then
sudo df -h | sudo tee $1 ls
sudo cat /etc/fstab | sudo tee -a $1 ls > /dev/null

fi