Консоль для новичка. Часть 2.

    И так продолжаю вводить новичков в курс дела. Это уже вторая статья, первая находиться здесь.



    После того, как вы уверенно можете разгуливать по просторам файловой системы с помощью консоли, необходимо узнать собственно о её формировании. Предположим, что Вам понадобилось создать директорию, в этом случае воспользуйтесь командой mkdir.
    vir@home:~$ mkdir Test
    vir@home:~$ ls
    Images Other Test Work Рабочий стол

    В этом примере мы создали директорию тест, находясь в рабочей директории /home/vir. Однако, как я уже говорил многим утилитам можно передавать параметр, поэтому попробуем создать директорию указав для нее полный путь:
    vir@home:~$ mkdir /tmp/Test

    Здесь с помощью переданного параметра мы указали утилите, что бы она создала директорию Test в директории /tmp. Опять же вспомнив о ключах (опциях), которые можно передавать утилитам, и еще раз убедимся, что это крайне полезная возможность, например Вам необходимо создать директорию /tmp/Test/One/More, в данном случае у нас уже существуют директории /tmp и /tmp/Test, остается создать /tmp/Test/One и /tmp/Test/One/More. Пробуем:
    vir@home:~$ mkdir /tmp/Test/One/More
    mkdir: cannot create directory `/tmp/Test/One/More': No such file or directory

    Не получилось. Но не переживайте. Не получилось потому, что мы пытаемся создать директорию /tmp/Test/One/More, в то время, как директории /tmp/Test/One не существует. Можно конечно создать их по очереди, но зачем когда есть ключи? Воспользуемся ключем -p:
    vir@home:~$ mkdir -p /tmp/Test/One/More

    С помощью этого ключа мы создаем все недостающии в пути директории, если это необходимо. Да, кстати, не будет вредным информация о том, что mkdir сокращение от Make Directory (создание директории).

    С созданием директорий разобрались, теперь попробуем создать файл:
    vir@home:/tmp/Test$ touch file
    vir@home:/tmp/Test$ ls -l
    total 4
    -rw-r--r-- 1 vir vir 0 2008-07-15 21:41 file
    drwxr-xr-x 3 vir vir 4096 2008-07-15 21:38 One

    И так, с помощью команды touch мы создали в файл с именем file. Файл этот пустой, не занимает место на жестком диске. Вы спросите: «А как же понимать по выводу команды ls, где файл, а где директория?». Все очень просто, во первых во всех современных дистрибутивах команда ls является алиасом на команду ls --color=auto, а это значит, что директории и файлы подсвечиваются разными цветами (правда в разных дистрибутивах по разному). Второй способ это определить по выводу команды ls -l:
    vir@home:/tmp/Test$ ls -l
    total 4
    -rw-r--r-- 1 vir vir 0 2008-07-15 21:41 file
    drwxr-xr-x 3 vir vir 4096 2008-07-15 21:38 One

    Обратите внимание на букву «d», которую в примере я выделил красным цветом, она то и показывает нам, что One является директорией, а file с пустым аттрибутом (с черточкой).

    Перейдем к перемещению файлов и директорий. Для перемещения служит команда mv (сокращение от move (двигать)). Пример:
    vir@home:/tmp/Test$ mv file One/
    vir@home:/tmp/Test$ ls One/
    file More

    И так, мы переместили файл file из директории /tmp/Test в директорию /tmp/Test/One. Тут все просто. Если хотите переместить файл, и одновременно дать ему другое имя, то это необходимо четко указать:
    vir@home:/tmp/Test$ mv One/file ../moved_file
    vir@home:/tmp/Test$ ls
    moved_file One

    Здесь помимо того, что мы переместили файл file обратно в директорию /tmp/Test, так еще и задали ему новое имя moved_file.
    Ну и для окончательного понимания работы команды mv, покажу, что она может использоваться и просто для переименования файла (без перемещения):
    vir@home:/tmp/Test$ ls
    moved_file One
    vir@home:/tmp/Test$ mv moved_file new_name
    vir@home:/tmp/Test$ ls
    new_name One
    vir@home:/tmp/Test$

    Пойдем дальше… к копированию. Копировать файлы так же просто, как и перемещать. Принцип абсолютно такой же:
    vir@home:/tmp/Test$ cp new_name second_file
    vir@home:/tmp/Test$ ls -l
    total 4
    -rw-r--r-- 1 vir vir 0 2008-07-15 21:41 new_name
    drwxr-xr-x 3 vir vir 4096 2008-07-15 21:54 One
    -rw-r--r-- 1 vir vir 0 2008-07-15 21:59 second_file

    Думаю здесь все абсолютно понятно. И наверное вы уже догадались, что cp это сокращение от copy (копия).
    В ходе обучения мы с вами понасоздавали много ненужного (учебного) мусора. Что ж, пришло время все это подчистить. Начинали мы с Вами с домашней директории, туда и отправимся:
    vir@home:/$ cd ~
    vir@home:~$ ls
    Images Other Test Work Рабочий стол
    vir@home:~$

    Здесь мы перешли в домашнюю директорию и просмотрели, какой же мусор у нас там лежит. Да, кстати, для того, что бы быстро перейти в в свою домашнюю директорию (/home/имя_пользователя) достаточно воспользоваться алиасом "~".
    И так мы видим следы от наших проб — это директория Test, которая нам уже не нужна, и мы ее удаляем:
    vir@home:~$ rm -rf ~/Test

    Здесь я еще раз пользуюсь возможностью "~", это равносильно указанию абсолютного пути /home/vir/Test. Значит для удаления мы используем утилиту rm (сокращение от remove (удаление)). Ключи -rf — это моя привычка. А именно ключ -r означает — рекурсивно, то есть удалять все, что в этой директории включая ее саму. Если бы мы не использовали бы этот ключ при удалении директории Test, мы получили бы ошибку:
    vir@home:~$ rm -f Test
    rm: cannot remove `Test': Is a directory

    А ключ -f говорит нам о том, что нет необходимости каждый раз спрашивать нас о том, уверены ли мы, что хотим что-то удалить. Поэтому я привык использовать rm -rf, хотя не поощраю такое использование утилиты rm. Думаю теперь вы понимаете, что не следует слушать советы различных «гуру», говорящих вам, о том, что "rm -rf /" лечит от всех бед. Догадаться о значение этой строки теперь Вам не сложно.

    И еще, помните мы создавали тестовые директории и файлы в директории /tmp? Удалим их тоже:
    vir@home:~$ rm -rf /tm[Tab]p/Test/
    Что за странные "" спросите Вы? Я отвечу, таким образом я отобразил нажатие кнопки Tab, на вашей клавиатуре. То есть, я набрал rm -rf /tm затем нажал Tab, и о чудо! Остальные символы p/ добавились сами, затем я набрал просто большую букву T и снова нажал Tab, опять чудо! Символы est/ добавились сами! А все потому что в консоли кнопка Tab является незаменимым помощником-автодополнителем. Конечно в моем примере использование этой кнопки не очень сокращает время, но вы представьте, что у Вас существует директория fotografii-moey-lyubimoy-devushki. Что длиновато? Вот тут Вам и поможет Tab. Набираете foto, жмете Tab и все остальное дополняется само. А что если у Вас две дериктории или два файла, которые начинаются на "foto"? Тогда консоль Вам отобразит оба варианта, пока написаное выражение не будет совпадать только с одним. Пример:
    vir@home:~$ mkdir foto-moey-devushki
    vir@home:~$ mkdir foto-brata-Olega
    vir@home:~$ rm -rf foto-
    foto-brata-Olega/ foto-moey-devushki/

    Выдается два варианта, четко дав понять, что директорий начинающихся на "foto-" две. Дополнять пока между ними не будет разницы придеться вручную :). Ну про Tab я Вам объяснил, теперь удалим-ка ненужные директории:
    vir@home:~$ rm -rf foto*

    И опять фокусы, в виде каких-то звездочек (*). А это ничто иное как понятие регулярных выражений. Регулярные выражения тема довольно-таки сложная и мы в нее вдаваться не будем, а вот самостоятельно почитать о них, вам не помешает. Я же Вам объясню про звездочку — так как мы имели две директории со схожим началом "foto" мы можем удалить их одновременно указав только начало. Потому что звездочка (*) подразумевает под собой любое количество, любых символов. То есть дословно:
    vir@home:~$ rm -rf foto*
    Удалить все, что начинается на foto

    Еще пример со зведочкой, предположим у Вас в директории 10 файлов с расширением mp3, и 20 файлов с расширением ogg! Да, мы не любим пропиетарщину, поэтому удалим все mp3 файлы. Но по отдельности это сделать трудоемко, указывая название каждого файла, поэтому воспользуемся магической звездой:
    vir@home:~$ rm -rf *.mp3

    Думаю суть звезды теперь Вам понятна.

    Еще я бы хотел Вам рассказать о великой утилите man. man (сокращение от man (руководство)) позволяет читать руководство по утилитам, различным конфигурационным файлам и прочих вещей. Пользуемся ей так:
    vir@home:~$ man rm

    И у Вас появится руководство по утилите rm. Это незамения утилита, которая должна сопровождать Вас всю вашу сознательную жизнь в Linux'e.

    На сегодня пожалуй хватит. После этой лекции Вы можете не только ходить по просторам файловой системы (ФС), но и формировать её собственноручно. Помимо этого не забывайте фокусы с ~, *, .., Tab.

    Спасибо за внимание.

    P.S. Решил не делать статью огромной и нагруженной. Лучше качественно и понемногу, что бы не переусердствовать.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 29

      0
      В целом все разжевано хорошо.

      Добавим еще:
      touch имя_файла - создать пустой файл
      cp -r директория новое_имя - копирование директории
        0
        В статье написано про touch =)
          0
          сорри.. не заметил
            0
            И про cp тоже =)
              0
              вы написали только про копирование файла.
              Попробуйте скопировать директорию и Вым выдаст ошибку.

              Поэтому я дополнил. Обидеть не хотел
                0
                А так вы именно про ключ. Да спасибо за дополнение. А обижаться не в коем случае, не маленькие же дети :)
        0
        надо было про пользование man написать.
        очень часто после того как народ входит в man он не может от туда выйти =)
        так что поиск и выход по\из man стоит дописать
          0
          Мне было сложнее выйти из vi в первый раз, пришлось гуглить.
            0
            Про man пользователь обычно узнает раньше, чем про Vim, ihmo. Наследие от RTFM ))
          0
          Спасибо автору, но, как мне кажется, подобные команды уже не существенно важны в повседневной работе, т.к., как правило, везде стоит mc, который и помогает нам выполнить аналогичную работу быстрее.

          вот назначение и работа с пермишенами - хотелось бы про это прочитать далее :) А "далее" будет?
            0
            Конечно будет. Только не сегодня. Скорее всего завтра.
            0
            первая находиться здесь

            находится (в смылсе "что-то где-то находится") пишется без мягкого знака.


            Ну а в общем, написано нормально, но хотелось уточнить, что звездочки в данном контексте называть регулярными выражениями некорректно! Это НЕ регулярные выражения, а маски (большая разница на самом деле). wildcards по аглицки.

            Если уж заговорили о масках, то стоит отметить, что маски в UNIX и DOS, работают несколько отличным, хоть и похожим образом. Не знаю, знает ли кто-то из потенциальных читателей, оболочку DOS, но все равно наверное стоит сказать.

            В DOS понятие имя файла-расширение четко детерминировано. Расширение является, строго говоря, частью ФС (ее организации). В UNIX понятие расширения чисто условное, и создано для удобства пользователя. В UNIX может быть несколько расширений, как например .tar.bz2 Однако, я отвлекся.

            Говоря о масках, надо сказать что маска *.* будет работать по-разному в UNIX и в винде (DOSе).
            В винде данная маска означает любой файл, в то время как в UNIX, маска означает любой файл, с точкой в имени. То есть, UNIX не выделяет особым образом точку, а считает ее частью имени. На первый взгляд это не существенно, но я сталкивался с большим количеством людей, не понимающих этого момента. Просто, хочется предостеречь от возможных ошибок.
              0
              Более того, в юниксе говорить "расширение" не принято по этой причине. А принято "суффикс" :)
              И кстати, вместо cd ~ вполне достаточно просто cd.
                0
                Я с тем учетом, что бы они знали про cd ~/Images. Без "~" вы тоже сумеете?
                  0
                  Конечно:
                  cd
                  cd Images

                  Нажатий столько же, а тянуться к тильде не надо.
              0
              laptop:~$ "/home/roman/Рабочий стол" mv qg.php /var/www/
              bash: /home/roman/Рабочий стол: is a directory

              что я не так сделал?
                0
                а что вы вообще хотели сделать?
                  0
                  может все-таки mv "/home/roman/Рабочий стол/qg.php" /var/www ?
                    0
                    да, именно так и сделал. извиняюсь за невнимательность)
                  0
                  man (сокращение от man (руководство))
                  Наверно, всё-таки, сокращение от manual
                    0
                    Оп-с =) точно.
                    0
                    А если вдруг кто-то воспользуется великой утилитой man и прочитает man touch, то обнаружит, что touch на самом деле не команда для создания файлов, и что это самое создание является лишь побочной фичей :)

                    Еще можно упомянуть копирование/перемещение/удаление нескольких файлов через перечисление:
                    cp/mv/rm /source/path/{file1,file2} /destination/path/
                      0
                      Дело в том, что в основном эту утилиту (touch) и используют для извлечения "побочного эффекта". Но хотя вводить новичков в заблуждение тоже не хорошо. Спасибо за совет.
                        0
                        На самом деле, я на своей памяти ни разу, кажется, не использовал touch для создания файла. Обычно либо создаешь текстовый файл сразу редактором (vi/nano filename) или же сразу заполняешь его какой-то информацией (echo 'some text' > filename).

                        А вот обновить информацию о времени доступа — это бывало.
                        Хотя, каждому, видимо, свое :)
                      0
                      Спасибо большое! Очень приятно учиться по таким руководствам. С одной стороны, не слишком официально (и не переполнено лишней информацией), с другой стороны, довольно подробно. Если следовать по тексту и импровизировать с командами в тестовом каталоге, то за пятнадцать минут приобретаются полезнейшие рефлексы на всю жизнь (и хорошо, что расшифровываете названия команд, хотя о них и можно догадаться, от этого легче запоминать, было бы неплохо и ключи расшифровывать тоже).
                        0
                        Спасибо. Именно такие комментарии дают силы писать продолжение. Так как после негативных высказываний, решил, что это не надо ни мне, ни людям. Но сейчас вижу обратное. Снова появился стимул.
                          +1
                          :-) Я вас прекрасно понимаю.

                          Но вы же пишете для новичков в консоли. Кто из новичков сказал Вам "нет, нам этого не надо"?
                            0
                            Может проблема в том, что человек сам себе нем может признаться, в том, что он - новичек.
                              0
                              Да, да, это очень стыдно, работать айтишником и признаться, что ты не умеешь работать с консолью. :-) Особенно, если ты почётный хабратчанин.

                      Only users with full accounts can post comments. Log in, please.