Linux – Shell enzo… deel 3
In deel 3 van Linux Shell Enzo gaan we kijken naar een paar simpele maar o zo essentiële zaken. In dit deel gaan we kijken naar directory browsing en overige directory werkzaamheden zoals het aanmaken en verwijderen van directories. Vervolgens kijken we ook naar een stukje onderhoud van het Linux OS, namelijk het updaten en upgraden van het systeem.
Reguliere Expressie
Alvorens we gaan kijken naar commando’s om met directories (en ook files) te werken is het goed om te weten dat Bash (en andere Linux shells) reguliere expressie ondersteunen. Door het toepassen van reguliere expressie kun je bulktaken ontzettend snel uitvoeren. Over reguliere expressie heb ik een andere post gemaakt. Bekijk voor alle reguliere expressie tips deze post.
Linux root user rechten
Normale gebruikersaccount in Linux hebben nooit volledige “root rechten”. Dit voorkomt dat deze gebruikers core bestanden van linux modificeren of verwijderen waardoor Linux niet meer werkt. Omdat sommige werkzaamheden wel speciale (root) rechten vereisen kunnen we taken in bash uitvoeren als super user. Dit kunnen we op 2 manieren doen:
su
“su” staat voor “super user”. Na het invoeren van dit commando moet je het wachtwoord van de root user ingeven. Als dit succesvol is gedaan dan voer je de actieve Bash shell uit als super user. Elk commando welke vervolgens ingevuld wordt zal uitgevoerd worden als super user en dus kun je vrijwel alle systeemtaken en commando’s uitvoeren.
sudo
“sudo” staat voor “super user do” en is de tijdelijke (eenmalige) variant van “su”. Als je een commando uit moet voeren als super user kun je het “sudo” commando vooraan de commandoregel plaatsen. Het systeem zal je vervolgens eveneens om het root wachtwoord vragen en na het succesvol invoeren van het root wachtwoord voer je het commando uit als super user. Het volgende commando wordt weer uitgevoerd als gewone gebruiker omdat “sudo” dus van toepassing is op 1 commando.
Directory Browsing
Om van A naar B te komen moet je weten welke commando’s je moet gebruiken. Hoe zie je waar je jezelf bevindt in de boomstructuur en hoe ga je naar een andere locatie. Directory browsing in Linux Bash is simpel, heeft soms overeenkomsten met Windows maar gaat veel verder dan dat waardoor je ook veel sneller kunt browsen. De volgende commando’s zijn belangrijk tijdens het browsen maar kunnen ook toegepast worden op het kopiëren, verwijderen en aanmaken van directories en bestanden.
pwd
“pwd” staat voor “Print Working Directory”. Middels “pwd” weet je dus exact in welke folder je zit en welke parent folders (bovenliggende folders) er zijn.
ls
“ls” staat voor “List”. Dit commando is vergelijkbaar met het “dir” commando in Windows. Middels “ls” zie je de inhoud van een directory. Handige varianten op het “ls” commando zijn.
Lange weergave van namen:
ls –l |
Weergave inc. hidden files:
la –a |
Lange weergave inc. hidden files:
la –la |
Andere apparaten weergeven, zoals hierboven de aangesloten USB apparaten:
lsusb |
cd
Het commando “cd” staat voor “Change Directory” en wordt gebruikt om naar een andere folder te navigeren. Handige varianten op het “cd” commando zijn.
Een map omhoog (“/home/” naar “/”) – let op de spatie tussen het commando en de puntjes:
cd .. |
Navigeer naar de root:
cd / |
“cd” zonder toevoeging brengt je naar je home directory:
cd |
rm
“rm” staat voor “Remove”. Met het “rm” commando worden bestand en mappen verwijderd. Hou er rekening mee dat Unix case sensitive en de naam correct gespeld moet worden (incl. de hoofdletters). Met “rm” kunnen alleen lege folders verwijderd worden.
De “-r” toevoeging zorgt ervoor dat volle directories verwijderd kunnen worden:
rm -r |
De “-i” toevoeging zorgt ervoor er om bevestiging gevraagd wordt bij elk bestand dat verwijderd wordt:
rm -i |
mkdir
“mkdir” staat voor “Make Directory”. Middels “mkdir” maak je een nieuwe directory aan.
Voorbeeld – Maak nieuwe test directory aan (in de folder waar je bent):
mkdir test |
cp
Met het “cp” (copy) commando kun je bestanden kopiëren van locatie A naar locatie B.
Onderstaande voorbeeld zorgt ervoor dat een bestand (testfile.txt) van /home/ naar /home/user/Desktop gekopieerd wordt:
cp /home/testfile.txt /home/user/Desktop |
Onderstaande variant met wildcard (*) zorgt ervoor dat alle *.txt bestanden in /home naar de Desktop gekopieerd worden :
cp /home/*txt /home/user/Desktop |
mv
“mv” staat voor “Move”. Met “mv” kun je bestanden en mappen kunt verplaatsen, hernoemen en overschrijven.
Om bestanden te verplaatsen gebruik je het commando als: “mv file directory”. Dus bij onderstaande voorbeeld worden de 3 files naar de Desktop directory verplaatst:
mv file1.txt file2.txt file3.txt /home/user/Desktop |
Een wat geavanceerder voorbeeld staat hieronder. Hierbij wordt de folder “my_dir” (op de Desktop) en alle *.bak bestanden in bovenliggende (user) folder verplaatst naar de folder “mynewdir”:
mv /home/user/Desktop/my_dir ../*.bak /home/user/Desktop/mynewdir |
Bestanden en directories hernoemen gaat als volgt:
mv /home/user/Desktop/my_dir /home/user/Desktop/mynewdir |
Onderstaande voorbeeld laat zien hoe je file2.txt kunt overschrijven met de content van file1.txt (als deze al bestaat) of kunt hernoemen (als file2.txt nog niet bestaat):
mv file1.txt file2.txt |
De toevoeging –l zorgt ervoor dat het systeem vraagt of je “file2” wilt overschrijven (veiliger):
mv -l file1.txt file2.txt |
locate
Met de “locate” functie kun je snel naar bestanden zoeken. Zoek je b.v. een bestand dat “skyrocket” heet dan gebruik je:
locate skyrocket |
Linux updaten (en opschonen)
Net als elk OS moet ook Linux up-to-date blijven. Dit betekend dat updates periodiek geïnstalleerd moeten worden. Linux doet dit niet automatisch en hiervoor kun je prima Bash gebruiken. Onderstaande voorbeeld is voor “APT” systemen. Linux servers zijn meestal “RPM” gebaseerde systemen en hoewel het idee identiek is zijn de commando’s net iets anders.
We kennen in Linux grofweg 3 update commando’s:
update
Update de lijst met beschikbare updates (pakketjes en versies)
upgrade
Installeert nieuwere versies van de reeds bestaande applicaties en pakketten. Bestaande pakketten worden hiermee nooit verwijderd.
dist-upgrade
Dit commando is een aanvulling van het “upgrade” commando. “dist-upgrade” gaat op intelligente wijze om met veranderende afhankelijkheden van nieuwe versies, heeft een “slim” conflict resolutie systeem, en “dist-upgrade” zal proberen de belangrijkste software en pakketten te upgraden ook als dit ten koste gaat van de minder belangrijke software en pakketten. Het “dist-upgrade” commando kan soms pakketten toevoegen en verwijderen. “dist-upgrade” zal dus in staat zijn om de kernel te updaten terwijl “upgrade” dit niet kan. Er is nog een commando (nieuwer) welke dezelfde functie heeft als “dist-upgrade” maar qua naamgeving de lading beter dekt. Dit is “full-upgrade”
Zoals al eerder gezegd voeren we de updates uit middels apt-get. De apt-get functie wordt later verder besproken. Om updates uit te voeren moet je de update commando’s uitvoeren als super user. De complete commando’s zien er dan als volgt uit.
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade |
Het wordt ook aangeraden om de commando’s in deze volgorde uit te voeren. Het is in ieder geval zaak om altijd eerst de “update” uit te voeren en vervolgens de ‘upgrade” zodat het systeem weet welke pakketten geupgrade moeten worden.
Echter alvorens deze commando’s naar behoren te laten werken moet het systeem weten uit welke bron de pakketten gehaald en vergeleken moeten worden. Deze bron geef je op in het “sources.list” bestand. Dit bestand staat hier: “/etc/apt/sources.list“.
Om de juiste sources (repositories) te vinden moet je weten welke versie van Linux je hebt. Dit doe b.v. door het commando uit “Linux Shell Enzo – Deel 2” te gebruiken:
cat /etc/*-release
In bovenstaande voorbeeld is mijn versie “Linux Kali Rolling”. Een simpele Google zoekopdracht resulteert in de volgende pagina waar de juiste resources vermeld staan.
Open het bestand “/etc/apt/sources.list“ en vul hier (indien dit niet zo is) de juiste repositories in.
Nu de repositories correct zijn kunnen we het systeem updaten. Dit kunnen we door bovenstaande commando’s separaat uit te voeren of door deze te bundelen in onderstaande commando. Let op de “-y” toevoeging waarmee voorkomen wordt dat het systeem steeds om bevestiging vraagt.
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y |
Ook is het aan te raden om voor het updaten alle reeds gedownloade archieven te verwijderen zodat er geen oude installatie pakketjes meer zijn en om ruimte op te schonen. Je kunt eventueel overwegen om ook alle ongebruikte pakketten (packages) te verwijderen. Dit doen we middels de volgende commando’s:
Verwijder gedownloade archiefbestanden:
sudo apt-get clean |
Verwijder alleen oude gedownloade archiefbestanden:
sudo apt-get autoclean |
Verwijder alle ongebruikte packages:
sudo apt-get autoremove |
Tenslotte is het aan te raden om alle pakket afhankelijkheden (dependencies) te controleren voor het updaten. Dit doen we met:
sudo apt-get check |
Om het verhaal compleet te maken is mijn favoriete upgrade commando als volgt:
sudo apt-get check && sudo apt-get autoclean && sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y |
*als er tijdens het updaten van Linux niet specifiek om een reboot gevraagd wordt dan is die niet nodig. Uiteraard mag Linux altijd even gereboot worden (kan helemaal geen kwaad) maar zonder vraag is het rebooten niet noodzakelijk en kan er gewoon doorgewerkt worden.
Op naar deel 4
Na het 3e deel hoop ik dat het werken met Bash een stuk minder eng is geworden en dat je ziet dat de Linux Shell een krachtige tool is om snel diverse werkzaamheden uit te voeren. In “Linux – Shell enzo… deel 4” gaan we werken met bestanden en geven we een snelle overview van de Linux editors. Ook zullen we kijken naar de archieffunctie “tar”. Tot deel 4!