Меню

Linux файл начинается с собаки

Изучите необходимый минимум Linux, чтобы быть продуктивным

Разные операционные системы длительное время обслуживают различные аудитории: Windows — бизнес-профессионалов, Mac — творческих, а Linux — разработчиков. Разработчикам ОС такой тип рыночного спектра сильно упростил концепцию продукта, технические требования, пользовательский опыт и направление рынка. Однако, он также ужесточил нормы рабочего пространства, что деформировало отдельных пользователей под узкие, непересекающиеся области: у бизнесменов нет возможности заглянуть в творческий процесс, а у разработчиков нет представления о проблемах бизнеса.

В реальности знания и опыт — динамичны, они охватывают несколько дисциплин и сфер деятельности. Представление о том, что «можно иметь способности только к чему-то одному» — это не руководство к овладению мастерством, а попытка справиться с преждевременной оптимизацией. Узнать о том, в чём вы хорошо разбираетесь можно только когда вы попробовали себя в нескольких разных вопросах. И может оказаться, что у вас есть способности ко многим видам деятельности.

Для современных бизнес-аналитиков особенно актуален вопрос ликвидации пробела между бизнесом и разработкой. Бизнес-аналитики должны быть двухплатформенными, способными использовать командную строку, доступную только на Linux (или в macOS), но при этом уметь извлекать широкие возможности из Microsoft Office в Windows. Очевидно, что мир Linux пугает тех, у кого образование в сфере бизнеса. К счастью, как и в большем количестве вопросов, вам необходимо изучить 20% информации, чтобы выполнить 80% работы. Вот мои 20%.

Почему современные бизнес-аналитики должны знать Linux

Благодаря своим open source корням, Linux выиграл от вкладов тысяч разработчиков за всё время его существования. Они построили программы и утилиты, чтобы упростить работу не только себе, но и тем программистам, которые последовали за ними. В результате open source разработка создала эффект сетевой выгоды: чем больше разработчики строили утилиты на оригинальной платформе, тем больше других разработчиков могло влиять на эти утилиты, чтобы писать собственные программы.

В результате получился огромный пакет программ и утилит (то есть софт), который был написан на Linux и под Linux. Большая часть его никогда не портировалась в Windows. Один из примеров — популярная система контроля версий (VCS), которая называется git. Разработчики могли написать софт под Windows, но они этого не сделали. Они написали его для работы в командной строке, для Linux, потому что Linux — экосистема, в которой уже были все необходимые инструменты.

Если вдаваться в подробности, разработка на Windows ведёт к двум основным проблемам:

  1. Базовые задачи, вроде парсинга файлов, рабочего планирования и поиска текста используются чаще, чем запуск утилиты командной строки.
  2. Языки программирования (Python, C++) и связанные с ними библиотеки выкидывают ошибки, потому что они ожидают конкретных параметров Linux или специфических локаций файловой системы.

Если собрать всё вместе, это выльется в трату времени на переписывание базовых инструментов, которые уже доступны в Linux, они позволят избежать ошибок совместимости с ОС. Тут нет никаких сюрпризов — экосистема Windows просто не была задумана и спроектирована под нужды разработки софта.

Теперь давайте рассмотрим базовые идеи Linux.

Фундаментальная единица Linux: «оболочка»

Shell (оболочка, также известная как терминал, консоль или командная строка) — это текстовый интерфейс пользователя, через который команды отправляются машине. На Linux, по-умолчанию, язык оболочки называется bash. В отличие от Windows-пользователей, которые в своём большинстве используют навигацию «навести-кликнуть» по окну, Linux-разработчики привязаны к клавиатуре и пишут команды в оболочке. Хоть этот переход далёк от естественного для тех, у кого нет бэкграунда в программировании, плюсы разработки в Linux сильно перевешивают изначальное вложение в обучение.

Изучаем несколько важных концептов

В сравнении с достаточно зрелым языком программирования, bash имеет всего несколько основных концептов, которые необходимо выучить. Как только вы охватите это, остаток bash — простое запоминание. Я переформулирую понятней: хорошо разбираться в bash значит запомнить 20-30 команд и их часто используемые аргументы.

Linux кажется непроницаемым для тех, кто не касается разработки, из-за способа, которым разработчики (не напрягаясь) извергают эзотерические команды терминала, когда им захочется. Правда в том, что они хорошо знают только несколько десятков команд — за всем более сложным они так же (как и все смертные) обращаются в Google.

Опуская мелкие загвоздки, стоящие на пути, вот главные концепты в bash.

Командный синтаксис

Команды соответствуют синтаксису:

Например, в ‘grep -inr’, grep — это команда (для поиска текстовой строки) и -inr это флаги/аргументы, которые меняют то, что grep выполняет по умолчанию. Единственный способ понять, что это значит, поискать что-то о них через Google или просто ввести ‘man grep’. Я рекомендую выучить команды и их самые используемые аргументы: слишком обременительно помнить, что делает каждый флаг.

