- Файлы с тильдой linux
- 5.7.1 Раскрытие скобок
- 5.7.2 Замена тильды (Tilde Expansion)
- 5.7.3 Подстановка параметров и переменных
- 5.7.4 Подстановка команд
- 5.7.5 Арифметичекие подстановки (Arithmetic Expansion)
- 5.7.6 Разделение слов (word splitting)
- 5.7.7 Раскрытие шаблонов имен файлов и каталогов (Pathname Expansion)
- 5.7.8 Удаление специальных символов
- Насколько корректно использовать символ «тильда» в именах файлов?
- Re: Насколько корректно использовать символ «тильда» в именах файлов?
- Re: Насколько корректно использовать символ «тильда» в именах файлов?
- Re: Насколько корректно использовать символ «тильда» в именах файлов?
- Re: Насколько корректно использовать символ «тильда» в именах файлов?
- Re: Насколько корректно использовать символ «тильда» в именах файлов?
- Re: Unix-cреда под windows
- 16 практических примеров использования команды ls в Linux
- 1. Вывод имен скрытых файлов/директорий
- 2. Удаление информации о текущей (.) и родительской (..) директориях из вывода
- 3. Вывод информации о файлах и директориях в обратном порядке
- 4. Сортировка имен файлов по расширениям
- 5. Сортировка элементов директории по времени модификации
- 6. Рекурсивный вывод элементов поддиректорий
- 7. Вывод имен файлов с информацией о соответствующих структурах inode
- 8. Вывод подробной информации о файлах и директориях
- 9. Вывод имени автора файла
- 10. Вывод экранирующих последовательностей в стиле C для специальных символов (таких, как символ перехода на новую строки и символ пробела)
- 11. Вывод размеров файлов в единицах, отличных от байтов
- 12. Вывод лишь имен и размеров файлов и директорий
- 13. Удаление информации о файлах резервных копий из вывода
- 14. Вывод информации о типах файлов
- 15. Изменение формата вывода
- 16. Сокрытие имен файлов определенного типа
- Заключение
Файлы с тильдой linux
Когда оболочка получает какую-то командную строку на выполнение, она до начала выполнения команды осуществляет «грамматический разбор» полученной командной строки. Одним из этапов такого «разбора» является раскрытие или подстановка выражений (expansion). В bash имеется семь типов подстановки выражений:
- раскрытие скобок (brace expansion) ;
- замена знака тильды (tilde expansion) ;
- подстановка параметров и переменных ;
- подстановка команд ;
- арифметические подстановки (выполняемые слева направо) ;
- разделение слов (word splitting) ;
- раскрытие шаблонов имен файлов и каталогов (pathname expansion).
Все эти операции выполняются именно в том порядке, как они здесь перечислены. Рассмотрим их последовательно.
5.7.1 Раскрытие скобок
Раскрытие скобок проще всего пояснить на примере. Предположим, что нам нужно создать сразу несколько подкаталогов в каком-то каталоге, или поменять владельца сразу у нескольких файлов. Эти действия можно выполнить с помощью следующих команд:
[user]$ mkdir /usr/local/src/bash/
В первом случае в каталоге /usr/local/src/bash/ будут созданы подкаталоги old , new , dist и bugs . Во втором случае владелец будет изменен у файлов
То есть для каждой пары скобок генерируются несколько отдельных строк (их число равно числу слов, стоящих внутри скобок) путем приписывания к каждому слову из скобок (спереди) того, что стоит перед скобкой, и приписывания в конец каждого полученного слова того, что стоит после скобки. Еще один пример: строка a
Раскрытие скобок выполняется до выполнения других видов подстановок в командной строке, причем все специальные символы, встречающиеся в командной строке, в том числе внутри скобок, сохраняются неизменными (они будут интерпретированы на следующих этапах анализа строки).
5.7.2 Замена тильды (Tilde Expansion)
Если слово начинается с символа тильды (‘
‘), все символы до первого слэша (или все символы, если слэша нет) трактуются как имя пользователя (login name).
Если это имя есть пустая строка (т. е. вслед за тильдой идет сразу слэш), то тильда заменяется на значение переменной HOME. Если значение переменной HOME не задано, тильда заменяется на полный путь к домашнему каталогу пользователя, запустившего оболочку.
Если вслед за знаком тильды (до слэша) стоит слово, совпадающее с именем одного из легальных пользователей, тильда и имя пользователя заменяются полным именем домашнего каталога этого пользователя. Если слово, следующее за тильдой, не является именем пользователя (и не пусто), то оно остается неизменным.
Если вслед за знаком тильды стоит ‘ + ’ , эти два знака заменяются на полное имя текущего каталога (т. е. значение переменной PWD). Если за знаком тильды следует ‘ — ‘ , подставляется значение переменой OLDPWD.
5.7.3 Подстановка параметров и переменных
Символ $ используется для обозначения операций подстановки параметров, подстановки команд и подстановок арифметических выражений. Выражение или имя, следующее за $ , может быть заключено в скобки; что не обязательно, но удобно, так как позволяет отделить заменяемое выражение от следующих за ним слов или символов. Таким образом, чтобы в командной строке вызвать значение параметра (в частности, любой переменной), нужно вставить выражение вида $
Скобки необходимы только в том случае, если имя параметра состоит из нескольких цифр, или когда за именем следует символ, который не должен интерпретироваться как часть имени.
Все значения переменных подвергаются подстановке знака тильды, раскрытию параметров и переменных, подстановке команд, подстановкам арифметических выражений, а также удалению специальных символов цитирования (см. ниже). Разделение слов не производится, за исключением случая «$@» (объяснение см. выше в табл. 5.3). Раскрытие шаблонов имен файлов и каталогов не производится.
5.7.4 Подстановка команд
Подстановка команд является очень мощным инструментов bash . Она заключается в замене имени команды на результат ее выполнения. Существует две формы подстановки команд:
$(command) и `command`
Если применяется вторая из этих форм, то обратный слэш внутри кавычек трактуется как литерал, кроме тех случаев, когда за ним следует $, `, или \. Если же используется форма $(command), все символы внутри скобок составляют команду и ни один из них не считается специальным символом.
Если подстановка производится внутри двойных кавычек, то в результатах подстановки не осуществляется разделение слов и раскрытие шаблонов имен файлов и каталогов.
5.7.5 Арифметичекие подстановки (Arithmetic Expansion)
Арифметические подстановки позволяют вычислить значение арифметического выражения и подставить вместо него результат. Существует две формы задания арифметических подстановок:
где expression трактуется так, как если бы оно было заключено в двойные кавычки, но встречающиеся в expression двойные кавычки трактуются как простой литерал. Внутри expression выполняются подстановки параметров и команд.
Синтаксис выражения expression подобен синтаксису арифметических выражений в языке C, подробнее об этом можно прочитать в разделе ARITHMETIC EVALUATION man-страницы по каманде bash . Например, команда
[user]$ echo $(( 2 + 3 * 5 ))
в качестве результата выдает «17».
Если выражение некорректно, bash выдает сообщение об ошибке.
5.7.6 Разделение слов (word splitting)
После завершения подстановок параметров, команд и арифметических выражений оболочка снова анализирует командную строку (в том виде, который она приобрела к этому моменту) и осуществляет разделение слов (word splitting).
Эта операция заключается в том, что в командной строке ищутся все вхождения символов-разделителей, определенных в переменой IFS, и в соответствующих местах строки разделяются на отдельные слова. Если значение IFS равно пустой строке, разделение слов не производится.
Если в командной строке не производилось никаких подстановок, то разбиение на слова не производится.
5.7.7 Раскрытие шаблонов имен файлов и каталогов (Pathname Expansion)
Подстановки имен путей и файлов (Pathname expansion) используются для того, чтобы с помощью краткого образца или шаблона указать несколько имен файлов (или каталогов), соответствующих данному шаблону. После разделения слов, если не была задана опция -f, bash производит поиск в каждом слове командной строки символов *, ?, and [. Если будет найдено слово с одним или несколькими вхождениями таких символов, то это слово рассматривается как шаблон, который должен быть заменен словами из лексикографически упорядоченного списка имен путей, соответствующих данному шаблону. Если имен, соответствующих шаблону, не найдено, и переменная nullglob не задана, слово не изменяется. Если эта переменная установлена, а путей, соответствующих шаблону не найдено, слово удаляется из командной строки.
Специальные символы шаблонов имеют следующее значение.
Таблица 5.4. Символы шаблонов
Соответствует произвольной строке символов, включая пустую строку. Например, my*.txt будет заменено на myday.txt, myweek.txt и mymonth.txt (если такие файлы существуют), а *.jpg соответствует всем файлам с расширением jpg в указанном каталоге
Соответствует любому одиночному символу. Например, вместо шаблона file?.txt будут подставлены имена file1.txt и filex.txt, но не file10.txt
Соответствует любому символу из числа символов, указанных в скобках. Пары символов, разделенные знаком минуса, обозначают интервал; любой символ стоящий лексически между этими двумя символами, включая и символы, задающие интервал, соответствует шаблону. Если первым символом внутри скобок является ! или ^, то считается, что шаблону (в данной позиции) соответствуют все символы, не указанные в скобках
Шаблоны имен файлов очень часто применяются в командных строках, содержащих команду ls . Представьте себе, что вы хотите просмотреть информацию о содержимом каталога, в котором находится огромное количество разных файлов различных форматов, например, файлов с изображениями форматов gif, jpeg, avi и т. д.. Чтобы получить только список файлов формата jpeg, вы можете использовать команду
Если в каталоге имеется множество файлов, имена которых представлены четырехзначными номерами, то следующей командой можно вывести только список файлов с номерами от 0200 до 0499:
5.7.8 Удаление специальных символов
После того, как все подстановки в командной строке сделаны, из нее еще удаляются все вхождения символов \ , ` и » , которые служили для отмены специального значения других символов.
Источник
Насколько корректно использовать символ «тильда» в именах файлов?
Ведь этот символ используется в качестве имени домашней директории.
Re: Насколько корректно использовать символ «тильда» в именах файлов?
> Ведь этот символ используется в качестве имени домашней директории.
Tilde-expansion происходит только если тильда начинает слово (word,
в том смысле, как его понимает shell). Так как разделители слов в
именах файлов встречатся не могут, опасность возникает только если
имя файла начинается с тильды, а все остальное совпадает с чьим-нибудь
логином.
К слову, tilde-expansion умеет куда больше, чем подставлять
домашнюю директорию.
Re: Насколько корректно использовать символ «тильда» в именах файлов?
Тильда используется например для создания резервных копий файлов в Midnight Commander и других программах.
Re: Насколько корректно использовать символ «тильда» в именах файлов?
Начнем с того, что tilde expansion — это cвойство shellа а не файловой системы. Любое же shell expansion можно предотвратить используя одинарные кавычки или backslash. Есть правда небольшая вероятность, что некоторая программа будет делать tilde expansion но не обрабатывать кавычек итп — но вообще-то обычно все это делается через wordexp(3)
Re: Насколько корректно использовать символ «тильда» в именах файлов?
Кавычки в такой же степени свойства shell как и tilde expansion. Соответственно не очень понятно замечание о некоторых программах, которые что-то там с ними будут делать. Нет тильде в начале имени файла! Впрочем это все дело вкуса. Ведь захочется еще и скрипты писать для обработки файлов в директории. То-то будет приятно вспомнить .
Re: Насколько корректно использовать символ «тильда» в именах файлов?
2 io: я имел в виду очень простую вещь. Если программа получает имя файла не из командной строки, она может проводить над ним преобразования a la shell. Вопрос в том, какие именно преобразования она будет реализовывать — если все это делается руками а не через wordexp(3) Я видел программу (только вот забыл, какую 🙂 которой можно было в file chooser dialog указать путь с тильдой и она его автоматически расширяла. Но никаких кавычек или ескэйпов она не понимала. Очевидно, что такой программой файл, имя которого начинается с тильды, открыть нельзя. Но, конечно, такие выверты — это редкость.
Re: Unix-cреда под windows
>> Но никаких кавычек или ескэйпов она не понимала.
Интересно, каким способом той забытой программе передавались кавычки и ескейпы? 😉
someprog \»\
thedir\» ? — уж больно мудрёно.
А сказано было о том, что при вызове
% someprog ‘
arg’
аргумент, который получает программа, не содержит в себе кавычек, т.к. они _также_ обрабатываются shell.
Источник
16 практических примеров использования команды ls в Linux
Оригинал: 16 Practical Examples of Linux LS command for Beginners
Автор: Himanshu Arora
Дата публикации: 18 апреля 2017 г.
Перевод: А.Панин
Дата перевода: 23 апреля 2017 г.
Если пользователю Linux требуется получить информацию о содержимом текущей директории в процессе работы с интерфейсом командной строки системы, он наверняка воспользуется командой ls . Это команда, которая по умолчанию выводит имена файлов из текущей директории в алфавитном порядке.
Хотя данная команда на первый взгляд и кажется крайне простой, она имеет огромное количество дополнительных возможностей (доступных посредством различных параметров), которые могут оказаться полезными в определенных обстоятельствах. В данной статье мы будем обсуждать приемы использования некоторых из этих параметров и иллюстрировать их с помощью простых для понимания примеров.
1. Вывод имен скрытых файлов/директорий
По умолчанию команда не отображает имена скрытых файлов и директорий. Однако, вы можете активировать механизм вывода информации об этих элементах файловой системы с помощью параметра -a . Таким образом, для вывода имен всех файлов/директорий из текущей директории (включая скрытые файлы и директории, имена которых начинаются с символа точки «.» ) достаточно выполнить следующую команду:
2. Удаление информации о текущей (.) и родительской (..) директориях из вывода
При использовании параметра -a , кроме всего прочего, осуществляется вывод информации о текущей и родительской директориях (элементы «.» и «..» соответственно). Если вам не нужна эта информация, вы можете использовать вместо упомянутого параметра параметр -A .
3. Вывод информации о файлах и директориях в обратном порядке
По умолчанию ls сортирует имена файлов и директорий в алфавитном порядке. Но если вам понадобится, вы можете организовать вывод имен элементов директории в обратном порядке. Для этого вам придется использовать параметр -r .
А это пример вывода:
4. Сортировка имен файлов по расширениям
Для сортировки имен файлов в алфавитном порядке по расширениям следует использовать параметр -X .
Это приведенная команда в действии:
При рассмотрении приведенной выше иллюстрации несложно заметить, что файл с именем «echo» и расширением «.c» расположен в выводе перед файлом с именем «byzanz_window» и расширением «.py» .
5. Сортировка элементов директории по времени модификации
Если вам нужно узнать, какие файлы или директории были недавно модифицированы, вы можете использовать параметр -t команды ls.
В случае использования параметра -t первыми выводятся имена самых новых элементов файловой системы.
6. Рекурсивный вывод элементов поддиректорий
Если вам нужно, вы можете использовать команду ls для вывода информации также и об элементах поддиректорий текущей директории. Для этой цели используется параметр -R .
Это приведенная выше команда в действии:
7. Вывод имен файлов с информацией о соответствующих структурах inode
Команда ls также позволяет вам выводить имена файлов/директорий вместе с номерами соответствующих структур inode. Для использования этой возможности предусмотрен параметр -i .
Команда в действии:
Очевидно, что на иллюстрации выше в столбцах слева приведены числа, являющиеся номерами структур inode, а в столбцах справа — соответствующие имена файлов/директорий.
8. Вывод подробной информации о файлах и директориях
Команда ls также может выводить подробную информацию о файлах и директориях. Для активации данного режима вывода (также известного, как «long listing format» или «широкий формат») вам придется использовать параметр -l .
Как видно на иллюстрации выше, вывод состоит из 8 столбцов. А это информация о содержимом каждого из столбцов:
- Первый столбец содержит информации о правах доступа к элементу директории
- Второй столбец содержит количество жестких ссылок на элемент директории
- Третий и четвертый столбцы содержат имена пользователя и группы пользователей, владеющих элементом директории
- Пятый столбец содержит размер элемента директории
- Шестой и седьмой столбцы содержат дату и время модификации элемента директории
- Последний, восьмой столбец содержит имя элемента директории
9. Вывод имени автора файла
Вы можете воспользоваться специальным параметром команды ls для вывода имени автора каждого из файлов в процессе вывода подробной информации о содержимом директории. Это параметр —author , который должен быть скомбинирован с параметром -l .
Как видно на иллюстрации выше, новый, пятый столбец содержит имя автора файла.
Примечание: на официальном веб-сайте проекта GNU по этому поводу сказано следующее: «В системе GNU/Hurd имена авторов файлов могут отличаться от имен их владельцев, в других же системах они совпадают».
10. Вывод экранирующих последовательностей в стиле C для специальных символов (таких, как символ перехода на новую строки и символ пробела)
Предположим, что текущая директория содержит файл, в имени которого содержится символ перехода на новую строку. Если вы попытаетесь вывести список содержимого директории, вы увидите, что в имени этого файла присутствует знак вопроса ( ? ), который обозначает непечатаемый символ.
Однако, команда ls поддерживает параметр, который может использоваться в данном случае, а именно, параметр, который позволяет вывести экранирующую последовательность в стиле C для непечатаемых символов. Этим параметром является параметр -b .
При рассмотрении приведенной выше иллюстрации становится очевидным, что в результате использования параметра -b в имени рассматриваемого файла появляется экранирующая последовательность «\n» . Аналогично, в данном режиме символы пробела заменяются на экранирующую последовательность символов «\[пробел]» .
11. Вывод размеров файлов в единицах, отличных от байтов
Если вам потребуется узнать размер файла, вы наверняка воспользуетесь параметром -l (предназначенным для активации механизма вывода подробной информации о файлах и директориях), который уже обсуждался три раздела назад. По умолчанию размер файлов выводится в байтах. Однако, бывают ситуации, в которых вам может потребоваться вывести размер файлов в килобайтах или мегабайтах.
Команда ls поддерживает параметр, позволяющий указать единицы измерения, которые должны использоваться при выводе размера файлов. Этим параметром является параметр —block-size . Например, если вам нужно, чтобы размер файлов выводился в килобайтах, вы можете воспользоваться следующей командой:
Помните о том, что при использовании параметра -l выводится реальный размер файла, то есть, количество данных. содержащихся в нем. Если же вам нужно знать размер файла в файловой системе или размер зарезервированного для его хранения пространства (да, эти размеры могут отличаться), вам придется использовать параметр -s .
Если вас интересует дополнительная информация о различиях в размерах файлов в случае использования параметров -l и -s , вы можете ознакомиться с материалом, доступным по данной ссылке .
12. Вывод лишь имен и размеров файлов и директорий
Если вы хотите, чтобы вывод команды ls содержал только имена файлов/директорий и их размеры, вы можете использовать параметр -h в комбинации с параметром -l / -s .
13. Удаление информации о файлах резервных копий из вывода
В Linux файлы резервных копий содержат в конце своих имен символ тильды (
). Команда ls поддерживает параметр -B , который позволяет не включать файлы резервных копий в вывод в том случае, если такие файлы не интересуют пользователя.
Например, на приведенной ниже иллюстрации показан вывод двух команд ls. В результате исполнения первой команды выводится имя файла резервной копии, а второй (с параметром -B ) — не выводится.
14. Вывод информации о типах файлов
По умолчанию выводимые имена элементов директории раскрашиваются в разные цвета в зависимости от их типов. Однако, если вам нужно, вы можете активировать режим добавления индикаторов (используемых для тех же целей) в вывод. Для этой цели предназначен параметр -F .
Это пример вывода команды:
Обратите внимание на дополнительный символ «/» после имени директории «example» , а также дополнительный символ «*» после имени исполняемого файла «test» . Это полный список индикаторов с информацией об их значениях:
- @ указывает на символьную ссылку
- * указывает на исполняемый файл
- = указывает на файл сокета
- | указывает на файл именованного программного канала
- > указывает на файл двери
- / указывает на директорию
15. Изменение формата вывода
Если вам понадобится, вы также сможете изменить формат вывода команды ls. Параметр —format позволяет сделать это. Данный параметр требует явного указания названия формата вывода, который вам нужен. Доступны форматы вывода со следующими названиями: «verbose» или «long» , «commas» , «horizontal» или «across» , «vertical» и «single-column» .
Например, вы можете использовать параметр —format=commas , если хотите получить список из разделенных с помощью запятых имен файлов:
По аналогии параметр —format=single-column может использоваться в случае необходимости в выводе имен файлов в одном столбце:
16. Сокрытие имен файлов определенного типа
При желании, вы также можете убрать из вывода команды ls имена файлов определенного типа. Параметр —hide (который предусматривает обязательную передачу шаблона имен файлов командной оболочки) позволяет сделать это. Например, если вам нужно, чтобы в выводе отсутствовали имена файлов с расширением .txt , вы должны выполнить следующую команду:
На иллюстрации ниже показан вывод команды ls без каких-либо параметров и с параметром —hide .
Заключение
Хотя ls и является крайне простой командой, эффективность ее использования зависит от того, насколько хорошо пользователь знаком с поддерживаемыми ею параметрами. Испытайте рассмотренные выше параметры самостоятельно, а в случае возникновения каких-либо сомнений или вопросов сразу же обращайтесь к соответствующей странице руководства .
Источник