Bit „s”
O bicie „s” wspomniano przy okazji omawiania praw dostępu do plików i katalogów (lab. 2 i 3). Oznacza on, że identyfikator użytkownika jest ustawiany dla procesu w czasie jego wykonywania. Poniżej znajduje się charakterystyczny przykład wykorzystania bitu „s” w prawach dostępu.
> ls -al
/bin/passwd -r-sr-xr-x 1 root security 48394 May
18 1994 /bin/passwd > ls -al
/etc/passwd -rw-r--r-- 1 root system 37618 Nov
23 14:38 /etc/passwd |
Właścicielem procesu, który powstaje po uruchomieniu programu passwd w katalogu bin staje się użytkownik, proces działa na prawach roota i może edytować plik /etc/passwd.
System plików
Polecenia
df — polecenie
służące do wyświetlania informacji na temat zainstalowanych systemów plikowych.
Bez żadnych argumentów wyświetla informacje o wolnym miejscu na wszystkich
zainstalowanych systemach plikowych. Z argumentem w postaci katalogu (lub
pliku) — wyświetla informacje o systemie plikowym, na którym istnieje dany
katalog.
> df Filesystem Total KB free %used iused
%iused Mounted on /dev/hd4 16384 3460 78% 996
24% / /dev/hd9var 53248 25056 52% 1428
10% /var /dev/hd2 651264 6924 98% 27347
16% /usr /dev/hd3 20480 19604 4% 29
0% /tmp /dev/hd1 233472 62284 73% 15755
26% /home /dev/lv02 405504 9448 97% 8437
8% /decusr /dev/lv03 520192 196772 62% 12630
9% /usr/oracle7 orion:/home3 495616
114692 76% -
- /tmp_mnt/remote/home3 orion:/homec 446464 7436 98% -
- /tmp_mnt/remote/homec madzia:/export/home 963662
246496 74% -
- /tmp_mnt/remote/homem venus:/users/homev 1923695
506652 73% -
- /tmp_mnt/remote/homev > mkdir
a > df a Filesystem Total KB free %used iused
%iused Mounted on orion:/home3 495616
114688 76% -
- /tmp_mnt/remote/home3 |
Opcje polecenia df — proszę poszukać w man df.
mount — polecenie pozwalające na korzystanie z systemu plików. Wykorzystanie: mount system_plików katalog. Po zamontowaniu systemu jego katalog główny ma nazwę identyczną z katalogiem, do którego zamontowano system plików. W przykładzie poniżej jest to np. system plików na urządzeniu /dev/hd3, noszący w systemie nazwę /tmp. Polecenie to jest znane studentom, którzy mają w domu zainstalowanego Linux’a i korzystają z CD-ROM lub stacji dysków. Bez żadnych argumentów podaje listę zamontowanych systemów plikowych.
> mount node
mounted mounted
over vfs date options --------
--------------- --------------- ------ ------------ --------------- /dev/hd4 /
jfs Nov 12 09:07 rw,log=/dev/hd8 /dev/hd9var /var jfs Nov 12
09:07 rw,log=/dev/hd8 /dev/hd2 /usr
jfs Nov 12 09:07
rw,log=/dev/hd8 /dev/hd3 /tmp jfs Nov 12 09:07 rw,log=/dev/hd8 /dev/hd1
/home jfs Nov 12 09:09 rw,log=/dev/hd8 /dev/lv02 /decusr
jfs Nov 12 09:09
rw,log=/dev/hd8 /dev/lv03 /usr/oracle7
jfs Nov 12 09:09
rw,log=/dev/hd8 saturn (pid12524@/remote) /remote nfs Nov 12 09:12 ro,ignore orion /home3 /tmp_mnt/remote/home3 nfs Nov 19 08:12 rw venus /users/homev /tmp_mnt/remote/homev nfs
Nov 24 12:17 rw |
umount — (unmount) „odmontowuje” system plików zainstalowany przy pomocy polecenia mount.
du — podaje wykorzystanie dysku. Bez żadnych argumentów podaje w blokach (tj. w jednostkach po 512 bajtów), ile miejsca zajmują podkatalogi w bieżącym katalogu. Flagi: -a wyświetla zajętość dla każdego pliku z osobna; -k oblicza zajętość w kB; -s wyświetla łączną zajętość dla wszystkich podanych plików i katalogów.
> du 8 ./2katalog/3katalog/Rozne 16 ./2katalog/3katalog 24 ./2katalog 24 ./kolokwia 224 . > cd 2katalog/ > ls 3katalog a b c > du -a 0 ./a 0 ./b 0 ./c 8 ./3katalog/Rozne 0 ./3katalog/.en 0 ./3katalog/.pro 16 ./3katalog 24 . > du -k 4 ./3katalog/Rozne 8 ./3katalog 12 . |
ls -i — „zwykłe ls”, wyświetla numer i-node dla każdego pliku.
od — wyświetla zawartość pliku po kolei w bajtach lub słowach. Bez żadnych flag: zawartość pliku wyświetlana jest w postaci ósemkowej w słowach dwubajtowych. Polecenie to może być wykorzystywane do przeglądania plików, które zawierają znaki, które nie mogą być wypisane na ekranie. Użyteczne flagi: -c wyświetla każdy bajt jako znak ASCII; -d wyświetla słowa jako liczby dziesiętne; -x wyświetla słowa jako liczby szesnastkowe. Przykłady:
> echo 1 > przyklad > od przyklad 0000000 030412 0000002 > echo 12 > przyklad > od przyklad 0000000 030462 005000 0000003 > od -c przyklad 0000000 1 2 \n 0000003 |
ln — przywiązuje (przypisuje) dodatkową nazwę do pliku. System zawsze identyfikuje pliki przez numery i-node, ale przez użytkownika plik jest identyfikowany z nazwą. W momencie tworzenia pliku jego nazwa jest przypisywana do numeru i-node. Polecenie ln pozwala na dowiązanie do tego samego i-node dodatkowe nazwy. Polecenie to posiada dwie flagi: -s tworzony jest link symboliczny o tej samej nazwie (jego nazwa zawiera ścieżkę do pliku, do którego odnosi się link); -f nie zadaje pytań. Polecenie (i korzystanie z linków) to jest użyteczne w przypadku plików o długich nazwach.
> ls -i Unix.Lab/ 51337 1_sys_uzyt 43009 pro.c 43058 2katalog 43008 prog.c 43013 cmd 51272 prog2 51259 cmd2 51269 przyklad 51267 czy_wynik.skr 51268 przyklad.skr 7171 kolokwia 51271 przyklad2.txt 43053 nazwa.pliku.txt 51336 status 51260 nohup.out 51270 system.uzytkownik.c 51261
p_ftp 51273 syuz 51340
petla 43015 val 51338
petla.c 51266 val1 > ln
Unix.Lab/pro.c p > ls -i 51227
Unix.Lab 43012 bin 43009 p > ln -s
Unix.Lab/pro.c p > ls -al total 96 drwxr-sr-x 6 danda telecom 512 Nov
24 14:42 . drwxr-sr-x 45 root telecom 1024 Oct
09 10:34 .. -rwx------ 1 danda telecom 146 Nov
17 10:13 .cshrc -rwx------ 1 danda telecom 1 Nov
17 10:14 .login -rwx------ 1 danda telecom 116 Nov
24 14:23 .login.date -rwx------ 1 danda telecom 261 Oct
27 11:01 .profile -rw------- 1 root telecom 722 Nov
24 08:58 .sh_history drwx--S--- 2 danda telecom 512 Oct
27 13:03 .ssh -rwx------ 1 danda telecom 54 Oct
28 12:57 .whwht drwx--S--- 2 danda telecom 512 Nov 20 15:07 .zabezpieczenie drwx--S--- 4 danda telecom 512 Nov 24 13:57 Unix.Lab drwx--S--- 2 danda telecom 512 Nov 24 12:33 bin lrwxrwxrwx 1 danda telecom 14 Nov 24 14:42 p -> Unix.Lab/pro.c |
Zmienne
W shell’u sh i csh korzystanie ze zmiennych wygląda inaczej. Poniżej zaprezentowano definiowanie i wywoływanie zmiennej z w shell’u sh, która została następnie „wyeksportowana” do potomnego shell’a csh.
$ z=1 $ echo $z 1 $ export z $ csh % echo $z 1 |
W shell’u csh (i shell’ach pokrewnych) wywoływanie zmiennych wygląda podobnie, jak dla sh, natomiast ich definiowanie — jak w przykładzie poniżej:
% set zm=1 % echo $zm 1 |
Eksportowanie zmiennych w csh sprawia problemy. Najprostszy sposób ich ominięcia to:
% setenv zm 10 % sh $ echo $zm 10 |
Polecenie setenv, podobnie jak polecenie export nadaje definiowanej zmiennej charakter zmiennej środowiskowej, dziedziczonej przez wszystkie shell’e potomne.
Ale należy uważać — proszę zwrócić uwagę na przykład poniżej (początek — od shell’a csh):
% set zm=2 % setenv zm
4 % echo $zm 2 % sh $ echo $zm 4 |
Wszystkie zmienne środowiskowe mogą być wyświetlone za pomocą komendy env:
> sh $ z=1 $ export z $ env HOME=/home2/grupa/kowalski HOST=saturn HOSTTYPE=rs6000 LANG=En_US LOCPATH=/usr/lib/nls/loc LOGNAME=kowalski MACHTYPE=rs6000 MAIL=/usr/spool/mail/kowalski MAILMSG=[YOU
HAVE MAIL] MANPATH=/usr/share/man:/usr/local/man NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/prime/%N ODMDIR=/etc/objrepos OSTYPE=aix PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/home2/grupa/kowalski/bin:/usr/bin/X11:/sbin:/ho me2/grupa/kowalski/:.= PWD=/home2/grupa/kowalski REMOTEHOST=pckowal.student.agh.edu.pl SHELL=/bin/tcsh SHLVL=1 TERM=vt100 TZ=NFT-1DFT USER=kowalski VENDOR=ibm z=1 $ |
% setenv z
1 % env TERM=vt100 SHELL=/bin/tcsh HOME=/home2/grupa/kowalski LOGNAME=danda USER=danda PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/home2/grupa/kowalski/bin:/usr/bin/X11:/sbin:/home2/grupa/kowalski:.= TZ=NFT-1DFT LOCPATH=/usr/lib/nls/loc NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/prime/%N MANPATH=/usr/share/man:/usr/local/man ODMDIR=/etc/objrepos LANG=En_US HOSTTYPE=rs6000 VENDOR=ibm OSTYPE=aix MACHTYPE=rs6000 SHLVL=1 PWD=/home2/grupa/kowalski HOST=saturn REMOTEHOST=pckowal.student.agh.edu.pl MAIL=/usr/spool/mail/kowalski MAILMSG=[YOU
HAVE MAIL] z=1 % |
Usuwanie zmiennych może być przeprowadzone za pomocą polecenia unset:
> sh $ z=1 $ echo $z 1 $ unset z $ echo $z |
Wyeksportowanej zmiennej nie można usunąć z shell’a potomnego:
> sh $ z=zmienna $ export z $ csh % echo $z zmienna % unset z % echo $z zmienna % exit % $ echo $z zmienna $ |