12.1. Базовые команды


Первая команда, с которой сталкиваются новички

ls

Команда вывода "списка" файлов. Многие недооценивают всю мощь этой скромной команды. Например, с ключом -R, рекурсивный обход дерева каталогов, командв ls выводит содержимое каталогов в виде древовидной структуры. Вот еще ряд любопытных ключей (опций) команды ls: -S — сортировка по размеру файлов, -t — сортировка по времени последней модификации файла и -i — выводит список файлов с их inode (см. Пример 12-4).

Пример 12-1. Создание оглавления диска для записи CDR, с помощью команды ls

  1. #!/bin/bash
  2. # burn-cd.sh
  3. # Сценарий, автоматизирующий процесс прожигания CDR.
  4. SPEED=2          # Если ваше "железо" поддерживает более высокую скорость записи — можете увеличить этот параметр
  5. IMAGEFILE=cdimage.iso
  6. CONTENTSFILE=contents
  7. DEFAULTDIR=/opt  # В этом каталоге находятся файлы, которые будут записаны на CD.
  8.                  # Каталог должен существовать.
  9. # Используется пакет "cdrecord" от Joerg Schilling.
  10. # (<a href="http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html" title="http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html">http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html</a>)
  11. #  Если этот сценарий предполагается запускать с правами обычного пользователя,
  12. #+ то необходимо установить флаг suid на cdrecord
  13. #+ (chmod u+s /usr/bin/cdrecord, эта команда должна быть выполнена root-ом).
  14. if [ -z "$1" ]
  15. then
  16.   IMAGE_DIRECTORY=$DEFAULTDIR
  17.   # Каталог по-умолчанию, если иной каталог не задан из командной строки.
  18. else
  19.     IMAGE_DIRECTORY=$1
  20. fi
  21. # Создать файл "table of contents".
  22. ls -lRF $IMAGE_DIRECTORY > $IMAGE_DIRECTORY/$CONTENTSFILE
  23. # Ключ "l" — "расширенный" формат вывода списка файлов.
  24. # Ключ "R" — рекурсивный обход дерева каталогов.
  25. # Ключ "F" — добавляет дополнительные метки к именам файлов (к именам каталогов добавдяет оконечный символ /).
  26. echo "Создано оглавление."
  27. # Создать iso-образ.
  28. mkisofs -r -o $IMAGFILE $IMAGE_DIRECTORY
  29. echo "Создан iso-образ файловой системы ISO9660 ($IMAGEFILE)."
  30. # "Прожигание" CDR.
  31. cdrecord -v -isosize speed=$SPEED dev=0,0 $IMAGEFILE
  32. echo "Запись диска."
  33. echo "Наберитесь терпения, это может потребовать некоторого времени."
  34. exit 0
cat, tac

cat — это акроним от concatenate, выводит содержимое списка файлов на stdout. Для объединения файлов в один файл может использоваться в комбинации с операциями перенаправления (> или >>).

  1. # Порядок работы с 'cat'
  2. cat filename                          # Вывод содержимого файла.
  3. cat file.1 file.2 file.3 > file.123   # Объединение содержимого 3-х файлов в одном.
Ключ -n, команды cat, вставляет порядковые номера строк в выходном файле. Ключ -b -- нумерут только не пустые строки. Ключ -v выводит непечатаемые символы в нотации с символом ^. Ключ -s заменяет несколько пустых строк, идущих подряд, одной пустой строкой.

см. также Пример 12-24 and Пример 12-20.

tac — выводит содержимое файлов в обратном порядке, от последней строки к первой.

rev

выводит все строки файла задом наперед на stdout. Это не то же самое, что tac. Команда rev сохраняет порядок следования строк, но переворачивает каждую строку задом наперед.

  1. bash$ cat file1.txt
  2. Это строка 1.
  3.  Это строка 2.
  4. bash$ tac file1.txt
  5. Это строка 2.
  6.  Это строка 1.
  7. bash$ rev file1.txt
  8. .1 акортс отЭ
  9.  .2 акортс отЭ
  10.        


cp

Команда копирования файлов. cp file1 file2 скопирует file1 в file2, перезаписав file2 если он уже существовал (см. Пример 12-6).

Tip

С флагами -a и -r, или -R выполняет копирование дерева каталогов.

mv

Команда перемещения файла. Эквивалентна комбинации команд cp и rm. Может использоваться для перемещения большого количества файлов или для переименования каталогов. Примеры использования команды mv вы найдете в Пример 9-17 и Пример A-3.

Note

При использовании в неинтерактивных сценариях, команде mv следует передавать ключ -f, чтобы подавить запрос подтверждения на перемещение.

