Shells in the Environment
Zmienne shell'a to to samo co zmienne środowiskowe. Wyświetlić ustawienia zmiennych można przy pomocy polecenia env (nie wszystkich zmiennych), żeby sprawdzić że shell jest przypisany do ciebie możesz edytować plik /etc/passwd
gdm:x:42:42::/var/gdm:/sbin/nologin sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin nonus25:x:500:500:Augustyn Chmiel:/home/nonus25:/bin/bash vboxadd:x:103:1::/var/run/vboxadd:/bin/false
W moim przypadku widać to w linijce zaczynającej się od nonus25. Zmienne profilowe przetrzymywane są w pliku /etc/profile, oczywiście to wszystko w zależności jakiego systemu używamy, zmienne te mogą również odnosić się do plików w /etc/profile.d/ jak i również do /etc/profile.d/. Jeżeli szukamy zmiennych dokładnie tyczących się danego użytkownika to każde konto zawiera pliki w katalogu domowym danego użytkownika i są to .bashrc, .bash_profile i .profile. Aby wyświetlić zmienna odpowiadającą za komend prompt $PS1 należy wywołać ja bezpośrednio w linii komend.
[nonus25@localhost ~]$ echo $PS1 [\u@\h \W]\$ [nonus25@localhost ~]$ echo $PS2 > [nonus25@localhost ~]$ echo $PS4 +
Następną zmienna którą trzeba tak edytować jest np. $PAGER odpowiada ona za ustawienie domyślnego edytora tekstu. Zmienne ta jest nie zawsze ustawiona, więc pokaże poniżej jak ustawić taką zmienna przy pomocy komend.
[nonus25@localhost ~]$ echo $PAGER [nonus25@localhost ~]$ export PAGER=less [nonus25@localhost ~]$ echo $PAGER less [nonus25@localhost ~]$ unset PAGER [nonus25@localhost ~]$ echo $PAGER
Jeżeli używamy innego środowiska niż bash do ustawienia zmienne posłuży nam komenda set. W przykładzie widzimy nadanie wartości zmiennej a później odwołanie tego poprzez komendę unset.
Dots and the PATH
Zacznę od kropek,
.- aktualna ścieżka..- ścieżka poziom wyżej
[nonus25@localhost ~]$ ls . Desktop [nonus25@localhost ~]$ ls .. nonus25 [nonus25@localhost ~]$ ls ../.. bin dev home lost+found misc net proc sbin srv tmp var boot etc lib media mnt opt root selinux sys usr
To tyle by mówić o kropkach w systemie Linux, następna do omówienia rzecz to zmienna PATH. Ta zmienna daje nam prawo do uruchomienia programów bez podawania ścieżki do nich o ile ścieżki te są wy listowane w tej zmiennej, ścieżki rozdziela się przy pomocy :, aby sprawdzić jakie ścieżki zawarte są w zmiennej należy wywołać komendę echo $PATH, znak dolara konieczny przed zmienna.
[nonus25@localhost ~]$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/sbin
History and Command Completion
Aby ułatwić życie administratorom w systemie są zapisywane komendy które wykonywaliśmy, aby je przejrzeć należy wyświetlić plik znajdujący się w HOME .bash_history lub też wyświetlić je za pomocą komendy history, różnica miedzy plikiem a komendą polega na tym, że komenda wyświetla aktualne polecenia wykonane w danej sesji, a do pliku zapisywane są komendy jakie wykonaliśmy podczas bieżącej sesji gdy się wylogowujemy z systemu. Maksymalną ilość przechowywanych komend możemy sprawdzić typując echo $HISTSIZE, przeważnie jest ustawiony na 1000 komend.
[nonus25@localhost ~]$ echo $HISTSIZE
1000
[nonus25@localhost ~]$ history
1 pwd
2 su
3 pwd
4 whoami
5 clear
6 sudo su
7 su
8 clear
9 lspci
10 dmesg
11 lspci
12 lsusb
Teraz każda kżda komenda wyświetlona przy pomocy komendy history posiada numer. Więc jeśli chcemy odwołać się do jakieś komendy wystarczy, że podamy !3, lub też kilka pierwszych liter !w
[nonus25@localhost ~]$ !3 pwd /home/nonus25 [nonus25@localhost ~]$ !w whoami nonus25
Uzupełnienie do komendy, ścieżek czy tez zmiennych środowiskowych uzyskamy przy kliknięciu TAB jeśli jest więcej niż jedna podpowiedz drugie wciśnięcie klawisza spowoduje wyświetlenie ich wszystkich.
Basic Shell Commands
Na pierwszy ogień idą takie komendy jak man, pwd, exec i uname.
pwd- podaje nam bieżącą ścieżkę w której pracujemy. Również wyświetla zmienną środowiskowąPWD[nonus25@localhost ~]$ pwd /home/nonus25 [nonus25@localhost ~]$ env | grep PWD PWD=/home/nonus25 [nonus25@localhost ~]$ cd Desktop/ [nonus25@localhost Desktop]$ pwd /home/nonus25/Desktop [nonus25@localhost Desktop]$ env | grep PWD PWD=/home/nonus25/Desktop OLDPWD=/home/nonus25
man- wyświetla nam strony z opisem programu/komendy, strony organizowane są w kilku rozdziałach przeważnie.man -k termin- działa tak samo jak komendaapropos, czyli przeszukuje strony man w poszukiwaniu terminu.[nonus25@localhost ~]$ man -k email PhishTag [Mail::SpamAssassin::Plugin::PhishTag] (3pm) - SpamAssassin plugin for redirecting links in incoming emails mailpost (8) - feed an email message into a news group mailto.conf [mailto] (5) - configuration file for cups email notifier nautilus-sendto (1) - convenience application to send a file via email or instant messenger news2mail (8) - a channel script to gateway news into email spamassassin (1) - extensible email filter used to identify spam spamassassin (rpm) - Spam filter for email which can be invoked from mail delivery agents. [nonus25@localhost ~]$ apropos email PhishTag [Mail::SpamAssassin::Plugin::PhishTag] (3pm) - SpamAssassin plugin for redirecting links in incoming emails mailpost (8) - feed an email message into a news group mailto.conf [mailto] (5) - configuration file for cups email notifier nautilus-sendto (1) - convenience application to send a file via email or instant messenger news2mail (8) - a channel script to gateway news into email spamassassin (1) - extensible email filter used to identify spam spamassassin (rpm) - Spam filter for email which can be invoked from mail delivery agents. [nonus25@localhost ~]$
man -f komenda- wyświetli wszystkie powiązane man strony.[nonus25@localhost ~]$ man -f man man (1) - format and display the on-line manual pages man (1p) - display system documentation man (7) - macros to format man pages man (rpm) - A set of documentation tools: man, apropos and whatis. man-pages (rpm) - Man (manual) pages from the Linux Documentation Project. man-pages-overrides (rpm) - Complementary and updated manual pages man.config [man] (5) - configuration data for man
man 5 komenda- czyta 5 stronę ze stron man.[nonus25@localhost ~]$ man 7 man MAN(7) Linux Programmer’s Manual MAN(7) NAME man - macros to format man pages SYNOPSIS groff -Tascii -man file ... groff -Tps -man file ... man [section] title DESCRIPTION This manual page explains the groff tmac.an macro package (often called the man macro package) and related conventions for creating manual (man) pages. This macro package should be used by developers when writing or porting man pages for Linux. It is fairly compatible with other versions of this macro package, so porting man pages should not be a major problem (exceptions include the NET-2 BSD release, which uses a totally different macro package called mdoc; see mdoc(7)). Note that NET-2 BSD mdoc man pages can be used with groff simply by specifying the -mdoc option instead of the -man option. Using the
uname- podaje info o systemieuname -a- podaje wszystkie informacje[nonus25@localhost ~]$ uname -a Linux localhost.localdomain 2.6.18-274.17.1.el5.centos.plus #1 SMP Wed Jan 11 10:58:19 EST 2012 i686 i686 i386 GNU/Linux
uname -s- nazwę kernel'a, -s, jest domyślnym przełącznikiem dla tej komendy[nonus25@localhost ~]$ uname -s Linux [nonus25@localhost ~]$ uname Linux
uname -npodaje nazwę hosta,[nonus25@localhost ~]$ uname -n localhost.localdomain
uname -r- podaje wersje jądra[nonus25@localhost ~]$ uname -r 2.6.18-274.17.1.el5.centos.plus
uname -vpodaje datę instalacji jądra[nonus25@localhost ~]$ uname -v #1 SMP Wed Jan 11 10:58:19 EST 2012
uname -ilubuname -p- podaje architekturę platformy, podaje architekturę procesora[nonus25@localhost ~]$ uname -i i386 [nonus25@localhost ~]$ uname -p i686
uname -o- podaje nazwę systemu operacyjnego,[nonus25@localhost ~]$ uname -o GNU/Linux
exec- zastępuje powłokę, co mam na myśli, chyba będzie najlepiej pokazać na przykładzie:[nonus25@localhost ~]$ touch nonus25_{1..5}.txt [nonus25@localhost ~]$ ls . Desktop nonus25_2.txt nonus25_4.txt nonus25_1.txt nonus25_3.txt nonus25_5.txt [nonus25@localhost ~]$ find . -name 'non*' -exec rm {} \; [nonus25@localhost ~]$ ls . DesktopI małe wytłumaczenie co tu się stało, utworzyłem pięć plików nonus25_(1-5).txt, pokazałem zawartość bieżącej ścieżki, a następnie wyszukałem wszystkie pliki zaczynające się na nazwę non, i oddzielnie dla każdego znaleźnego pliku wtrąciłem komendę rm, która to usunęła te pliki, co pokazuje ostatnia wykonana komenda.
Wildcards - Globs - and Search Commands
Więc tak, komenda ls aa* poda nam wszystkie nazwy znajdujące się w katalogu i zaczynające się na aa włączając w to także nazwę aa, zaś wzorzec ls aa? wy listuje nam wszystkie nazwy zawierające 3 znaki. Następnym wzorcem jaki możemy użyć są klamry, np. przy tworzeniu jakiejś ilości plików touch doc{0..9}{0..9}.txt polecenie to będzie również działać z literami, {a..z}, {A..Z}. Możemy również używać nawiasów kwadratowych które określają jakiś zakres np. jeśli chcemy wyszukać ileś plików zawierających liczby od 1 do 3 w nazwie zbudujemy takie zapytanie, ls doc[1-3]?.txt lub ls doc[1-3][1-3].txt, również możemy użyć wykrzyknika który powoduje negacje danego wzorca np. ls doc[!1-3][1-3].txt wy listuje wszystkie pliki oprócz tych plików które w nazwie będą zawierały pierwszą liczbę od 1 do 3. Następnymi komendami które pomagają wyszukiwaniu czegoś są locate, komenda ta przeszukuje bazę danych lokalnych plików, baza danych jest uaktualniana poprzez skrypt /etc/corn.daily, baza ta zawiera informację o wszystkich zainstalowanych pakietach i bazuje ona na slocate lub mlocate. Inną komendą pomagającą w przeszukiwaniu jest komenda find i umożliwia ona przeszukiwanie w czasie rzeczywistym, np. find . -name '*.png' wyszuka wszystkie obrazki w bieżącej ścieżce.
File and Directory Commands
Na początek komendy touch i ls
touch filename- tworzy nowy plik o podanej nazwie,[nonus25@localhost ~]$ touch nonus25_{1..5}.txt [nonus25@localhost ~]$ ls . Desktop nonus25_2.txt nonus25_4.txt nonus25_1.txt nonus25_3.txt nonus25_5.txtls- wy listuje pliki w bieżącej ścieżce,[nonus25@localhost ~]$ ls Desktop nonus25_2.txt nonus25_4.txt nonus25_1.txt nonus25_3.txt nonus25_5.txt
ls -awy listuje również pliki ukryte, zaczynające się od kropki,[nonus25@localhost ~]$ ls -a . .gnome nonus25_4.txt .. .gnome2 nonus25_5.txt .bash_history .gnome2_private .recently-used.xbel .bash_logout .gstreamer-0.10 .redhat .bash_profile .gtkrc-1.2-gnome2 .themes .bashrc .ICEauthority .thumbnails .config .icons .Trash Desktop .metacity .vboxclient-clipboard.pid .dmrc .mozilla .vboxclient-display.pid .eggcups .nautilus .vboxclient-seamless.pid .esd_auth nonus25_1.txt .xsession-errors .gconf nonus25_2.txt .gconfd nonus25_3.txt
ls -i- czyta numery i-węzłów plików[nonus25@localhost ~]$ ls -i 1083873 Desktop 1085007 nonus25_2.txt 1085009 nonus25_4.txt 1084998 nonus25_1.txt 1085008 nonus25_3.txt 1085010 nonus25_5.txt
ls -t- wyświetla listę plików bazującą na czasie modyfikacji[nonus25@localhost ~]$ ls -t nonus25_1.txt nonus25_3.txt nonus25_5.txt nonus25_2.txt nonus25_4.txt Desktop
ls -r- odwraca kolejność wyszukiwania plików[nonus25@localhost ~]$ ls -r nonus25_5.txt nonus25_3.txt nonus25_1.txt nonus25_4.txt nonus25_2.txt Desktop
ls -l- wyświetla listę w długim formacie, format zawiera: typ, uprawnienia, rozmiar, datę ostatniej modyfikacji i nazwę pliku.[nonus25@localhost ~]$ ls -l total 28 drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_1.txt -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_2.txt -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_3.txt -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_4.txt -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 06:42 nonus25_5.txt
ls -F- dodaje symbole plików[nonus25@localhost ~]$ ls -F /etc/ audisp/ jvm-commmon/ rc.d/ audit/ jwhois.conf rc.local@ autofs_ldap_auth.conf kdump.conf rc.news* auto.master krb5.conf rc.sysinit@ auto.misc ldap.conf readahead.d/ auto.net* ld.so.cache reader.conf auto.smb* ld.so.conf reader.conf.d/ avahi/ ld.so.conf.d/ redhat-lsb/ bashrc lftp.conf redhat-release blkid/ libaudit.conf request-key.conf bluetooth/ libuser.conf resolv.conf bonobo-activation/ libvirt/ resolv.conf.predhclient capi.conf localtime rmt@ cdrecord.conf login.defs rndc.key@
widzimy tu dodane symbole więc:*do plików wykonywalnych/do folderów@do symbolicznych linków=do gniazd (sockets)|do strumieni (pipes)
file *- listuje pliki z krótkim opisem[nonus25@localhost ~]$ file * Desktop: directory link.txt: empty non.bin: empty non.deb: empty nonus25_1.txt: ASCII text nonus25_2.txt: empty nonus25_3.txt: empty nonus25_4.txt: empty nonus25_5.txt: empty
Teraz przejdę do poleceń takich jak cp, mv, rm
cp file1 file2- kopiuje zawartość pliku 1 i nadpisuje zawartość pliku 2[nonus25@localhost ~]$ cp nonus25_1.txt nonus25_5.txt [nonus25@localhost ~]$ file * Desktop: directory link.txt: ASCII text non.bin: empty non.deb: empty nonus25_1.txt: ASCII text nonus25_2.txt: empty nonus25_3.txt: empty nonus25_4.txt: empty nonus25_5.txt: ASCII text
cp -r- kopiuje rekurencyjniecp -a- kopiuje rekurencyjnie z zachowaniem linków, własności, dat
mv- podobne do poleceniacpz tym że usuwa oryginalny plik[nonus25@localhost ~]$ ls -l total 56 drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 link.txt -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 07:12 non.bin -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_1.txt -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:48 nonus25_2.txt -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_3.txt -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 07:12 nonus25_4.txt -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 nonus25_5.txt
rmusuwa dane pliki[nonus25@localhost ~]$ ls -l total 52 drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 link.txt -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_1.txt -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:48 nonus25_2.txt -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:45 nonus25_3.txt -rw-rw-r-- 1 nonus25 nonus25 0 Feb 8 07:12 nonus25_4.txt -rw-rw-r-- 2 nonus25 nonus25 23 Feb 8 07:46 nonus25_5.txt
rm -r- usuwa pliki i katalogi rekurencyjnierm -rf- usuwa pliki rekurencyjnie i siłoworm -rf /path/to/file- ostrożnie z tym poleceniem
Komendy odpowiedzialne za zarządzanie katalogami mkdir, rmdir
mkdir dirtworzy nowy katalog[nonus25@localhost ~]$ mkdir dir1 [nonus25@localhost ~]$ ls -l total 24 drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop drwxrwxr-x 2 nonus25 nonus25 4096 Feb 8 08:18 dir1 -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:46 link.txt
mkdir -p path/to/dir- tworzy całą strukturę katalogów
rmdir dir- usuwa katalog jeśli katalog jest pusty[nonus25@localhost ~]$ rmdir dir1/ [nonus25@localhost ~]$ ls -l total 16 drwxr-xr-x 2 nonus25 nonus25 4096 Feb 5 04:16 Desktop -rw-rw-r-- 1 nonus25 nonus25 23 Feb 8 07:46 link.txt
rmdir -p path/to/dir- usuwa cała strukturę katalogów jeśli katalogi są puste.
Archives and Compression
Jednym z głównych narzędzi archiwizujących pod Linux'em jest tar. Program ten tworzy jak i rozpakowuje
tar czf backupmail.tar.gz .evolution/c- tworzy nowe archiwumz- kompresuje algorytmem gzipf- używa nazwy która następuje
tar cf backupmail.tar .evolution/- tworzy nie skompresowane archiwum tarc- tworzy nowe archiwumf- używa nazwy która następuje
gzip backupmail.tar- utworzone wcześniej nie skompresowane archiwum możemy skompresować w ten sposób, efektem tego będzie dodanie nowego rozszerzenia do pliku .gz. Plik ten będziemy mogli rozpakować przy pomocygunziplubgzip -d.bzip2 backupmail.tar- utworzone wcześniej nie skompresowane archiwum możemy skompresować też w inny sposób, efektem tego będzie dodanie nowego rozszerzenia do pliku .bz2. Plik ten będziemy mogli rozpakować przy pomocybunzip2lubbzip2 -d. Takżetar jkompresuje pliki dobzip2cpiow dosłownym znaczeniu kopia wejścia, program również odpowiada za tworzenie archiwów.find / -name *.doc | cpio -o > docfiles- więc skrypt zaczyna szukać wszystkich plików z rozszerzeniem .doc zaczynając od root'a, następnie przekazuje każdy znaleziony plik do drugiej komendy gdzie tworzone jest archiwum.cpio -i < docfilesrozpakowanie archiwum utworzonego powyżej.- odnosi się także do archiwów utworzonych za pomocą
rpm2cpio
dd if=/dev/hda1 of=/dev/hdb1backup możemy również utworzyć korzystając z narzędziadd, w pierwszej części komendy podajemy wejście partycji if=, zaś w drugiej części podajemy partycje wyjścia of=dd if=/dev/hda of=/mbr.bk bs=512 count=1- poleceniem tym jesteśmy w stanie zrobić backup naszego MBRdd if=/mbr.bk of=/dev/hda bs=512 count=1- poleceniem tym przywracamy wcześniej utworzoną kopie zapasową.
Basic Data Redirection
Aby przekierować strumień w Linux'ie używamy komend >, 1>, 2>, <, itp.. Np. ls . > filename przekieruje nam strumień do pliku o nazwie filename, komenda > i 1> wykonują te samo polecenie, czyli przekierują strumień do pliku. Następna komenda to komenda która spowoduje dopisanie jakiś informacji, danych do pliku ls . >> filename. Zaś jeśli chcemy przekierować strumień błędów używamy polecenia ls nodirectory 2> errorfile, gdzie za każdym razem tworzymy nowy plik lub jak to woli nadpisujemy dane zawarte w tym że pliku. Aby dopisać dane o błędach do pliku nalęży użyć podobnej składni jak powyżej czyli ls nodirectory 2>> errorfile. To były polecenia aby przekierować output naszych strumieni, a żeby przekierować input należy użyć polecenia database < data.
Tees - Pipes - Redirection
Czasami zachodzi potrzeba przekazania wyjścia na wejście innej komendy w tym celu posługujemy się poleceniem |, lub ||. Oczywiście najlepiej to widać na przykładzie rpm -qa | grep system, komenda rpm -qa zwraca nam informacje na temat zainstalowanych pakietów w systemie, teraz druga komenda filtruje czy na wejściu pokazał się taki wzorzec jakiego poszukiwaliśmy, jeśli tak jest on wyświetlany na wyjściu. Innym przypadkiem może być np. jeśli chcemy przekierować dane i umieścić je zarazem w pliku, możemy tego dokonać za pomocą komendy tee, a oto przykład ls . | tee filename, polecenie to wyświetli nam plik i zapisze dane do pliku. Następną komendą używaną przy przekierowaniach jest komenda xargs, a tu przykład jej użycia ls *.png | xargs rm. Gdzie komenda xargs pobiera całą listę plików a następnie przekazuje ją do komendy rm, która to usuwa wszystkie te pliki.

Brak komentarzy:
Prześlij komentarz