Как стать автором
Обновить

Комментарии 21

Во многих мануалах после имени команды в скобках стоит число. Что оно означает?
Это номер раздела man. Есть статьи которые называются одинаково, но находятся в разных разделах man.
Иногда мануал разбит на несколько частей, которые положены в разные разделы. Или, например, просто лежит в дальнем ящике. Если вы точно знаете, что хотите прочитать мануал «не для всех», можно вызвать его, напрямую указав раздел: `man 7 undocumented`.
Запустите программу wc, введите текст Good day today, нажмите Enter, введтие текст good day, нажмите Enter, нажмите Ctrl+d. Программа wc покажет статистику по количеству букв, слов и строк в вашем тексте и завершится:

А выведено как кол-во строк, кол-во слов, кол-во букв.
Поправьте, пожалуйста.
Скопировать и вставить в терминалах:

Ctrl-Shift-C/Ctrl-Shift-V

Cmd-Shift-C/Cmd-Shift-V
Или Ctrl-Insert/Shift-Insert
Можно представить себе так: программа — это труба, в которую втекает STDIN, а вытекает STDOUT.

Скорее труба с разветвлением на конце: stdin и stderr
Поправочка — на конце stdout и stderr
Да, спасибо, очепятка)
Прочитал статью. Как то все сумбурно и непонятно. Начиная от названия. А что такое Unix shell, это sh,ksh,csh,bash и т.д.? Догадываюсь bash, но тогда причем тут curl, awk, sed и т.д. Целая глава относится к COPY/PASTE который к shell, никакого отношения не имеет. В общем не рекомендовал бы я читать эту статью новичкам, так как никакого комплексного подхода нет, а стиль написания статьи окончательно запутает человека желающего понять shell.
~$ lsb_release -d
Description:	Ubuntu 15.04
~$ tree
The program 'tree' is currently not installed. You can install it by typing:
sudo apt-get install tree

Для «полного новичка» может быть непонятно, что вообще происходит.

Отмечу важный приятный момент — упражнения! Именно их обычно не хватает в обучающих статьях.

Но в целом, статья — «галопом по Европам». Про shell если уж и писать, то обстоятельно, лучше задерживаясь на узкой сфере: или работа с процессами, или работа с файловой системой, или обработка содержимого файлов. Так можно набрать приличный цикл статей, куда уже и отсылать новичков.

З.Ы. на ЛОРе было замечательное введение в shell, но сейчас не могу его найти.
На opennet, конечно же, тоже стоит поискать. Например, раз, два.
В качестве шпаргалки
tree в убунту и не идет по-умолчанию
Я к тому, что у автора
Абсолютно первые шаги
Начинаем работу: войти и выйти
Убедитесь, что точно знаете, как запустить шелл и как из него выйти.
Если вы работаете за машиной, на которой установлена Ubuntu, вам надо запустить программу Terminal. По окончании работы можно просто закрыть окно.

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

Более того, ни до, ни после я не увидел команд для работы ни с менеджерами зависимостей, ни с менеджерами пакетов. А это, в данном контексте, уже явный косяк.
А что таких статей вообще ни одной не было? Тем более написана она не лучшим образом.
Автор, извините, но Ваша статья вероятно лишь запутает новичков. Приложение Терминал в ОС и командную оболочку смешивать не стоит. Навигация по каталогам идёт вперемешку с непонятными новичкам командами со сложными аргументами. Лучше почитать цикл m.habrahabr.ru/post/99041.
sudo не выполняет команду от имени root. Правильнее говорить, что команда выполняется с правами, как у root. Это немного разные вещи.

Например есть модуль forever, позволяющий запускать nodejs скрипты как демонов. Команда «forever list» покажет список запущенных процессов текущего пользователя. Но команда «sudo forever list» не покажет процессы запущенные под root. Для этого надо залогинится под root (sudo su например) и уже там выполнить команду.
В качестве контр-примера: «sudo touch test» создаёт файл, которым владеет root. Команда mkdir тоже создаст директорию, которой владеет рут. В дополнение, в документации по sudo написано, что с её помощью выполняются команды в качестве другого пользователя — происходит не просто наделение полномочиями.

У forever есть баг интересная особенность, связанная с тем, что эта команда ищет .forever в домашней директории. При использовании sudo домашняя директория не переопределяется. Если пользователь username выполняет команду через sudo, он выполняет её от имени root, но домашней остаётся директория /home/username. Для примера, можно запустить команду «sudo ls ~» — она выведет содержимое домашней папки пользователя, а не папки root.

Мне кажется, что такое поведение команды forever, которое вы описали, — это её личные особенности. Опять же, куча других примеров, более близких к шеллу, чем модуль от node.js, показывает, что идёт исполнение от имени рута.
sudo -H же
При использовании sudo ls ~ происходит не то, что вы думаете. ~ раскрывается оболочкой до того, как будет запущено sudo. Так что вызывается команда sudo с аргументами ls и /home/…, независимо от того, будет ли sudo что‐то делать с переменной $HOME или нет. Можете проверить с помощью strace. Или с помощью env HOME=/tmp ls ~: использует именно ваш домашний каталог. env HOME=/tmp sh -c 'ls ~' выведет содержимое /tmp. env HOME=/tmp ls '~' заявит, что знать не знает никакого каталога ~, если только у вас случайно не найдётся каталог ./~.
Очередной «Велосипед».
Упс… Извините, уточняю мысль:

Автор проделал большую работу, которая несомненно достойна уважения. Но у меня сложилось мнение, что тут не отражена одна очень-очень важная мысль, которую желательно довести новичку с самого начала работы в интерфейсе командной строки. Ведь статья для новичков не так ли?

Так вот, в каждой командной оболочке текстового режима (bash, sh, csh, zsh и даже cmd) всегда есть всего несколько встроенных (основных) команд, которыми всегда можно пользоваться в любой операционной системе, в которой запущена эта оболочка. Например, в bash это команды
cd, echo, exec, exit, help, history, kill, pwd, logout


и еще несколько служебных. (Если интересно, то их полный список можно увидеть при помощи команды «man bash» в разделе «SHELL BUILTIN COMMANDS».)

Все остальные команды (упомянутые автором tree, awk и другие) это дополнительные программы (исполняемые файлы или скрипты), которые были размещены автоматически программой установки операционной системы или позже, администратором системы. И основная задача командной оболочки — это всего лишь предоставить возможность выполнить любую из них.
Sapienti sat.

Забавный пример — если установить Bash в систему MS-Windows, то из bash можно запустить программу «Блокнот» набрав в командной оболочке:

~$ notepad.exe


И это работает, потому что программа «notepad.exe» всегда есть в указанной операционной системе.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации