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