Псевдонимы директорий

  • Текущая директория (где я?): .
  • Родительская директория текущей директории: ..
  • Домашняя директория пользователя:
  • Корень файловой системы (или родитель всех родителей): /
  • Например, чтобы поменять текущую директорию на родительскую директорию нужно ввести: cd ..

    Таким же способом, чтобы скопировать файл, расположенный в «/path/to/file.txt» в текущую директорию, нужно ввести cp /path/to/file.txt . (заметьте, что в конце команды точка). Поскольку это всего лишь псевдонимы, вместо них может использоваться реальное имя пути.

    Полезная информация

    У нас есть курс по операционным системам. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти по ссылке.

    STDIN / STDOUT

    Всё, что вы пишите в окне и подтверждаете (с помощью ENTER), называется стандартным вводом (STDIN).

    Всё, что программа выводит в ответе в терминал (например текст из файла), называется стандартным выводом (STDOUT)

    Конвейер (piping)

    Pipe принимает STDOUT от команды слева от pipe и превращает его в STDIN для команды справа от pipe.

    пример: echo ‘test text’ | wc -l

    Символ «больше» принимает STDOUT от команды слева и записывает/перезаписывает в новый файл справа

    пример: ls > tmp.txt

    Два символа «больше» принимают STDOUT от команды слева и добавляют к новому или существующему файлу справа.

    пример: date >> tmp.txt

    Шаблоны поиска (wildcards)

    Можете представить это как символ % в SQL. Например, можно написать WHERE first_name LIKE ‘John%’ , чтобы найти любые позиции, где данные начинаются с имени John.

    В bash можно написать John* . Если вы хотите вывести список всех файлов в какой-то папке, заканчивающихся на «.json», пишете : ls *.json

    Завершение с помощью tab

    Bash часто завершает команды сам, по определённой логике, если вы начинаете вводить команду и нажимаете TAB.

    Однако, стоит попробовать что-то вроде zsh или fish для автозаполнения, потому что запоминать команды и все их параметры очень сложно. Более того, эти инструменты применят автозаполнение, основываясь на вашей истории используемых команд.

    Выход

    Иногда вы застреваете в какой-нибудь программе и не можете оттуда выйти. Это очень часто повторяющееся событие для новичков в Linux, которое невероятно демотивирует. Часто выход происходит с помощью чего-то, содержащего q. Хорошо бы запомнить то, что будет написано ниже и использовать, когда вы в ловушке.

    Что я помню из команд bash

    Это те команды, которые я использую чаще всего в Linux (начиная от самых часто используемых к самым редко используемым). Как я уже писал раньше, знание всего горстки команд поможет выполнять большой набор необходимых программируемых задач.

    • cd изменить директорию
    • ls -lha вывести директорию в виде списка (подробного)
    • vim или nano редактор командной строки
    • touch создать новый пустой файл
    • cp -R скопировать файл или директорию (и всё их содержимое)
    • mv переместить или переименовать файл
    • rm удалить файл
    • rm -rf удалить файл или папку без возможности восстановления [использовать аккуратно!]
    • pwd вывести текущую рабочую директорию
    • cat или less или tail или head -n10 вывести в STDOUT содержимое файла
    • mkdir создать пустую директорию
    • grep -inr найти строку в любом файле этой директории или дочерних директориях

    column -s, -t отобразить разделенный запятыми файл в виде столбцов

    ssh @ соединиться с удалённой машиной

    tree -LhaC 3 показать структуру директории на 3 уровнями вглубь (с размерами файлов и включая скрытые директории)

    htop (или top ) диспетчер задач

    pip install —user пакетный менеджер Python для установки пакетов в

    pushd . ; popd ; dirs; cd — push/pop/view директорию в стек + изменить обратно на последнюю директорию

    sed -i «s///g» заменить строку в файле

    find . -type f -name ‘*.txt’ -exec sed -i «s///g» <> \; заменить строку для каждого файла в этой и дочерней папках с именем типа *.txt

    tmux new -s session, tmux attach -t session создать новую сессию терминала без создания нового окна [продвинутый уровень]

    wget загрузить веб-страницу или веб-ресурс

    curl -X POST -d «» http://www.google.com отправить HTTP-запрос на веб-сервер

    find вывести список всего содержимого директории и её дочерних директорий рекурсивно

    Читайте также

    Продвинутые и не часто используемые команды

    Я считаю хорошей практикой хранить список команд, которые полезны в определённых ситуациях, даже если подобные ситуации случаются редко (например, какой процесс блокирует конкретный сетевой порт). Вот несколько нестандартных команд, которые у меня всегда под рукой:

    Источник

    Основы Linux. Часть 1.1 : BASH, основы навигации

    Об этом руководстве

    Добро пожаловать в первую из четырех частей обучающего руководства по основам Linux, разработанного чтобы подготовить вас к сдаче экзамена Linux Professional Institute 101. В нем вы познакомитесь с bash (стандартной оболочкой командного интерпретатора в Linux), узнаете о большинстве возможностей таких стандартных команд Linux, как ls, cp и mv, разберетесь в инодах, жестких и символьных ссылках, и многом другом. К концу этого руководства у вас сформируется некий фундамент знаний, и вы будете готовы к изучению основ администрирования Linux. К концу всего курса (8 частей), у вас будет достаточно навыков, чтобы стать системным администратором Linux и пройти сертификацию LPIC Level 1 от Linux Professional Institute, если конечно захотите.

    Данная первая часть руководства отлично подходит для новичков в Linux, а также для тех пользователей, кто хочет освежить или улучшить свое понимание фундаментальных концепций Linux, таких, как копирование и перемещение файлов, создание символических и жестких ссылок, а также стандартных команд обработки текста, включая конвейеры и перенаправления. По ходу мы также дадим множество советов, подсказок и трюков, что делает это руководство насыщенным и практичным, даже для тех, кто уже имеет солидный опыт работы с Linux. Для начинающих большая часть этого материала будет новой, но более продвинутые пользователи Linux найдут это руководство отличным средством, чтобы разложить свои фундаментальные навыки по полочкам у себя в голове.

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

    Введение в bash

    Если вы уже использовали Linux ранее, то наверняка знаете, что после входа в систему вас приветствует приглашение, которое выглядит примерно так:

    На практике приглашение, которое вы видите, может немного отличаться. Например, оно может содержать имя хоста, имя текущей рабочей директории, или все вместе. Не зависимо от того, как выглядит ваше приглашение, есть одна несомненная вещь: программа, которая выводит это приглашение, называется оболочка интерпретатора команд (от англ. shell — оболочка, он же командная строка или терминал — прим. пер.), и, вероятнее всего, вашей командной оболочкой будет ‘bash’.

    А у вас запущен bash?

    Вы можете убедиться, что используете bash, набрав:

    $ echo $SHELL
    /bin/bash

    Если строчка выше выдает ошибку, или ответ не соответствует, возможно, что вы запустили другую оболочку. В этом случае большая часть этого руководства все еще будет полезна, но было бы значительно лучше для вас переключиться на bash, ради подготовки к экзамену 101.

    Bash — это акроним от Bourne-again-shell, от англ. «ещё-одна-командная-оболочка-Борна» или «рождённая-вновь-командная оболочка» (тут игра слов Bourne/born — прим. пер.), и является оболочкой по умолчанию для большинства Linux-систем. Задача оболочки получать от вас команды, через которые вы взаимодействуете с Linux-системой. После того, как вы закончили ввод команд, вы можете выйти из оболочки (exit) или закончить сеанс (logout), в этом случае вы увидите приглашение входа в систему.

    Кстати, вы также можете выйти из оболочки bash нажав control-D в приглашении.

    Вы, возможно, уже обнаружили, что пялиться на приглашение bash — не самое впечатляющее занятие в мире. Ну что ж, давайте узнаем как путешествовать по нашей файловой системе. В приглашении введите пожалуйста следующую команду (без $):

    Вы только что сообщили bash, что хотите работать в директории /, также известной, как корневая; все директории в системе имеют форму дерева, и / является его вершиной, т.е. корнем (в информатике деревья растут наоборот, корень вверху, а ветки спускаются вниз — прим. пер.). cd устанавливает директорию, в которой вы в данный момент работаете, также известную как «текущая рабочая директория».

    Чтобы узнать текущую рабочую директорию в bash нужно набрать:

    В примере с cd, аргумент / называется путь. Он сообщает cd куда мы хотим отправиться. В частности, аргумент / это абсолютный путь, что значит, что он задает расположение относительно корня дерева файловой системы.

    Ниже несколько из них:

    /dev
    /usr
    /usr/bin
    /usr/local/bin

    Как можно заметить, у всех абсолютных путей есть одна общая черта, они начинаются с /. Указывая, допустим, /usr/local/bin в качестве аргумента для cd, мы сообщаем, что хотим попасть в / директорию, затем в usr директорию внутри нее, и так далее в local и bin, вниз по дереву. Абсолютные пути всегда отсчитываются начиная от / сперва.

    Другой тип пути называется «относительный путь». bash, cd, и другие команды всегда интерпретируют их относительно текущей директории. Относительные пути НИКОГДА не начинаются с /. Так, если мы сначала переместимся в /usr:

    То, затем мы можем использовать относительный путь local/bin, чтобы попасть в директорию /usr/local/bin:

    $ cd local/bin
    $ pwd
    /usr/local/bin

    Относительные пути могут также содержать одну или более «..» директории. Директория «..» специальная; она указывает на родительскую директорию. Так, продолжая с примера выше:

    $ pwd
    /usr/local/bin
    $ cd ..
    $ pwd
    /usr/local

    Как видно, наша текущая директория теперь /usr/local. Мы смогли переместиться «назад» на одну директорию относительно текущей, где были до того.

    Кроме того, мы также можем использовать «..» в существующем относительном пути, позволяющем нам переместиться в директорию «рядом» с той, в которой находимся:

    $ pwd
    /usr/local
    $ cd ../share
    $ pwd
    /usr/share

    Примеры относительных путей

    Относительные пути могут быть чуточку более сложными. Ниже несколько примеров, попробуйте самостоятельно догадаться, где вы окажитесь после набора каждой из этих команд.

    $ cd /bin
    $ cd ../usr/share/zoneinfo

    $ cd /usr/X11R6/bin
    $ cd ../lib/X11

    $ cd /usr/bin
    $ cd ../bin/../bin

    А теперь наберите их и проверьте свои предположения. 😉

    Перед тем как мы закончим изучение cd, есть несколько моментов, которые необходимо прояснить. Во-первых, есть еще одна специальная директория «.», которая означает «текущая директория». Хотя она и не используется с командой cd, но часто используется для выполнения программы из текущей директории, как в следующем примере:

    В данном случае будет запущена исполняемая программа myprog, находящаяся в текущей рабочей директории.

    cd и домашняя директория

    Если бы мы хотели переместиться в нашу домашнюю директорию, то могли бы набрать:

    Без каких либо аргументов cd переместит в вашу домашнюю директорию, которая будет /root для суперпользователя, или обычно /home/username (где username — имя пользователя в системе — прим.пер.) для любого другого пользователя. Но, что если мы хотим указать файл в нашей домашней директории? Может быть мы хотим передать путь к файлу в качестве аргумента нашей программе myprog. Если файл расположен в нашей домашней директории, мы можем набрать:

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

    Источник

    

    Фундаментальные основы Linux. Часть II: Первые шаги в изучении интерфейса командной строки

    Глава 7. Работа с файлами

    Из данной главы вы узнаете о том, как определять тип файлов, создавать, удалять, копировать и перемещать файлы с помощью таких утилит, как file , touch , rm , cp , mv и rename .

    Все имена файлов регистрозависимы

    Имена файлов в Linux (или в любой системе Unix) являются регистрозависимыми. Это означает, что имена FILE1 и file1 не являются равноценными, а путь к файлу /etc/hosts отличен от пути к файлу /etc/Hosts (последнего файла не должно существовать в файловой системе типичного компьютера, работающего под управлением Linux).

    Все является файлом

    Любая директория на самом деле является файлом (с регистрозависмым именем!), хотя этот файл и имеет специальный тип. Каждый терминал (например, /dev/pts/4 ), любой жесткий диск или раздел на нем (например, /dev/sdb1 ) и любой процесс представлены где-либо в рамках файловой системы с помощью файла . После изучения данной главы у вас не останется сомнений в том, что в Linux все является файлом .

    Утилита file

    Утилита file использует файл со списком «магических последовательностей байт», содержащий шаблоны для распознавания типов данных. Файл со списком «магических последовательностей байт» расположен по пути /usr/share/file/magic . Используйте команду man 5 magic в случае необходимости получения дополнительной информации о нем.

    Утилита touch

    Создание пустого файла

    Один из простых способов создания пустого фала заключается в использовании утилиты touch . (Позднее в данной книге мы рассмотрим множество других способов создания файлов.)

    Команда touch -t

    Удаление файлов навсегда

    Утилита cp

    Копирование отдельных файлов

    Копирование файлов в другую директорию

    Копирование множества файлов в директорию

    Утилита mv

    Переименование файлов с помощью утилиты mv

    В том случае, если вам необходимо переименовать один файл, утилита mv является предпочтительным инструментом.

    Переименование директорий с помощью утилиты mv

    Утилита mv поддерживает параметр -i по аналогии с утилитами cp и rm .

    Утилита rename

    Об утилите rename

    Утилита rename является одним из редких случаев, когда в рамках книги «Фундаментальные основы Linux» приходится делать разделение между дистрибутивами Linux. Практически каждая из описанных в данной книге утилит работает практически на каждом компьютере под управлением Linux. Но реализации утилиты rename в различных дистрибутивах отличаются.

    Следует пытаться использовать утилиту mv всегда, когда вам необходимо переименовать несколько файлов.

    Утилита rename в дистрибутиве Debian/Ubuntu

    Утилита rename в дистрибутиве Debian имеет сложный синтаксис (используются регулярные выражения) для единовременного переименования множества файлов.

    Утилита rename в дистрибутиве CentOS/RHEL/Fedora

    Практическое задание: работа с файлами

    1. Выведите список файлов директории /bin.

    2. Выведите информацию о типах файлов /bin/cat, /etc/passwd и /usr/bin/passwd.

    3a. Загрузите файлы wolf.jpg и LinuxFun.pdf с ресурса http://linux-training.be (с помощью команд wget http://linux-training.be/files/studentfiles/wolf.jpg и wget http://linux-training.be/files/books/LinuxFun.pdf)

    3b. Выведите информацию о типах файлов wolf.jpg и LinuxFun.pdf.

    3c. Переименуйте файл wolf.jpg в wolf.pdf (с помощью команды mv).

    3d. Выведите информацию о типах файлов wolf.pdf и LinuxFun.pdf.

    4. Создайте директорию

    /touched и перейдите в нее.

    5. Создайте файлы today.txt и yesterday.txt в директории touched.

    6. Измените дату создания файла yesterday.txt таким образом, чтобы она совпадала с датой прошлого дня.

    7. Создайте копию файла yesterday.txt с именем copy.yesterday.txt.

    8. Переименуйте файл copy.yesterday.txt в kim.

    9. Создайте директорию с именем

    /testbackup и скопируйте все файлы из директории

    10. Используйте одну команду для удаления директории

    /testbackup и всех файлов из нее.

    11. Создайте директорию

    /etcbackup и скопируйте файлы с расширением .conf (*.conf) из директории /etc в нее. Проверьте, был ли осуществлен обход всех поддиректорий директории /etc?

    12. Используйте утилиту rename для переименования всех файлов с расширением .conf (*.conf) таким образом, чтобы расширения всех этих файлов изменились на .backup. (Если у вас есть возможность работы более чем со одним дистрибутивом, попробуйте выполнить эту операцию во всех этих дистрибутивах!).

    Корректная процедура выполнения практического задания: работа с файлами

    1. Выведите список файлов директории /bin.

    2. Выведите информацию о типах файлов /bin/cat, /etc/passwd и /usr/bin/passwd.

    3a. Загрузите файлы wolf.jpg и LinuxFun.pdf с ресурса http://linux-training.be (с помощью команд wget http://linux-training.be/files/studentfiles/wolf.jpg и wget http://linux-training.be/files/books/LinuxFun.pdf)

    3b. Выведите информацию о типах файлов wolf.jpg и LinuxFun.pdf.

    3c. Переименуйте файл wolf.jpg в wolf.pdf (с помощью команды mv).

    3d. Выведите информацию о типах файлов wolf.pdf и LinuxFun.pdf.

    4. Создайте директорию

    /touched и перейдите в нее.

    5. Создайте файлы today.txt и yesterday.txt в директории touched.

    6. Измените дату создания файла yesterday.txt таким образом, чтобы она совпадала с датой прошлого дня.

    7. Создайте копию файла yesterday.txt с именем copy.yesterday.txt.

    8. Переименуйте файл copy.yesterday.txt в kim.

    9. Создайте директорию с именем

    /testbackup и скопируйте все файлы из директории

    10. Используйте одну команду для удаления директории

    /testbackup и всех файлов из нее.

    11. Создайте директорию

    /etcbackup и скопируйте файлы с расширением .conf (*.conf) из директории /etc в нее. Проверьте, был ли осуществлен обход всех поддиректорий директории /etc?

    Будут скопированы исключительно файлы с расширением .conf (*.conf), находящиеся непосредственно в директории /etc/.

    12. Используйте утилиту rename для переименования всех файлов с расширением .conf (*.conf) таким образом, чтобы расширения всех этих файлов изменились на .backup. (Если у вас есть возможность работы более чем со одним дистрибутивом, попробуйте выполнить эту операцию во всех этих дистрибутивах!).

    Источник

    Записки IT специалиста

    Технический блог специалистов ООО»Интерфейс»

    • Главная
    • Linux — начинающим. Часть 4. Работаем с файловой системой. Теория

    Linux — начинающим. Часть 4. Работаем с файловой системой. Теория

    Умение работать с файловой системой — один из наиболее важных навыков для начинающих. Действительно, о какой работе с системой может идти речь, если вы не знаете где и какие системные файлы расположены, не можете свободно перемещаться по дереву каталогов и выполнять элементарные операции с файлами? Тем более, что эти вопросы в руководствах обычно не поднимаются, предполагая, что читатель обладает необходимым минимумом знаний и умений. Поэтому очередная часть нашего цикла будет посвящена именно работе с файловой системой.

    Перед тем как начать, вспомним, что такое файловая система. Прежде всего, это порядок, определяющий способ организации, хранения и именования информации на устройствах хранения, а только потом практическая реализация этого порядка. Т.е. первичен некий свод правил: что где лежит, как называется и т.д. и т.п., а практические реализации файловых систем, например, NTFS или ext4, это технический способ организации информации на определенном типе носителя в соответствии с принятыми правилами.

    За примерами далеко ходить не надо, каждый пользователь Windows знает, что файлы лежат в папках, папки на разделах (логических дисках), а систему следует искать в папке Windows системного диска. Точно также любой Linux администратор будет искать настройки в /etc, логи в /var/log, а свои собственные документы в /home.

    Так как большинство начинающих Linux администраторов уже имеют достаточный опыт работы с файловой системой Windows, то прежде всего мы рассмотрим, что общего у двух систем, а чем они отличаются. Понимание этих моментов поможет по максимуму использовать уже имеющийся опыт, в тоже время, не совершая глупых ошибок.

    Структура файловой системы

    Начнем с привычного и понятного.

    В основу файловой системы Windows положен диск, символизирующий собой отдельное устройство хранения информации. При этом каждый диск содержит свою собственную файловую систему, корень которой составляет он сам и обозначается буквой. Т.е. запись вида C:\ — обозначает корень файловой системы на диске С, а D:\Работа — папку в корне файловой системы диска D. Подключая к системе новый носитель информации мы получаем еще одну или несколько файловых систем.

    Это одна из самых больших привычек: подключили накопитель — в системе появился новый диск, если это не так, то накопитель либо не определился, либо неисправен.

    В Linuх концепция принципиально иная. Вспомним: все есть файл, дисковые накопители — это тоже определенный тип файла. Кроме того, файловая система Linuх иерархична, т.е. имеет один единственный корень, обозначаемый символом /.

    Этот момент вызывает у новичков множество непониманий. Но на самом деле нет ничего сложного, файловая система в Linux просто организована по-другому, но при этом она по-своему стройна, логична и понятна.

    Давайте еще раз рассмотрим схему с Windows. На ней имеется один физический диск для системы, второй для пользовательских данных и компакт диск с музыкой. А теперь взглянем на другую схему, где мы показали аналогичную организацию размещения данных в среде Linux.

    У нас также имеется системный диск, на котором расположен корень файловой системы и все системные папки. Пользовательские данные все также располагаются на втором физическом диске, но в системе вы его не увидите. Почему? Да потому что в файловой системе Linux такого понятия нет. Новички на этом месте обычно впадают в панику, считают что диск не определился и начинают судорожно искать его где можно и где нельзя.

    Но диск, с точки зрения Linux, это тоже файл и может быть расположен в любом месте файловой системы. В нашем случае никто не мешает поместить его на место папки /home, где располагаются пользовательские данные. Такое действие называется монтированием, а место файловой системы, к которому присоединен носитель — точкой монтирования. Таким образом папка /home целиком окажется на втором жестком диске, что будет в какой-то мере аналогично переносу пользовательских данных на диск D.

    Съемные носители, такие как компакт-диски, флешки и т.п. в графической среде монтируются автоматически в предопределенную директорию /media, а в рабочем окружении появляется ярлык, что делает работу с ними неотличимой от Windows. В серверной среде вам потребуется монтировать съемные носители вручную, также вы можете выбрать произвольную точку монтирования, но лучше не изобретать велосипед, а использовать /media.

    Еще один момент, связанный с иерархичностью файловой системы Linuх — это неизменность путей к данным при изменении физической структуры дисков. Простой пример: у вас есть большая коллекция музыки, которую вы решили вынести на отдельный жесткий диск. В Windows все просто: купили новый диск, подключили, скопировали. Но есть один недостаток. Если до этого пути к музыке были D:\Музыка, то стали E:\Музыка и все ранее созданные ярлыки, плейлисты и т.п. стали неверны.

    В Linux процесс выглядит немного посложнее: новый диск временно монтируется, скажем, в /mnt, затем на него переносится содержимое папки /home/Музыка, после чего он монтируется на постоянной основе в точку /home/Музыка. В итоге наша коллекция лежит на отдельном жестком диске, но все плейлисты как работали с /home/Музыка так и продолжают работать.

    Эту возможность трудно переоценить, особенно когда надо вынести на отдельный раздел не коллекцию музыки, а базу почтового сервера или содержимое хранилища виртуальных машин.

    Имена файлов и расширения

    Имена файлов и папок в Linux ограничены длинной в 256 символов и запретом на / (слеш). Отдельно следует упомянуть о символах . (точка) и

    (тильда), точка перед именем файла или директории добавляют ему атрибут «скрытый», а тильда после имени добавляет атрибут «архивный» и также делает файл скрытым. Например, .file — скрытый файл, а file

    Но это не говорит о том, что можно называть файлы, как вам нравится, без оглядки на иные системы, прежде всего Windows. Допустим, мы решили вопреки всем правилам назвать файл , в Linux нам никто не помешает этого сделать, но уже попытавшись скопировать его на флешку с FAT32 нас постигнет наказание, имя файла превратится в набор подчеркиваний.

    Если передать его по SSH то ситуация будет немного получше, подчеркиваниями заменятся только запрещенные символы, а просто перетащив файл из окна виртуальной машины мы получили третий вариант именования файла.

    Поэтому, если вы не хотите превращения имени вашего файла в нечто совершенно неожиданное, то не используйте в именах символы:

    Также не злоупотребляйте служебными символами в начале имени, например, никто не мешает создать вам файл с именем -text, однако при попытке скопировать его в консоли вы получите неожиданный результат:

    Еще одна важная особенность — Linux регистрозависимая система, это означает, что file.txt, File.txt и file.TXTтри разных файла!

    Пока вы работаете с такими файлами в среде Linux проблем не будет, но если мы их попытаемся скопировать на флешку FAT32, то сразу возникнут затруднения.

    Но это цветочки, ягодки будут тогда, когда вам понадобиться перенести на Windows платформу, скажем, веб-сайт со всем содержимым, куда на протяжении длительного времени заливались многочисленные image.jpg, Image.jpg или image.JPG.

    Поэтому примите к сведению и постарайтесь соблюдать еще одно простое правило: все имена файлов набирать только в нижнем регистре, верхний регистр допускается там, где он уместен, например, в именах собственных. Также не забывайте о спецсимволах. Почему? Просто посмотрите на скриншот ниже:

    Отдельный разговор — это пробелы в именах файлов. Такая практика не запрещается, но считается в профессиональных кругах дурным тоном. По возможности избегайте таких имен.

    Следующая особенность Linux-систем — это расширения файлов. В Windows тип файла полностью определяется его расширением, от которого также зависит дальнейшее поведение системы при работе с таким файлом. Все знают, что для того, чтобы скрипт мог запускаться, ему нужно присвоить расширение bat или cmd. В Linux поведение системы в отношении того или иного файла зависит от его типа, а для возможности запуска файл должен иметь установленный атрибут «исполняемый».

    Однако это не говорит, что Linux игнорирует расширения файлов. В графической среде, для удобства пользователя, расширения точно также ассоциируются с приложениями, как и в Windows. Но есть и отличия, вы можете дать файлу несуществующее расширение или оставить его без расширения вообще, система правильно определит тип содержимого и сопоставит его с программой. А вот присвоив ему зарезервированное расширение вы просто сопоставите файл программе, без учета его содержимого.

    Как видим документ LibreOffice успешно определяется последним невзирая на «левое» или отсутствующее расширение, но присвоив ему расширение jpg, мы сопоставим его программе просмотра изображений и получим ошибку при открытии.

    С изображением и иным медиаконтентом связана еще одна особенность, если у файла есть расширение, то система не будет определять его реальное содержимое и будет пытаться открыть его так, как указано в расширении. Простой пример: мы переименовали файл jpg в png, после чего получили ошибку при попытке его открыть, в тоже время тот же самый файл без расширения вообще открывается нормально.

    В Windows jpg переименованный в png (и наоборот) открываться будет нормально, разве что специализированный софт (например, Photoshop) станет ругаться. Поэтому если у вас в Linux перестали открываться мультимедийные файлы, которые нормально открываются в Windows, попробуйте просто удалить им расширение, чтобы система самостоятельно определила содержимое. Для примера мы специально удалили расширения у файлов различных типов, что из этого вышло можно увидеть ниже:

    Конечно не со всеми типами файлов все гладко, так документы формата MS Office 2007 и выше (docx, xslx и т.п.) будут определяться как zip-архивы, которыми на самом деле и являются, но мы думаем, что ситуация, когда вы получите офисный документ без расширения на практике вам не встретится.

    Жесткие и символические ссылки

    Начав работать с Linux вы обязательно столкнетесь с этим типом файлов. Они не имеют прямого аналога в файловой системе Windows и поэтому на них стоит остановиться подробнее.

    Начнем с символических ссылок, в первом и достаточно грубом приближении они напоминают ярлыки Windows, это специальный тип файла, который служит указателем на другой файл. Но при этом, в отличии от ярлыка, воспринимается системой прозрачно, т.е. не как файл ярлыка, а как файл типа, на который указывает ссылка. Проще говоря, мы не можем подсунуть Windows приложению ярлык на библиотеку вместо библиотеки, а в Linux это общепринятая практика.

    Разберем устройство символических ссылок подробнее, в дальнейшем это поможет понять их отличие от жестких ссылок и лучше понять сферу их применения. Как известно файл (или каталог) есть ничто иное, как некая именованная область на диске. Соответствие имени файла областям диска хранится в специальной таблице файловой системы (inode в Linux, MFT или FAT в Windows), т.е. файл — это указатель в inode на определенную область данных на диске.

    Символическая ссылка — это отдельный файл, со своим inode, который указывает на изначальный файл. Если первоначальный файл будет удален или перемещен, символические ссылки останутся, но окажутся бесполезными. В тоже время мы можем как угодно перемещать символические ссылки или удалять их, что никак не скажется на первоначальном файле.

    Символические ссылки широко применяются в случаях, когда один и тот-же файл должен быть доступен под разными именами или в разных местах, но при этом его содержимое не должно меняться. Например, некое приложение требует библиотеку lib-1.0.1.so, в то время как есть совместимая библиотека lib-1.0.5.so, в этом случае создаем символическую ссылку на lib-1.0.5.so с именем lib-1.0.1.so и проблема решена. Другой случай, приложение требует lib-1.0.5.so, которая есть в системе, но ищет ее в другом месте, в этом случае делаем символическую ссылку с таким же именем, но в нужное расположение.

    Визуально символические ссылки можно определить по значку ярлычка в графическом окружении или по символу @ перед именем файла в mc (но, если вы создадите файл с началом имени на @ — символической ссылкой он не станет).

    Другое применение, это файлы настроек. Например, веб-сервер Аpache содержит два набора директорий: с доступными модулями и настройками, и применяющимися в текущий момент. Для того, чтобы подключить модуль или настройку достаточно сделать символическую ссылку из одной директории в другую, надо выключить — удаляем символическую ссылку. Сам файл модуля или настроек остается на своем месте и может быть использован в дальнейшем.

    Символические ссылки можно создавать не только на файлы, но и на каталоги. Также нет ограничения на физическое расположение символических ссылок в пределах одной физической файловой системы (одного раздела).

    Жесткие ссылки. Это принципиально иная сущность. Жесткая ссылка создает еще одну запись в inode файла, т.е. по сути является еще одним его именем, а внешне является полной копией первоначального файла, определить при этом где файл, а где жесткая ссылка практически невозможно. Отличие жесткой ссылки от копии заключается в том, что несмотря на разные имена, это один и тот-же файл и, если изменить одно из его имен — изменятся остальные. Также файл физически существует до тех пор, пока на него есть хоть одна ссылка (первоначальный это файл или символическая ссылка — значения не имеет).

    Для чего могут понадобиться жесткие ссылки? Самое распространенное их применение, это создание полных копий файла без лишних затрат дискового пространства. Например, инсталляционные пакеты. Допустим нам надо выложить на FTP несколько вариантов ПО, в каждый из наборов которого входят некие общие пакеты и документация, причем нужна синхронизация между этими файлами, например, если мы внесли изменения в документацию, это должно отразиться во всех наборах. Жесткие ссылки отлично решают эту задачу.

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

    Жесткие ссылки, так как являются дополнительной записью в inode, могут использоваться только в пределах одного физического раздела. Также спецификации POSIX запрещают создание жестких ссылок для каталогов.

    Права доступа

    Еще одним неотъемлемым атрибутом любой файловой системы являются права доступа к файлам и папкам. Linux унаследовал классическую UNIX-систему прав, они не так гибки, как хотелось бы, но обеспечивают приемлемый уровень гибкости и безопасности для простых систем.

    Права доступа к файлу (а как мы помним, в Linux все есть файл) хранятся в специальном 16-битовом поле атрибутов файла:

    Тип объекта Особые признаки Права доступа
    SUID SGID sticky Пользователь Группа Остальные
    # # # # s s t r w x r w x r w x

    Первые четыре бита устанавливают флаг типа объекта, они задаются при создании файла и не могут быть изменены. Флаг может иметь следующие значения:

    • — Отсутствие флага — обычный файл
    • l — Символическая ссылка
    • d — Директория
    • b — Блочное устройство
    • c — Символьное устройство
    • p — Канал, устройство fifo
    • s — Unix-сокет

    Следующие три бита хранят особые признаки, влияющие на запуск исполняемых файлов и некоторые иные права, к ним мы вернемся несколько позже. И наконец следующие девять бит, разделенные на блоки по три бита содержат права доступа к файлу или директории.

    Каждый файл в UNIX должен иметь владельца (пользователь, user), группового владельца (группа, group) и остальных пользователей (остальные, other), каждый из этих пользователей может иметь права на чтение (r), запись (w) и исполнение (x).

    Применительно к каталогам флаги имеют несколько иной смысл: r — право получения имен файлов в каталоге (но не их атрибутов), x — право получения доступа к файлам и их атрибутам, w — право манипулировать именами файлов, т.е. создавать, удалять, переименовывать. Минимальный разумный набор прав на каталог: rx-, так как только r позволит получить только имена файлов, но не их тип, размер и т.п. Ниже показан пример папки с набором прав r—.

    Как нетрудно заметить, w без х не имеет никакого смысла и равносильно его отсутствию.

    Запись прав может производиться как в символьной, так и в числовой форме, для этого используют двоичное или восьмеричное (что удобнее) значение установленных битов.

    OCT BIN Символьное Права на файл Права на каталог
    000 отсутствие прав отсутствие прав
    1 001 —x право на исполнение право на доступ к файлам и атрибутам
    2 010 -w- право на запись отсутствие прав
    3 011 -wx право на запись и исполнение все права, кроме получения имен файлов
    4 100 r— право на чтение право на получение имен файлов
    5 101 r-х право на чтение и исполнение право на получение имен файлов и доступ к ним
    6 110 rw- право на чтение и запись право на получение имен файлов
    7 111 rwx все права все права

    В то время, как в системе используются преимущественно символьные обозначения, для целей администрирования обычно используются цифровые восьмеричные значения. Потому что проще, быстрее и удобнее написать, что права на файл должны быть 644, а не rw-r—r—.

    В тоже время символьная запись позволяет быстро оценить реальный набор прав, а не вспоминать, что значит 755. Стандартные права для вновь создаваемых файлов — 664, папок — 775, исключение — файлы и каталоги, созданные с правами суперпользователя, они получают 644 и 755 соответственно.

    На практике из всех сочетаний флагов доступа реально используются только 0, 4, 5, 6, 7 для файлов и 0, 5, 7 для папок.

    Разобравшись с основными правами перейдем к особым признакам, таких три:

    OCT BIN Наименование Действие
    1 001 sticky удалить файл может только владелец или root
    2 010 SGID файл запускается на исполнение с правами группового владельца
    4 100 SUID файл запускается на исполнение с правами владельца

    Начнем с младшего бита, его установка означает установку sticky-бита для каталога, установка данного флага для файлов в современных системах игнорируется. Дословно sticky обозначает «липкий», что довольно хорошо соответствует его смыслу. После установки данного флага удалить файл из каталога может только его владелец или суперпользователь, даже если на файлы и папку стоят права 777.

    Эта опция может быть использована для организации файловых серверов типа «файлопомойка», когда нужно организовать доступ для всех, без разбора, но исключить возможность случайного или преднамеренного удаления чужих файлов. Установить sticky-бит может только суперпользователь, снять — суперпользователь или владелец каталога.

    Опции SUID и SGID позволяют любому пользователю запускать файл на исполнение с правами его владельца или группы. Для чего это нужно? В обычных условиях файл запускается с правами текущего пользователя, что не всегда достаточно для его работы. Например, таким образом работает утилита passwd, нам нужно чтобы пользователь имел возможность изменить свой пароль без повышения прав, но данная операция требует прав суперпользователя. Как быть? Использовать признак SUID. Если мы проверим права на утилиту, то увидим запись rwsr-xr-x или 4755.

    При установке признаков SUID и SGID они заменяют символ x на s в соответствующей группе символьного представления или записываются перед основными правами в восьмеричном виде. Вообще-то в цифровом виде все права следует записывать в четырехзначном формате, так как если особые признаки не установлены, то это 000 BIN или 0 OCT. Т.е. правильно писать не 777, а 0777, но обычно для краткости первый ноль опускают.

    Если установлены несколько признаков, то записывается восьмеричное число аналогичное установленным битам в двоичном формате, например, SUID + sticky это 101 BIN или 5 OCT. Установленный sticky-бит заменяет x на t в группе other. Ниже показан каталог с правами 7775 или rwsrwsr-t, что соответствует установке на него SUID, SGID и sticky-бит одновременно.

    Данная запись сделана нами исключительно в тестовых целях, так как установка SUID для каталога не имеет смысла, а установка SGID приведет к тому, что групповым владельцем создаваемых в нем файлов будет группа владельца каталога, а не группа создавшего его пользователя, как происходит по умолчанию. Также, ввиду потенциальной опасности, игнорируется установка SUID и SGID для скриптов.

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

    В XFCE не потрудились задать понятные и логичные наборы для файлов и папок, ограничившись стандартным перечислением, включая бесполезные -w- и -wx, также отсутствует явное указание признака «исполняемый», вместо этого флаг x автоматически добавляется к любому набору прав владельца.

    И наконец KDE сочетает достаточно лаконичный основной набор прав с возможностью установки признака «исполняемый» для файлов и sticky-бит для папок с возможностью явно указывать особые признаки в дополнительных настройках.

    В любом случае следует помнить, что графический интерфейс не является основным средством администрирования Linux, а представляет надстройку над средствами командной строки. В следующей части нашей статьи мы как раз уделим внимание приемам работы с файловой системой Linux в консольной среде.

    Дополнительные материалы:

    Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

    Или подпишись на наш Телеграм-канал:

    Источник

    Читайте также:  С чего начинать тренировку собаки