Если в качестве каталога назначения указан существующий каталог, то перемещаемый каталог становится подкаталогом каталога назначения..

  1. bash$ mv source_directory target_directory
  2. bash$ ls -lF target_directory
  3. total 1
  4.  drwxrwxr-x    2 bozo  bozo      1024 May 28 19:20 source_directory/
  5.        


rm

Удаляет (remove) файл(ы). Ключ -f позволяет удалять даже файлы ТОЛЬКО-ДЛЯ-ЧТЕНИЯ и подавляет запрос подтверждения на удаление.

Note

При попытке удаления файлов, чьи имена начинаются с символа "-" (дефис), команда rm будет давать сообщение об ошибке.

  1. bash$ rm -badname
  2. rm: invalid option — b
  3.  Try `rm --help' for more information.


Как вариант можно предложить предварять имена таких файлов точкой-со-слэшем — "./" (путь к файлу в текущем каталоге, прим. перев.) .

  1. bash$ rm ./-badname


Warning

С ключом -r, удалит все файлы в подкаталогах, начиная с текущего.

rmdir

Удаляет каталог. Удаляемый каталог не должен содержать файлов, включая "скрытые файлы", [28] иначе каталог не будет удален.

mkdir

Создает новый каталог, например: mkdir -p project/programs/December создает каталог с заданным именем в требуемом каталоге. Ключ -p позволяет создавать промежуточные родительские каталоги.

chmod

Изменяет атрибуты существующего файла (см. Пример 11-11).

  1. chmod +x filename
  2. # Делает файл "filename" доступным для исполнения всем пользователям.
  3. chmod u+s filename
  4. # Устанавливается бит "suid" для "filename".
  5. # В результате, любой пользователь сможет запустить "filename" с привилегиями владельца файла.
  6. # (Это не относится к файлам-сценариям на языке командной оболочки.)


  1. chmod 644 filename
  2. # Выдает право на запись/чтение владельцу файла "filename", и право на чтение
  3. # всем остальным
  4. # (восьмеричное число).


  1. chmod 1777 directory-name
  2. # Выдает право на чтение, запись и исполнение файлов в каталоге,
  3. # дополнительно устанавливает "sticky bit".
  4. # Это означает, что удалять файлы в этом каталоге могут только владельцы файлов,
  5. # владелец каталога и, само собой разумеется, root.


chattr

Изменяет атрибуты файла. Эта команда подобна команде chmod, за исключением синтаксиса вызова, и работает исключительно в файловой системе ext2.

ln

Создает ссылку на существующий файл. Позволяет задавать несколько имен одному и тому же файлу и представляет из себя превосходную альтернативу "псевдонимам" (алиасам) (см. Пример 4-6).

Размер файла-ссылки, создаваемого командой ln, имеет длину всего в несколько байт.

Чаще всего команда ln используется с ключом -s, который служит для создания символической (symbolic), или "мягкой" ("soft") ссылки. Без этого флага, команда создает полноценную копию имени файла. С ключом — только ссылку, указывающую на заданный файл. Дополнительное преимущество ключа -s состоит в том, что он позволяет создавать ссылки на файлы, расположенные в других файловых системах.

Синтаксис команды достаточно прост. Например, команда: ln -s oldfile newfile создаст ссылку, с именем newfile, на существующий файл oldfile,

Caution

Если файл с именем newfile уже существует, то он будет удален командой ln.

Ссылки дают возможность запускать одну и ту же программу или сценарий, использую различные имена. В этом случае программист может предусмотреть свой вариант развития событий для каждого из имен.

Пример 12-2. Здравствуй или Прощай

  1. #!/bin/bash
  2. # hello.sh: Говорит "hello" или "goodbye"
  3. #+          в зависимости от того под каким именем был вызван сценарий.
  4. # Создайте ссылку на этот сценарий:
  5. #    ln -s hello.sh goodbye
  6. # И попробуйте вызвать его под разными именами:
  7. # ./hello.sh
  8. # ./goodbye
  9. HELLO_CALL=65
  10. GOODBYE_CALL=66
  11. if [ $0 = "./goodbye" ]
  12. then
  13.   echo "Пока!"
  14.   # Можете вставить свой вариант прощания.
  15.   exit $GOODBYE_CALL
  16. fi
  17. echo "Привет!"
  18. # Можете вставить свой вариант приветствия.
  19. exit $HELLO_CALL
man, info

Команды доступа к справочным и информационным страницам по системным командам и установленным программам и утилитам. Как правило, страницы info содержат более подробную информацию, чем man.


[28]    Скрытыми считаются файлы, имена которых начинаются с точки, например, ~/.Xdefaults. Такие файлы не выводятся простой командой ls, и не могут быть удалены командой rm -rf *. Как правило, скрытыми делаются конфигурационные файлы в домашнем каталоге пользователя.