
Linux: Wiersz poleceń – operacje na plikach i katalogach
Podstawowe operacje na plikach i katalogach z poziomu wiersza poleceń / terminala systemu Linux.
Tworzenie katalogów
mkdir
mkdir --help Składnia: mkdir [OPCJA]... KATALOG... Utworzenie KATALOGU/ÓW, jeżeli jeszcze nie istnieją. Argumenty obowiązkowe dla opcji długich obowiązują również dla krótkich. -m, --mode=UPRAWN ustawienie uprawnień (jak w chmod) -p, --parents bez błędu gdy istnieje, utworzenie całej ścieżki katalogów -v, --verbose wypisanie komunikatu o każdym utworzonym katalogu -Z ustawienie kontekstu bezpieczeństwa podanego pliku jako typu domyślnego
Przykładowo:
student@student:~/Pulpit$ dir student@student:~/Pulpit$ mkdir katalog1 student@student:~/Pulpit$ dir katalog1 student@student:~/Pulpit$ mkdir katalog2 katalog3 student@student:~/Pulpit$ dir katalog1 katalog2 katalog3 student@student:~/Pulpit$ mkdir katalog4/katalog5 mkdir: nie można utworzyć katalogu „katalog4/katalog5”: Nie ma takiego pliku ani katalogu student@student:~/Pulpit$ mkdir katalog4/katalog5 -p student@student:~/Pulpit$ dir katalog1 katalog2 katalog3 katalog4 student@student:~/Pulpit$ cd katalog4 student@student:~/Pulpit/katalog4$ dir katalog5 student@student:~/Pulpit/katalog4$ cd .. student@student:~/Pulpit$ ls -l razem 16 drwxrwxr-x 2 student student 4096 mar 13 10:37 katalog1 drwxrwxr-x 2 student student 4096 mar 13 10:37 katalog2 drwxrwxr-x 2 student student 4096 mar 13 10:37 katalog3 drwxrwxr-x 3 student student 4096 mar 13 10:38 katalog4 student@student:~/Pulpit$ mkdir --mode=700 katalog6 student@student:~/Pulpit$ ls -l razem 20 drwxrwxr-x 2 student student 4096 mar 13 10:37 katalog1 drwxrwxr-x 2 student student 4096 mar 13 10:37 katalog2 drwxrwxr-x 2 student student 4096 mar 13 10:37 katalog3 drwxrwxr-x 3 student student 4096 mar 13 10:38 katalog4 drwx------ 2 student student 4096 mar 13 10:39 katalog6
Tworzenie plików
touch
touch --help Składnia: touch [OPCJA]... PLIK... Uaktualnienie czasu ostatniego odczytu albo modyfikacji każdego PLIKU do bieżącego czasu. Jeżeli argument PLIK nie istnieje, jest tworzony jako pusty PLIK, chyba że podana jest opcja -c albo -h. PLIK o nazwie „-” jest traktowany specjalnie: touch ustawia czas pliku związanego ze standardowym wyjściem. Argumenty obowiązkowe dla opcji długich obowiązują również dla krótkich. -a zmiana tylko czasu dostępu -c, --no-create bez tworzenia nowych plików -d, --date=SPECYFIKACJA użycie SPECYFIKACJI zamiast bieżącego czasu -f (ignorowane) -h, --no-dereference operowanie na dowiązaniach symbolicznych zamiast na wskazywanych plikach (tylko dla systemów, które umieją zmienić właściciela dowiązania symbolicznego) -m zmiana tylko czasu modyfikacji -r, --reference=PLIK użycie czasu tego PLIKU zamiast czasu bieżącego -t CZAS użycie [[CC]YY]MMDDhhmm[.ss] zamiast bieżącego czasu --time=SŁOWO ustawienie czasu wg SŁOWA: access atime use (czas dostępu, to samo co -a), modify mtime (czas modyfikacji, to samo co -m) --help wyświetlenie tego opisu i zakończenie --version wyświetlenie informacji o wersji i zakończenie Należy zauważyć, że opcje -d i -t akceptują różne formaty daty/czasu.
Przykładowo:
student@student:~/Pulpit$ touch plik1 student@student:~/Pulpit$ touch plik2 plik3 student@student:~/Pulpit$ ls -l -rw-rw-r-- 1 student student 0 mar 13 10:50 plik1 -rw-rw-r-- 1 student student 0 mar 13 10:50 plik2 -rw-rw-r-- 1 student student 0 mar 13 10:50 plik3 student@student:~/Pulpit$ touch plik1 -d 20180219 student@student:~/Pulpit$ ls -l -rw-rw-r-- 1 student student 0 lut 19 00:00 plik1 -rw-rw-r-- 1 student student 0 mar 13 10:50 plik2 -rw-rw-r-- 1 student student 0 mar 13 10:50 plik3 student@student:~/Pulpit$ touch plik2 -t 201802011324 student@student:~/Pulpit$ ls -l -rw-rw-r-- 1 student student 0 lut 19 00:00 plik1 -rw-rw-r-- 1 student student 0 lut 1 13:24 plik2 -rw-rw-r-- 1 student student 0 mar 13 10:50 plik3 student@student:~/Pulpit$ touch plik* -t 201802011324 student@student:~/Pulpit$ ls -l -rw-rw-r-- 1 student student 0 lut 1 13:24 plik1 -rw-rw-r-- 1 student student 0 lut 1 13:24 plik2 -rw-rw-r-- 1 student student 0 lut 1 13:24 plik3
W ostatnim przykładzie użyłem symbolu * zastępującego dowolny ciąg znaków. Zmiana czasu utworzenia pliku nastąpiła więc dla wszystkich plików w obecnym katalogu, których nazwa rozpoczyna się od słowa plik.
Zmiana nazwy pliku
mv
mv --help Składnia: mv [OPCJA]... [-T] ŹRÓDŁO CEL albo: mv [OPCJA]... ŹRÓDŁO... KATALOG albo: mv [OPCJA]... -t KATALOG ŹRÓDŁO... Przemianowanie ŹRÓDŁA na CEL albo przeniesienie jednego lub wielu ŹRÓDEŁ do KATALOGU. Argumenty obowiązkowe dla opcji długich obowiązują również dla krótkich. --backup[=TRYB] zrobienie kopii zapasowej każdego istniejącego pliku docelowego -b jak --backup, ale bez podawania argumentu -f, --force bez pytania przed zamazaniem pliku -i, --interactive pytanie przed zamazaniem -n, --no-clobber bez nadpisywania istniejących plików --strip-trailing-slashes usunięcie końcowych ukośników z każdego argumentu ZRÓDŁOWEGO -S, --suffix=ROZSZERZ zmiana domyślnego rozszerzenia kopii zapasowej -t, --target-directory=KATALOG przeniesienie wszystkich argumentów ŹRÓDŁOWYCH do KATALOGU -T, --no-target-directory traktowanie CELU jak zwykłego pliku -u, --update przenoszenie tylko gdy ŹRÓDŁO jest nowsze od CELU albo nie ma CELU -v, --verbose wyjaśnianie co się dzieje -Z, --contex ustawienie domyślnego kontekstu bezpieczeństwa SELinux --help wyświetlenie tego opisu i zakończenie --version wyświetlenie informacji o wersji i zakończenie
Przykładowo:
student@student:~/Pulpit$ touch plik1 plik2 student@student:~/Pulpit$ dir plik1 plik2 student@student:~/Pulpit$ mv plik1 plik3 student@student:~/Pulpit$ dir plik2 plik3 student@student:~/Pulpit$ mkdir old student@student:~/Pulpit$ dir old plik2 plik3 student@student:~/Pulpit$ mv plik2 plik3 -t old student@student:~/Pulpit$ dir old student@student:~/Pulpit$ cd old student@student:~/Pulpit/old$ dir plik2 plik3
Usuwanie plików / katalogów
rm
rm --help Składnia: rm [OPCJA]... [PLIK]... Kasowanie (unlink) PLIKU/PLIKÓW. -f, --force ignorowanie nieistniejących plików i argumentów, bez pytań -i pytanie przez każdym kasowaniem -I pojedyncze pytanie przez usunięciem więcej niż trzech plików przy usuwaniu rekursywnym; mniej przeszkadzające niż -i, ale nadal zabezpieczające przed większością błędów --interactive[=KIEDY] pytania zależnie od KIEDY: never (nigdy), once (raz, -I) albo always (zawsze, -i); bez KIEDY zawsze jest zadawane pytanie --one-file-system poddczas rekurencyjnego usuwania katalogu pomijane są katalogi znajdujące się na innym systemie plików niż ten, na którym znajduje się argument polecenia --no-preserve-root bez traktowania katalogu „/” w specjalny sposób --preserve-root odmowa usunięcia „/” (domyślnie) -r, -R, --recursive usuwanie katalogów z zawartością rekursywnie -d, --dir usuwanie pustych katalogów -v, --verbose wyjaśnianie co się dzieje --help wyświetlenie tego opisu i zakończenie --version wyświetlenie informacji o wersji i zakończenie Domyślnie rm nie usuwa katalogów. Użyj opcji --recursive (albo -r albo -R) żeby skasować również wszystkie podane katalogi z zawartością. Żeby usunąć plik z nazwą zaczynająca się od „-”, np. „-foo”, można użyć jednego z poleceń: rm -- -foo rm ./-foo
Przykładowo:
student@student:~/Pulpit$ touch plik1 student@student:~/Pulpit$ touch plik1 plik2 plik3 student@student:~/Pulpit$ mkdir katalog1 katalog2 student@student:~/Pulpit$ touch katalog1/plik4 katalog2/plik5 student@student:~/Pulpit$ tree . ├── katalog1 │ └── plik4 ├── katalog2 │ └── plik5 ├── plik1 ├── plik2 └── plik3 student@student:~/Pulpit$ rm plik1 student@student:~/Pulpit$ tree . ├── katalog1 │ └── plik4 ├── katalog2 │ └── plik5 ├── plik2 └── plik3 2 directories, 4 files student@student:~/Pulpit$ rm plik2 -i rm: usunąć pusty zwykły plik 'plik2'? t student@student:~/Pulpit$ tree . ├── katalog1 │ └── plik4 ├── katalog2 │ └── plik5 └── plik3 2 directories, 3 files student@student:~/Pulpit$ rm -r katalog1 student@student:~/Pulpit$ tree . ├── katalog2 │ └── plik5 └── plik3 1 directory, 2 files student@student:~/Pulpit$ rm -r * student@student:~/Pulpit$ tree . 0 directories, 0 files
Kopiowanie plików
cp
cp --help Składnia: cp [OPCJA]... [-T] ŹRÓDŁO CEL albo: cp [OPCJA]... ŹRÓDŁO... KATALOG albo: cp [OPCJA]... -t KATALOG ŹRÓDŁO... Skopiowanie ŹRÓDŁA do CELU lub ŹRÓDŁA/ŹRÓDEŁ do KATALOGU. Argumenty obowiązkowe dla opcji długich obowiązują również dla krótkich. -a, --archive to samo co -dR --preserve=all --attributes-only bez kopiowania danych, same atrybuty --backup[=TRYB] robienie kopii zapasowej każdego istniejącego pliku docelowego -b jak --backup, ale bez podawania argumentu --copy-contents kopiowanie zawartości pliku specjalnego w przypadku rekursji -d to samo co --no-dereference --preserve=links -f, --force jeżeli istniejący plik docelowy nie daje się otworzyć, będzie skasowany i otwierany ponownie (ignorowane jeżeli użyta jest też opcja -n) -i, --interactive pytanie przed zamazaniem (wyłącza opcję -n) -H podążanie za dowiązaniami symbolicznymi w ŹRÓDLE podanymi jako argumenty polecenia -l, --link dowiązania zwykłe zamiast kopiowania -L, --dereference podążanie za wszystkimi dowiązaniami symbolicznymi w ŹRÓDLE -n, --no-clobber bez nadpisywania istniejących plików (wyłącza opcję -i) -P, --no-dereference bez podążania za dowiązaniami symbolicznymi w ŹRÓDLE -p to samo co --preserve=mode,ownership,timestamps --preserve[=LISTA_ATR] zachowanie podanych atrybutów (domyślnie: mode (uprawnienia), ownership (właściciel, grupa), timestamps (czasy)); jeżeli możliwe, to również dodatkowych atrybutów: context, links (dowiązania), xattr (rozszerzone atrybuty), all (wszystkie) --no-preserve=LISTA_ATR bez zachowania podanych atrybutów --parents użycie pełnej ścieżki źródłowej KATALOG -R, -r, --recursive rekursywnie kopiowanie podkatalogów --reflink ustawienia kopiowania CoW/clone. Zobacz poniżej. --remove-destination usunięcie każdego istniejącego pliku docelowego przed próbą jego otwarcia (por. z --force) --sparse=GDY sterowanie tworzeniem plików rzadkich. Zobacz poniżej. --strip-trailing-slashes skasowanie ewentualnych końcowych ukośników z nazw argumentów ŹRÓDŁOWYCH -s, --symbolic-link dowiązywanie symboliczne zamiast kopiowania -S, --suffix=ROZSZERZENIE zmiana domyślnego ROZSZERZ. kopii zapasowej -t, --target-directory=KATALOG skopiowanie wszystkich ŹRÓDEŁ do KATALOGU -T, --no-target-directory traktowanie CELU jak zwykłego pliku -u, --update kopiowanie tylko plików, dla których ŹRÓDŁO jest nowsze niż CEL albo brakuje CELU -v, --verbose wyjaśnianie co się dzieje -x, --one-file-system pozostanie w jednym systemie plików -Z ustawienie kontekstu bezpieczeństwa podanego pliku jako typu domyślnego --context=[KONTEKST] jak -Z, ale jeżeli jest podany KONTEKST, ustawienie kontekstu bezpieczeństwa SELinux albo SMACK jako KONTEKSTU --help wyświetlenie tego opisu i zakończenie --version wyświetlenie informacji o wersji i zakończenie
Przykładowo:
student@student:~/Pulpit$ touch plik1 plik2 plik3 student@student:~/Pulpit$ mkdir katalog1 katalog2 student@student:~/Pulpit$ dir katalog1 katalog2 plik1 plik2 plik3 student@student:~/Pulpit$ cp plik1 plik1_kopia student@student:~/Pulpit$ dir katalog1 katalog2 plik1 plik1_kopia plik2 plik3 student@student:~/Pulpit$ cp katalog1 katalog1_kopia -r student@student:~/Pulpit$ dir katalog1 katalog1_kopia katalog2 plik1 plik1_kopia plik2 plik3 student@student:~/Pulpit$ cp plik1 plik2 plik3 katalog1 student@student:~/Pulpit$ tree . ├── katalog1 │ ├── plik1 │ ├── plik2 │ └── plik3 ├── katalog1_kopia ├── katalog2 ├── plik1 ├── plik1_kopia ├── plik2 └── plik3 3 directories, 7 files student@student:~/Pulpit$ cp katalog1 katalog2 -r student@student:~/Pulpit$ tree . ├── katalog1 │ ├── plik1 │ ├── plik2 │ └── plik3 ├── katalog1_kopia ├── katalog2 │ └── katalog1 │ ├── plik1 │ ├── plik2 │ └── plik3 ├── plik1 ├── plik1_kopia ├── plik2 └── plik3 4 directories, 10 files student@student:~/Pulpit$ cp katalog1/* katalog1_kopia -r student@student:~/Pulpit$ tree . ├── katalog1 │ ├── plik1 │ ├── plik2 │ └── plik3 ├── katalog1_kopia │ ├── plik1 │ ├── plik2 │ └── plik3 ├── katalog2 │ └── katalog1 │ ├── plik1 │ ├── plik2 │ └── plik3 ├── plik1 ├── plik1_kopia ├── plik2 └── plik3 4 directories, 13 files