Linux – podstawy

Podstawowe komendy które przydają się w codziennym użytkowaniu linuxa

mkdir -p katalog/drugi/kolejny
touch nazwa_pliku		gdy nie będzie pliku o tej nazwie zostanie utowrzony pusty plik
touch -t 202007120200 plik.txt	(zniama dotknięcia pliku.txt  2020r 07m 12d godzina 02:00)
	lub							
touch --date="2022-12-06 18:30" plik.txt
touch -r plik.txt innyplik.txt  przypiszę plikowi innyplik.txt datę z plik.txt 
cp plik.txt copy.txt
cp *txt backups			kopuje pliki txt do katalogu backup
cp -r /katalog /inny_katalog kopiuje rekurencynie wszystko z katalog do inny_katalog
cp -r ~/katalog/* .	        ~ to katalog domowy a . to bieżacy katalog
mv *txt backup 			przenieś pliki txt do katalogu backup
mv plikt.txt nowanzawa.txt      zmienia nazwę pliku 
mv -b 1.txt 3.txt               gdzy zmieniamy nazwę pliku na inną która istnieje to parametr -b utworzy backup pliku nadpisanego
tree - wyswietla drzewo katalogów
rm plik.txt 			usuwa plik.txt
rm pli*				usuwa wysztko co pasuje do pli (bez katalogów)
rm -r                           usuwa rekurencyjne
rm -ri              		usuwa rekurencyjne ale z pytaniem o potwierdznie
rm -f 				force
ln index.txt index2.txt         jest to link dowiązania mają tą samą zawartość ale w obrębie tej samej partycji
ln -s /pelna/sciezka/dostepu/do/pliku/index.txt ~/kopia_index.txt
			        dowiązanie symboliczne musi mieć pełną ścieżkę dostępu do pliku
jak usune zwykły ln to drugie dowiązanie będzie dostępnie
jak usune zwykły ln -s to drugie dowiązanie nie bedzie dostępnie
id 		                numer uid=user id gid=group id  groups=.... user moze należeć do róznych grup
logname                         kim jestem zalogowany przydatne gdzy korzystamy z sudo 
whoami 	                        kim jestem - zwraca nazwę użytkownia
who am i 	                dokładniejsze dane: nazwa użytkownika pts -terminal, o której godzinie się zalogował i z jakiego adresu ip
who 		                pokazuję wszystkich userwów zalogowany do systemu 
users                           wypisuje wszytkich zalogowanych
who --boot                      kiedy był bootowany serwer 
who --count                     zlicza wszystkich zalogowanych
uptime                          czas pracy systemu
who -T                          + świadczy że można przekazywać komunikaty
who -a	all
who --users lub -u              podaje czas bezczynnosci użytkowników
who -Ha	line - Heder - kolumn PID- procesy idle - ile czasu nic nie robi + świadczy że mozna przekazywać komunikaty
	System_boot od kiedy był restartowany
	run-leve 5

	0 Halt 
	1 Single-user mode 
	2 Multi-user mode 
	3 Multi-user mode with networking (tylko znakowy)
	4 Not used 
	5 Start the system normally with GUI (w interfejsie graficznym)
	6 Reboot 

uname -a        info o systemie all
      -n	node hostname
      -r	info  wydanie jądra
      -v	info  wersji jądra
      -m	info o architekturze maszyny na ktorej pracujesz

groups - zwraca do jakich grup należę
useradd (zobacz man jakie mogą być parametry)
useradd -b /home -c "Jony Smith" -e 2022-02-12 -g jakas_grupa -k /etc/skel -m john
more /etc/passwd     tu znajdują się konta na naszym systemie
struktura:
nazwa_usera:haslo:identyfikator_usera:identyfikator_grupy_podstawowej:komentarz_uzytownika: shell jakie ma być uruchomione dla usera
/etc/shadow - tu przechowywane sa hasla
passwd
chmod o-rwx plik.txt  	o-other -rwx odebranie rwx   
			+    dodaj
		        =    nadaj (jak puste ustawia brak uprawineń)						
			u-user
			g-group
			a-all    wtedy zmieniamy uprawnienia dla wszytkich
			ug=rw    można zmieniać uprawnienia jednocześnie dla user group .....
chmod -R o= plik.text	- rekurwynie usunie wszystkie prawa dla wszystkich z poza grupy
r=4 w=2 x=1
rwx 
421 =7

Tworzenie skryptu. Plik tekstowy zaczynamy linijką:

#!/bin/bash
./nazwa_skryptu                  wykonywanie skryptu wywołujemy ./
chgrp nazwa_grupy plik.txt      zmiana grupy dla pliku
chgrp -R 
sudo chown nazwa_właściciela plik.txt  zmiana właściciela dla pliku
newgrp nazwa_grupy    zmiana grupy podstawowej, od teraz każdy tworzony plik lub katalog będzie należał do nazwa_grupy
umask domyślnie ma 666 jak po wylistowaniu umask zwraca 0022 to znaczy
 666
-022
------
 644
sudo groupadd nazwa_nowej_grupy    dodawanie nowej grupy
more /etc/group   informacje o grupach. Struktura tego pliku to 
			nazwa_grupy:haslo_grupy:identyfikator_grupy:wymienieni_uzytkownicy _ktorzy_zostali _dodani_do_grupy
sudo groupmod --new-name nowa_nazwa_grupy nazwa_grupy_która_chcemy_zmienic
sudo groupdel nazwa_grupy_ktora_chcemy_skasowac
sudo usermod -G inna_grupa, jeszcz_inna nazwa_usera	 dodaje userowi prawa do grup
             -g jakas_grupa nazwa_usera			 zmienia grupę podstawową userowi
userdel -r nazwa_usera      -r powoduję że kasowany jest też katalog domowy usuwanego usera

last 						lista sesji 
last --limit 10					10 ostatnich sesji
last --limit 10 --system			10 ostatnich sesji z pracą systemu shutdown runlevel..
last --limit 10 --system --fulltime		10 ostatnich sesji z pracą systemu shutdown runlevel.. oraz pełny czas
last --limit 10 --system --fulltime --since 20230201110000	od konktetniej daty i czasu	2023 02 01  11 00   00
											         rok  m  d   h min  sek
sudo lastb              -nie udane próby logowania
which nazwa_polecenia   -zwraca gdzie dane polecenie się znajduje
		        np. which ls  zwróci ścieżkę gdzie znajduje się polecenie ls ale też wskaże że 
		        tak naprawdę ls to alias z przełącznikiem kolorującym --color=auto
which -a ping           wyświetli wszystkie występowania polecenia. W tym przypadku są to dwie scieżki
 
echo $PATH 		wyswietla wszystkie ścieżki zmiennej środowiskowe 
echo $USER		wyświetlić wartość zmiennej środowiskowej USER.
set | more		wszystkie zmienne środowiskowe 

alias 			wyświetla wszystkie aliasy
alias l10="last --limit 10 --system --fulltime"	 -tworzy alias z polecenia (tylko w danej sesji)
cat .bash_profile       w katalogu domowym w tym pliku znajdują się wszystkie dane przekazywane po zalogowaniu do basha
jak zmieniasz ten plik zrób kopie cp .bash_profile bash_profile.copy i bądź zalogowany dodatkowo w innej sesji w razie 
błędu w edycji ta druga sesja uratuje tobie życie jak również kopia pliku:)

unalias l10

zmienne
----------------------
PINGCOUNT=3
PINGSERVER=www.ibm.com
echo $PINGCOUNT
echo $PINGSERVER
wykonujemy komendę ping -c 3 www.ibm.com (c ilość pingować jak ma się wykonać tutaj 3)
a teraz wykorzystując zmienne
ping -c $PINGCOUNT $PINGSERVER

export PINGCOUNT PINGSERVER  	eksportowanie zmiennych w potomnych bashach

przykład
FILEPATH='/tmp/shared_log.txt'

ls -R /etc > $FILEPATH     	w katalogu tmp powstanie plik shared_log.txt

more $FILEPATH			wyświetli plik shared_log.txt 


obliczenia

expr 1 + 2 			wynik 3     -pomiędzy wyrażeniami musza być spacje
expr substr VIKING 3 4		wynik KING  -od 3 znaku wypisz 4 znaki następne
expr 4 \> 2			\ stosujemy żeby traktowane bylo to jako zna > a nie przekierowanie do pliku 2. 
                                Wynik 1 czyli prawda znak można stosować też przy innych operacjac 
                                \-   \+  \*   przy mnożeniu jest wymagane
A=44
B=10
expr $A - $B			34
C=`expr $A -$B`			wykonujemy odejmowanie i przechowujemy wynik w zmiennej C całe wyrażenie musi być  w znaka ` ` odwrócona apostrof (klawisz tylda)
lub
C=$(expr $A -$B)
echo $C

bc 				uruchamia program bc wpisujemy np 1+2+3 i enter daje wynik 6. Wyjscie quit
echo "1+2+3" | bc		daje potokiem tekst 1+2+3 do bc a on zwraca nam wynik 6 w konsoli
ZMIENNA=`echo "1+2+3" | bc`	wynik 6 w ZMIENNA
ZMIENNA=`echo "1+2+3" | bc -l`  załądowanie standardowych bibliotek matematycznych
				więcej o bc jak zorbić pętle obliczeń i zaczytywać parametry do bc z pliku z 
				opcją cichą q zajrzyj do video 61 (zaczyna się w minucie 7:17)

sudo date mmddggmmyyyy.ss       ustawienie daty w systemie: miesiać dzień godzina minuty rok . sekundy
	  020117522023.30     
date "+%Y-%m-%d" 		2023-02-01
date "+%Y%m%d"			20230201
date "+%Y-%m-%d %H:%M (%a)"	2023-02-01 17:56 (Wed)

FILE=`date "+LOG_%Y-%m-%d.txt"`

who > $FILE			wrzucamy do zminnej wynik komendy who
cat LOG_2023-02-01.txt		wyświetlamy stworzony plik i mamy kto był zalogowany o konktretnej dacie

cal 			kalendarz miesięczny z podswietlonym dniem dzisiejszym
cal 2023		kalenadarz na 2023
cal 6 12 2023	        kalendarz na miesąć grudzień 2023 z podswietlonym dniem 6
cal -m 2023 	        tydzień od poniedziałku
cal -w 2023		pokazuje tygodnie w roku


cp /etc/passwd .            -kropka na końcu wskazuje że kopiuję passwd do katalogu bierzącego .

nl passwd > num_passwd      -dodaję do pliku tekstowego numery linii i skierowuję do nowego pliku num_passwd

head	num_passwd	    -domyślnie wyświetla 10 początkowych linii pliku
head -n 20	num_passwd  -20 linii
head -n -20	num_passwd  -wyświetla plik z pominięciem ostatnich 20 linii

tail num_passwd		    -domyślnie wyświetla 10 ostatnich linii
tail -n 20 num_passwd	    -20 linii
tail -n +20 num_passwd      -pomija 19 pierwszych linii a zaczyna od 20 linii a później wyświetla resztę do końca pliku
head -n 20	num_passwd |  tail -n 10    -wyswietla 20 początkowych linii a potem tail 10 ostatnich linii. W rezultacie mamy 10-20 linii

przykład potoku z more
tail -n 100 /etc/mime.type | more    -wyświetli ostatnich 100 linii i skierowuję do more

more 		klawisze 
		enter jedna linia
		= nr linii
		/slowo    szukanie
		h help
less		jak more ale wiecej możliwości 2f 2 ekrany do przodu
							 2b 2 ekrany do tyłu
							 20p  przeskok do 20% 
							 100g przeskok do 100 linii

cmp ./passwd1 ./passwd2  -porównywanie plików zmieniliśmy w pliku operator wywalilismy x i id na 0 (roota) 
wynik 
passwd1 passwd2 differ: byte 350, line 10

nl passwd2 | head -n 15		ponumerowaliśmy linie i wyświetliliśmy potokiem 15 pierwszych lini pliku
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
 *  10  operator::0:0:operator:/root:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
    14  dbus:x:81:81:System Message Bus:/:/usr/sbin/nologin
    15  apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

diff passwd1 passwd2 	lepsze porówywanie
10c10
< operator:x:11:0:operator:/root:/sbin/nologin
---
> operator::0:0:operator:/root:/sbin/nologin

diff -q     -zwraca tylko czy się róznią
diff -y     -wyświetla obok siebie dwa pliki i przy linii gdzie jest róznica stawiana jest pionowa kreska

$ZMIENNE='abc'
echo "jakiś tekst $ZMIENNA"     	wyświetli: jakiś tekst abc
echo 'jakiś tekst $ZMIENNA'		wyświetli: jakiś tekst $ZMIENNA
echo "jakiś tekst $ZMIENNA \$ZMIENNA" 	wyświetli: jakiś tekst abc $ZMIENNA
echo -e "katalog\t\tname\tSize"		wyświetla tabulatory musi być przełacznik -e
katalog         name    Size
echo -e "Katalog\nName\nSize"		znaki nowej linii \n   (mozna użyć jeszcze \a wtedy terminal wyda dźwięk)
Katalog
Name
Size

Więcej w  video 71 (7:04)

read -p "Enter directory name: " CAT1 CAT2 CAT3     po wykonaniu wpisujemy zmienne Enter directory name: /var /lib / tmp
						     w wyniku po wypisamiu echo:  echo $CAT1 $CAT2 $CAT3
						     mamy /var /lib / tmp

tty 				info o terminalu
mesg				info czy można przyjmować wiadomosci od innch userów
mesg n				wyłączenie przyjmowania wiadomości
write nazwa_uzytkownika		zaczynamy pisać do użytownika kończymy [CTRL+D]
sudo wall "jakas wiadomosc"     wyświetli się wszystkim zalogowanym użytkownikom 

operacje na dysku
df -h				wyświetla wszystkie file systemy -h w sposób przejrzysty w MB i GB
df -h /home			tylko /home
df -h .				wyświetla file system w którym się obecnie znajdujemy
df -i 				wyświetla inody węzły

du -sh .			bez -s wyśwltla zajetość katalogu z podkatalogami
du -sh . 2>/dev/null		skierowianie błędów do /dev/null żeby ich nie wyświetlać
				0 standardowy input
				1 standardowy output
				2 standardowy ouput błędów