Jeżeli chciałbyś nauczyć się programować i poszukujesz do tego odpowiedniego języka to polecam newsletter dla początkujących programistów JAVA.
W przypadku gdy prowadzisz bloga lub stronę internetową i chcesz na tym zarobić polecam program partnerski od Silence on the Wire. Napisałem o tym artykuł dlatego kliknij tutaj i przeczytaj. Nie tracisz nic, prócz chwili czasu, a zyskać możesz naprawdę dużo!
Rozdział 9: Edycja oraz wyświetlanie zawartości plików
Edytor nano
W tym rozdziale zajmiemy się edycją tekstu przy pomocy edytora nano. Jeżeli znasz edytor vi lub inny to korzystaj z niego.
Aby edytować plik należy wpisać polecenie nano "nazwa pliku" pojawić się powinno okno jak poniżej:
kali@kali:~$ nano "nazwa pliku"
W lewym górnym rogu, widnieje numer wersji naszego edytora. Trochę dalej w tej samej linii, na samym środku znajduje się nazwa pliku którą stworzyliśmy lub którą edytujemy. Spójrzmy teraz na sam dół. Widzimy skróty klawiszowe programu. Aby wywołać jedną z prezentowanych opcji należy wcisnąć i przytrzymać lewy przycisk ctrl + literę przypisaną wybranej opcji np. ctrl + o, która spowoduje nadpisanie/zapisanie danego pliku.
Bardzo istotną rzeczą jest nazwa pliku, którą wpisaliśmy w konsoli. Nazwy plików składające się z więcej niż jednego wyrazu muszą być ujęte w cudzysłowie. Nie ważne czy tworzymy nowy plik czy też chcemy edytować już istniejący. Aby móc cokolwiek zrobić z plikiem posiadającym nazwę składającą się z więcej niż jednego wyrazu musimy nazwę ująć w cudzysłowie.
W ramach treningu stwórzmy plik o nazwie dla testu:
kali@kali:~$ nano "dla testu"
w edytorze został użyty skrót klawiszowy ctrl+o aby zapisać plik na dysku oraz ctrl+x aby go zamknąć.
kali@kali:~$ ls
Desktop Documents Music Public Videos
'dla testu' Downloads Pictures Templates
kali@kali:~$
Polecenie cat
Czasami będziemy potrzebowali wyświetlić zawartość pliku bez potrzeby jego edycji. Takiej opcji nie oferuje nam edytor tekstu, ale do tego celu służy polecenie cat. Zobaczmy w konsoli:
kali@kali:~$ ls
Desktop Documents Music Public Videos
'dla testu' Downloads Pictures Templates
kali@kali:~$ nano 'dla testu'
W edytorze wpisujemy article-text Dla testu, wciskamy ctrl+o, enter by potwierdzić, ctrl+x
kali@kali:~$ cat 'dla testu'
Dla testu
kali@kali:~$ ^C
kali@kali:~$
Jak widać w powyższym przykładzie, zawartość pliku dla testu została wyświetlona w konsoli. Daje nam to możliwość wyświetlania plików o małej zawartości, chociaż i duże w ten sam sposób można potraktować. Nie jest to wygodne rozwiązanie dlatego warto zapamiętać by starać się używać polecenia przy plikach o małej zawartości tekstu.
Opcje polecenia cat
Nie jest to jednak jedyna możliwość polecenia cat. Posiada ono szereg opcji które zapisałem poniżej:
-b – numeruje wiersze pliku które nie są puste;
-n – numeruje wszystkie wiersze niezależnie czy coś w nich jest napisane czy też nie;
-s - jeżeli w pliku występują puste wiersze (np. zrobione przy pomocy przycisku enter na klawiaturze) to opcja łączy je w jeden pusty;
-v – nie wyświetla znaków wiersza Tab oraz znaków zmiany wiersza;
-E – dodaje znak $ na końcu każdego wiersza;
-T – zamienia tabulatory na ^|;
-e – połączone opcje -v i -E;
-t – połączone opcje -v i -T;
-A – połączone opcje -v, -E i -T;
Inne zastosowanie polecenia cat
Poznane polecenie cat nie służy jedynie wyświetlaniu zawartości plików, może także je tworzyć jak również wpisywać, dopisywać oraz nadpisywać dane. Dokonujemy tego przy pomocy > (nawiasów ostrych) czyli tak zwanemu przekierowaniu danych z polecenia do pliku. Zobrazowałem to na przykładzie poniżej:
kali@kali:~$ cat > nowy
Tworzymy nowy plik
kali@kali:~$ cat nowy
Tworzymy nowy plik
kali@kali:~$ cat >> nowy
dodajemy nowy tekst
kali@kali:~$ cat nowy
Tworzymy nowy plik
dodajemy nowy tekst
kali@kali:~$ cat > nowy
nadpisalismy wszystko
kali@kali:~$ cat nowy
nadpisalismy wszystko
kali@kali:~$
Po każdym przekazaniu danych skorzystam z polecenia cat w jego pierwotnej formie w celu wyświetlenia zawartości pliku dlatego ten krok zostanie pominięty w opisie.
UWAGA! Wpisując polecenie cat z pojedynczym > lub podwójnym >> nawiasem ostrym chcąc zapisać wprowadzony tekst oraz powrócić do linii poleceń należy skorzystać z kombinacji klawiszy CTRL+D.
W pierwszej linii przykładu wykorzystujemy > pojedynczy ostry nawias czyli przekazujemy dane z polecenia cat do pliku tworząc go.
Następnie korzystając z podwójnych nawiasów ostrych >> do już stworzonego pliku, do jego końca dodajemy nowy tekst.
Korzystając ponownie z pojedynczego nawiasu ostrego > nadpisujemy całą zawartość pliku.
Nic skomplikowanego, a jednak w niektórych przypadkach przydaje się. Osobiście głównie wykorzystuje to polecenie w skryptach. Jest dla mnie wygodne jeżeli chodzi o magazynowanie na przykład logów.
Polecenie head
Często spotkamy się z sytuacją gdzie w pliku będzie znajdowało się bardzo dużo tekstu, a my potrzebujemy wyświetlić jego kilka pierwszych linijek. Do tego przyda się polecenie head. Nie jest ono bardzo skomplikowane dlatego spójrzmy od razu na przykład poniżej:
kali@kali:~$ cd /var/log
kali@kali:/var/log$ nano alternatives.log
kali@kali:/var/log$ head alternatives.log
update-alternatives 2020-07-27 17:10:12: run with --quiet --install /usr/bin/awk awk /usr/bin/mawk 5 --slave /usr/share/man/man1/awk.1.gz awk.1.gz /usr/share/man/man1/mawk.1.gz --slave /usr/bin/nawk nawk /usr/bin/mawk --slave /usr/share/man/man1/nawk.1.gz nawk.1.gz /usr/share/man/man1/mawk.1.gz
update-alternatives 2020-07-27 17:10:12: link group awk updated to point to /usr/bin/mawk
update-alternatives 2020-07-27 17:10:35: run with --quiet --install /usr/bin/awk awk /usr/bin/mawk 5 --slave /usr/share/man/man1/awk.1.gz awk.1.gz /usr/share/man/man1/mawk.1.gz --slave /usr/bin/nawk nawk /usr/bin/mawk --slave /usr/share/man/man1/nawk.1.gz nawk.1.gz /usr/share/man/man1/mawk.1.gz
update-alternatives 2020-07-27 17:10:35: run with --install /usr/share/man/man7/builtins.7.gz builtins.7.gz /usr/share/man/man7/bash-builtins.7.gz 10
update-alternatives 2020-07-27 17:10:35: link group builtins.7.gz updated to point to /usr/share/man/man7/bash-builtins.7.gz
update-alternatives 2020-07-27 17:10:35: run with --install /usr/sbin/rmt rmt /usr/sbin/rmt-tar 50 --slave /usr/share/man/man8/rmt.8.gz rmt.8.gz /usr/share/man/man8/rmt-tar.8.gz
update-alternatives 2020-07-27 17:10:35: link group rmt updated to point to /usr/sbin/rmt-tar
update-alternatives 2020-07-27 17:10:37: run with --install /usr/bin/pager pager /bin/more 50 --slave /usr/share/man/man1/pager.1.gz pager.1.gz /usr/share/man/man1/more.1.gz
update-alternatives 2020-07-27 17:10:37: link group pager updated to point to /bin/more
update-alternatives 2020-07-27 17:10:37: run with --remove pager /usr/bin/pg
kali@kali:/var/log$
Polecenie standardowo wyświetla 10 linijek z możliwością zmiany w jedną bądź drugą stronę.
Opcje polecenia head
Dwie dostępne opcje polecenia head przedstawiam poniżej:
-c „liczba” - jeżeli podstawimy zamiast słowa liczba np. 20 to wyświetli nam 20 bajtów pliku;
-n „liczba” - jeżeli podstawimy zamiast słowa liczbę 20 to wyświetli nam 20 pierwszych linijek pliku;
Polecenie tail
Odwrotnością poprzedniego polecenia jest tail. Działa ono na takiej samej zasadzie co head z tą różnicą, że wyświetla koniec pliku, a nie początek. Przykład uważam za zbędny, ale polecam zastąpić head z poprzedniego zadania na tail i spojrzeć na to co otrzymasz.
Opcje polecenia:
-c „liczba” - wyświetli końcowe np. 20 bajtów pliku;
-f – plik uruchomiony będzie prowadził coś w rodzaju sprawdzania zmian w nim. Lepiej to zrozumieć wypróbowując na jakimś pliku. (ctrl + c aby zakończyć);
-n „liczba” - wyświetla ilość końcowych wierszy np. 20 jeżeli zamiast „liczba” wpiszemy 20;
Polecenie more
Poznaliśmy już polecenia, dzięki którym przeczytamy początek i koniec tekstu, a co jeżeli zechcemy przeczytać cały artykuł który jest bardzo długi? Jeżeli używasz środowiska graficznego to sprawę masz o wiele prostszą, bo możesz używać suwaków, ale w trybie tekstowym nie ma czegoś takiego.
Aby można było przeczytać plik o dużej zawartości tekstu należy użyć polecenia more. Wyświetli ono cały plik, ale nie od razu. Na początku pokaże część pliku który zmieści się na ekranie. Gdy skończysz czytanie i będziesz chciał przejść dalej to wystarczy, że wciśniesz spację lub enter na swojej klawiaturze.
Enter przesunie treść artykułu w dół o jedną linię, natomiast spacja zadziała podobnie jak przycisk Page Down, czyli o całą stronę. Popatrzmy teraz jak wygląda to w praktyce.
kali@kali:/var/log$ more alternatives.log
Zostanie wyświetlona zawartość całego pliku
kali@kali:/var/log$
Opcje polecenia more
Jak większość poleceń w Linuksie more posiada, kilka opcji które przestawiam poniżej:
-d – poniżej wyświetli komunikat: Press space to continue. „q” to quit co oznacza Wciśnij spacje aby kontynuować, „q” aby zakończyć. Jeżeli more zostanie uruchomione z -d nadal będzie działał enter;
-f – długie linie tekstu nie są zwijane;
-l - wyłącza pauzę na końcu każdej strony;
-p – blokuje przewijanie ekranu;
-s – robi z kilku pustych wierszy jeden;
-u – zabrania podkreśleń;
-liczba wierszy – pozwala na wyświetlenie dowolnej ilości wierszy;
nr. wiersza – rozpoczyna przeglądanie od wskazanego numeru wiersza;
Polecenie du
Niejednokrotnie zdarzy się lub też zdarzyło, że chcielibyśmy sprawdzić ile miejsca zajmuje dany katalog. Do w/w zadania posłuży polecenie du. Zanim przejdziemy do praktycznej części zapoznajmy się z dostępnymi opcjami tego polecenia:
-a – wyświetla rozmiar wszystkich plików dostępnych w katalogu;
-b – wyświetla rozmiar wszystkich plików dostępnych w katalogu w bajtach;
-c - pokazuje całkowite miejsce jakie zajmują foldery;
-k – wyświetla rozmiar w kilobajtach;
-l – bierze pod uwagę dowiązania twarde;
-s – podaje tylko i wyłącznie rozmiar wybranego katalogu;
-x – nie bierze pod uwagę katalogów które należą do innego systemu plików;
-D – znajduje dowiązania symboliczne i wyświetla je;
-L – brane pod uwagę są katalogi których dotyczy dane dowiązanie;
-S – nie zwraca uwagi na podkatalogi w wybranym katalogu;
Zajmijmy się teraz przykładem. Przejdźmy do katalogu home i sprawdźmy ile nasz katalog zajmuje, tak jak poniżej:
kali@kali:~$ cd /home
kali@kali:/home$ du -s kali
39876 kali
kali@kali:/home$
Użyłem polecenia du z opcją -s która powoduje wyświetlenie rozmiaru wskazanego katalogu. Gdybym użył polecenia bez -s pojawiłyby by się podkatalogi z ich rozmiarami. Jeżeli jesteś ciekaw jak to wygląda to pokombinuj trochę z poleceniem du.
Wyszukiwanie oraz zastępowanie danych w plikach
Wyszukiwać jak i otwierać pliki już potrafisz dlatego nadeszła pora nauczyć się ich modyfikacji. Do tego zadania posłuży polecenie sed. Spójrzmy na przykład:
kali@kali:~$ cat loginy.txt
root
boot
loot
hoot
msfadmin
RoOt
boot
root
kali@kali:~$sed s/root/ROOT/g loginy.txt > loginy2.txt
kali@kali:~$cat loginy2.txt
ROOT
boot
loot
hoot
msfadmin
RoOt
boot
ROOT
kali@kali:~$
Na samym początku wyświetlamy zawartość pliku loginy.txt. Zwróćmy szczególną uwagę, że dwa razy występuje słowo root oraz RoOt.
W dalszym kroku zamieniamy wszystkie wystąpienia słowa root na ROOT i zapisujemy w nowym pliku gdzie na samym końcu nazwy dodajemy liczbę 2.
Po wykonaniu polecenia wyświetlamy zawartość stworzonego pliku z zamienionymi wartościami. Zwróć uwagę, że nie zastąpiło słowa RoOt pomimo że oznacza ono to samo co root tylko jest pisane raz dużą raz małą literą. Dzieje się tak ponieważ system Linux rozpoznaje różnicę pomiędzy dużymi i małymi literami dlatego dla niego te dwie nazwy są inne. Ale to już wiesz.
Sposoby numerowania linii wyświetlonych danych z pliku
Bardzo pomocne jest wypisanie numerów przy każdej z linii pliku. Do tego celu posłuży polecenie nl. Pamiętaj, że druga litera polecenia to nie jest liczba 1 tylko litera l jak linia. Spójrzmy na poniższy przykład:
kali@kali:~$ nl hasla.txt
1 root
2 !root
3 Cisco
4 NeXT
5 QNX
6 admin
7 attack
8 ax400
9 bagabu
10 msfadmin
kali@kali:~$
Wypisaliśmy całą zawartość pliku numerując jego każdą linie. Dość pomocne, ale prawdziwa przydatność tkwi w połączeniu go z wcześniej poznanym poleceniem grep oraz potokiem. Oto przykład:
kali@kali:~$ nl /etc/passwd | grep kali
53 kali:x:1000:1000:Kali,,,:/home/kali:/usr/bin/zsh
kali@kali:~$
Przekazaliśmy ponumerowane dane z pliku /etc/passwd do polecenia grep gdzie jako słowo klucz podaliśmy kali. Otrzymaliśmy poszukiwane dane oraz numer linii w której znajduje się fraza.
Podsumowanie
Edycja plików przy pomocy konsoli po pewnym czasie okaże się bardzo istotną sprawą jeżeli chodzi o oprogramowanie z którego zamierzamy korzystać. Tak samo jak z poprzednim artykułem dotyczącym poleceń pwd, ls, cd, warto się w tym miejscu zatrzymać i dokładnie sprawdzić czy wszystko zrozumieliśmy. Ta umiejętność jest niezbędna ponieważ bardzo dużo danych przetwarzamy codziennie.
Jeżeli chciałbyś nauczyć się programować i poszukujesz do tego odpowiedniego języka to polecam newsletter dla początkujących programistów JAVA.
W przypadku gdy prowadzisz bloga lub stronę internetową i chcesz na tym zarobić polecam program partnerski od Silence on the Wire. Napisałem o tym artykuł dlatego kliknij tutaj i przeczytaj. Nie tracisz nic, prócz chwili czasu, a zyskać możesz naprawdę dużo!