##### 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:
- 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
- Í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
- Í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
- Í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
- Í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
- Í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
- Í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
- 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!
- Készíts olyan függvényt, ami kiírja a Linux kernelverzióját és a neve legyen ‘get_kernel‘!
- 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‘!
- 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!
- 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)"
- 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
- 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
- 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
Hagyj üzenetet