Чем отличаются командные строки в linux macos и windows

Обновлено: 06.07.2024

Я использую Ubuntu в течение последних четырех лет.
У меня есть базовые знания команд и я предпочитаю работать в терминале, а не через графический интерфейс. Недавно я начал использовать Mac.

Я пробовал несколько команд терминала (которые я использую на Ubuntu) в терминале Mac, и он, похоже, реагирует в основном одинаково.

есть ли какие-либо существенные различия в командах, которые я использую, задаче (задачах), которые они выполняют, или среде оболочки, которой я должен быть в курсе?

если вы сделали новую или чистую установку OS X версии 10.3 или более поздней, оболочка пользовательского терминала по умолчанию-bash.

Bash-это, по сути, расширенная и бесплатная версия GNU оригинальной оболочки Bourne, sh. Если у вас есть предыдущий опыт работы с bash (часто по умолчанию в установках GNU/Linux), это делает опыт командной строки OS X знакомым, в противном случае рассмотрите возможность переключения вашей оболочки либо на tcsh, либо на zsh, поскольку некоторые считают их более удобными для пользователя.

если вы обновили или используете OS X версии 10.2.x, 10.1.x или 10.0.x, пользовательская оболочка по умолчанию-tcsh, Расширенная версия csh ('c-shell'). Ранние реализации были немного глючными, а синтаксис программирования немного странным, поэтому он разработал плохой рэп.

есть еще некоторые фундаментальные различия между mac и linux, как Гордон Дэвиссон так метко перечисляет, например нет useradd на Mac и ifconfig работает по-разному.

следующая таблица полезна для знание различных оболочек unix.

вы также можете найти эти руководства полезными:

в заключение, я нахожусь на Linux (Ubuntu 11) и Mac osX, поэтому я использую bash, и то, что мне нравится больше всего, - это настройка .bashrc следующее (источник из .bash_profile на OSX) файл с псевдонимами, некоторые примеры ниже. Теперь я выделил все свои псевдонимы .bash_aliases файл и включить его с:

в рамках .bashrc or .файл bash_profile.

обратите внимание, что это пример разницы mac-linux, потому что на Mac вы не можете иметь --color=auto . В первый раз, когда я сделал это (не зная), я переопределил ls быть недействительным, что было немного тревожно, пока я не удалил --auto-color !

@Michael Durrant's answer умело охватывает саму оболочку, но среда оболочки также включает в себя различные команды, которые вы используете в оболочке, и они будут похожи-но не идентичны-между OS X и linux. В общем, оба будут иметь одинаковые основные команды и функции (особенно те, которые определены в стандарте Posix), но многие расширения будут разными.

например, системы linux обычно имеют useradd команда для создания новых пользователей, но OS X нет. В OS X вы обычно используете GUI для создания пользователей; если вам нужно создать их из командной строки, вы используете dscl (которого нет в linux) для редактирования базы данных пользователей (см. здесь).

кроме того, некоторые команды, которые у них есть, будут иметь разные функции и параметры. Например, линуксы обычно включают GNU sed , который использует -r возможность вызова расширенных регулярных выражений; в OS X вы бы использовали -E возможность получить то же самое эффект.

EDIT: другое отличие заключается в том, что многие команды linux позволяют указывать параметры после их аргументов (например, ls file1 file2 -l ), в то время как большинство команд OS X требуют, чтобы опции были строго первыми ( ls -l file1 file2 ).

наконец, поскольку сама ОС отличается, некоторые команды ведут себя по-разному между ОС. Например, в linux вы, вероятно, используете ifconfig изменить конфигурацию сети. На OS X, ifconfig будет работать (вероятно, со слегка другой синтаксис), но ваши изменения, скорее всего, будут перезаписаны случайным образом демоном конфигурации системы; вместо этого вы должны отредактировать сетевые настройки с помощью networksetup , а затем пусть демон конфигурации применит их к состоянию живой сети.

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

Знание того, что Mac построен на Unix, заставляет задуматься, а не сладкое ли это место между ними. Но мне интересно: насколько похожа командная строка Mac на bash Linux ? Могу ли я разобраться с использованием сценариев vim, bash, git и т. Д.? Будут ли общие команды, такие как изменение каталогов, другими? Кто-нибудь знает онлайн ресурс "сравни и сравнивай"?

Bash - это bash, поэтому оболочка и ее встроенные компоненты совпадают. Но учтите, что поведение некоторых инструментов, таких как ps или head может отличаться в деталях, может привести к сбою ваших сценариев.

Имейте в виду, что это не столько проблема Mac против Linux, сколько различные варианты Unix, но это немного другая проблема. Вы найдете то же самое (на самом деле больше различий) между Linux и, например, HP-UX. Вы можете стандартизировать набор инструментов gnu binutils для Linux и OSX. Macports и homebrew будут установлены на OSX. Это как минимум стандартизирует такие вещи, как ls / tar / etc. PS по-прежнему зависит от ОС. также file : file -i на linux в то время как file -I в OSX ☹️

Mac OS X - это ОС Unix, и ее командная строка на 99,9% такая же, как и в любом дистрибутиве Linux. bash это ваша оболочка по умолчанию, и вы можете скомпилировать все те же программы и утилиты. Там нет заметной разницы. Вы также можете найти различные проекты, такие как MacPorts, которые обеспечивают управление пакетами для Mac.

+1: сказанное выше верно. Возможно, вам придется помнить о том, что ваш Mac использует процессор Intel или PowerPC, когда дело доходит до компиляции кода или использования готовых пакетов, я понимаю, что новые Mac - это только Intel, но я могу ошибаться. typo @ w0rm: пакет * управление. :-) Хотя ваши скрипты, вероятно, будут работать как для Mac, так и для Linux, всегда разумно тестировать их на обеих платформах. Я видел некоторые (тонкие) различия между дистрибутивами Linux и даже между разными версиями одной и той же версии Linux. @digit, это должна быть версия BSD, за которую они взимают плату? s / F / Fr /;) 99,9% не правильно. OS X является вариантом BSD и не имеет утилит GNU. Вы всегда можете установить их, но многие команды имеют разные параметры. Это Unix, но не Linux.

Это очень похоже, но если вы знаете о каких-либо различиях между BSD и Linux, ожидайте, что Mac будет работать с BSD.

Интересный. Можете ли вы подробнее рассказать об этом? Почему это? @fat_milke, потому что OSX использует утилиты BSD, а не GNU, которые использует

Пара вещей - это действительно зависит от того, что вы подразумеваете под командной строкой.

  1. Вы, вероятно, запустите bash, который будет таким же, как bash в любой другой UNIX. Язык программирования bash тоже будет таким же - при условии, что это та же версия. Версии Bash имеют небольшие различия в языке, но это не имеет ничего общего с MacOSX против Linux как таковой.

Вы можете столкнуться с этим - / bin / bash на Mac прикреплен к 3.x по причинам лицензирования. Вы можете найти незначительные проблемы совместимости, если вы привыкли к 4 или даже 5.

bash сам по себе является небольшим подмножеством «командной строки». Чтобы быть полезным, вы обычно используете другие распространенные утилиты UNIX, такие как awk, ls или cut. Из-за своей истории (она произошла от BSD, а не от Linux или SystemV), версии утилит для Mac будут отличаться от тех, которые вы привыкли использовать в Linux (также как версии GNU). Они будут иметь по крайней мере некоторые различия флагов, а также некоторые отличия вывода и функциональности по сравнению с Linux. Сценарии, которые их используют, должны быть изменены для компенсации. BSD awk против GNU gawk довольно сильно отличается. ИЛИ, вы можете получить эти версии GNU из macports или home brew и установить свой PATH так, чтобы это были значения по умолчанию (по сравнению со встроенными версиями).

MacOS X также имеет несколько новых интересных инструментов. open хорошо, он откроет объект, как если бы вы дважды щелкнули по нему. defaults позволяет вам установить некоторые настройки, некоторые даже не в панелях настроек GUI. textutil может быть полезным и say может быть весело.

Функциональность командной строки в Mac и Linux действительно схожи, поскольку OS X имеет вид UNIX (называемый Darwin) под GUI, который вы видите.

Оболочкой по умолчанию в OS X является bash, поэтому, если вы с ней знакомы, вы все настроите правильно.

На Mac приложением командной строки по умолчанию является Терминал. Существует также ряд других эмуляторов, но в целом Terminal обеспечивает очень похожий внешний вид на оболочку, к которой вы привыкли в Linux.

Основным источником различий являются:

  • Различные аргументы командной строки время от времени (например, см., du Например). Основные команды, такие как cd или ls др., Похожи.
  • Есть больше частей OS X, которые не должны редактироваться вручную, как вы могли бы сделать в Linux. Это отдельная тема, но имейте в виду, что запуск Mac не совсем похож на запуск Linux-бокса с точки зрения конфигурации и поддержки.

Вы также можете получить ваши руки на кучу пакетов с открытым исходным кодом (то есть git , hg и т.д.) через MacPorts, Fink или несколько других систем управления пакетами для OS X. Вы можете также создавать другие пакеты с исходным кодом , предназначенный для UNIX / Linux , как системы по мере необходимости ,

Я не знаю, ты пользуешься Линуксом или Уиндоузом (обычно туториалы рассчитаны на линуксоидов и макосников, уиндоуз не модный среди молодежи). В макоси все практически так же как и в линуксе, в windows пошли своим путем и сделали все как в DOS.

Думаю, что в данном случае тебе поможет не рыба, а удочка, так что держи пасту. Если после прочтения у тебя будут какие-то вопросы, или по-прежнему непонятно, почему команды не работают, пиши в наш уютный тред, разберемся.

Краткий мануал чайника по командной строке:

Как попасть в командную строку?

  • Windows XP: Пуск — Выполнить — набрать cmd — нажать [enter]
  • Windows7: Пуск — набрать cmd - наждать [enter]
  • MacOS: Запустить приложение Терминал (его можно найти поиском в той фигне которая справа вверху экрана)
  • Ubuntu: Запустить приложение Терминал или нажать Alt + Ctrl + F1 (ааа как вернуться назад? Ctrl + F7)
  • Linux: если ты линуксоид, ты и так знаешь

Во всех операционных системах

↑,↓ — стрелки вверх и вниз в командной строке позволяют смотреть предыдущие введенные команды, чтобы 2 раза не набирать. В Windows при закрытии окошка консоли вся история теряется, в других ОС — сохраняется.

[tab] — автодополняет имена файлов и команды. Если в текущем каталоге есть файл file.txt, ты наберешь fi и нажмешь [tab] то он автодополнит имя файла (или предложит варианты, если таких файлов несколько).

[ctrl+c] — прерывает выполнение команды, например, если она долго тупит

Важно: клавиша Esc не работает в командной строке. Клавиши Ctrl + C, V, X не работают как «копировать/вырезать/вставить» (иногда для вставки можно использовать Shift + Ins). Клавиша Ctrl + Q не работает как «выход».

В линуксе и маке, [ctrl+l] очищает экран, [ctrl+k] и [ctrl+u] удаляют все перед или после курсора, [ctrl+w] удаляет слово перед курсором, [ctrl+r] делает поиск по истории команд (для отмены поиска нажми [ctrl+c], escape в командной строке не работает, для завершения поиска нажми стрелку вправо/влево), [ctrl+d] завершает работу и закрывает консоль.

Еще в линуксе и маке иногда не работают Home и End, используй [ctrl+a] чтобы перейти в начала строки и [ctrl+e], чтобы в конец. [alt + b] (back) и [alt + f] (forward) двигают курсор на 1 слово назад/вперед.

В командной строке не работает ctrl+v,c,x для вставки, копирования и вырезания текста. Иногда (зависит от настроек системы) вставить текст можно через [shift+ins], иногда правой кнопкой мыши. Скопировать текст можно, выделив мышью (в Windows надо разрешить выделение текста сначала в настройках окна и нажать Enter после выделения).

В командной строке результат выполнения команд зависит от того, в каком каталоге и на каком диске ты находишься. Какой каталог текущий, в Windows написано в подсказке, а в linux можно узнать командой pwd (print working directory)

Чтобы перейти в другой каталог, в линуксе используют команду cd :

В Windows, сначала надо перейти на нужный диск командой c: , d: , e: и так далее. Потом использовать cd или chdir :

Обрати внимание, windows и linux используют разные виды слешей. Обрати внимание, .. обозначает «родительский каталог». Обрати внимание, только в линукс и мак

обозначает «домашний каталог» (это /home/username или /Users/username ). . (одна точка) обозначает текущий каталог и cd . никуда не перейдет. / (линукс) или \ (Windows) обозначает корневой каталог.

В linux — команда clear или клавиша [ctrl+L], в windows — команда cls (clear screen).

Посмотреть, какие файлы есть в текущем каталоге, можно командой dir в Windows и командой ls в линуксе ( ls -a — показывает все файлы, включая скрытые, ls -l — показывает не только имена, но и размер, дату создания файла, права на него).

Посмотреть права на файл в Линукс можно либо командой ls -l , либо stat file.txt

Команды и оболочка

Оболочка — это cmd.exe в Windows и bash в линукс, это та программа, которая собственно мигает курсором и выполняет твои команды. Ты набираешь команды, а она их выполняет. Команда обычно состоит из имени команды, и, иногда, дополнительных параметров, отделенных пробелом, вроде:

Почти у любой команды есть подсказки. Чтобы их увидеть, добавь к имени команды параметр ( --help или /? ):

В линукс: ls --help — выведет справку по команде ls

В линукс: man bash — выведет подробную длинную справку по команде bash (для выхода жми q, для прокрутки используй стрелки и PgUp/PgDn)

В Windows: dir /? — выведет справку по команде dir

В Windows: help выведет подсказку по основным командам

Команды бывают внутренние (это маленький список команд, встроенных в оболочку). Встроенные команды — это, например, cd в линукс или exit в Windows. Их мало.

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

В линуксе: echo $PATH

В windows: echo %PATH%

В linux PATH — это папки /bin, /usr/bin, /usr/local/bin, /sbin, /usr/sbin, именно в них в Линуксе хранятся почти все программы. В текущем каталоге програмы не ищутся, если это не указать явно.

В Windows PATH — это всякие системные папки вроде c:\windows и так далее + текущий каталог, в котором ты находишься. Заметь, что папки вроде c:\program files\autocad в PATH не добавлены и в Windows таким образом, из командной строки обычные программы и игры, установленные в Program Files, не запустить. Только то, что положено в системные папки.

Таким образом: если ты под линуксом, и ты набираешь команду php , то скорее всего файл php лежит в одной из *bin папок и эта команда запустит php. Если ты под Windows установил php допустим в c:\php, и не прописал этот путь в PATH, то набрав php , оболочка не найдет файл php.exe и ничего не запустит. И ты скажешь «что за кривой мануал, ничего не работает, ну его нафиг».

Что же делать? 1) добавить папку с php в PATH через мой компьютер — свойства и перезалогиниться в систему 2) писать вместо php полный путь c:\php\php.exe

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

Допустим, ты хочешь запустить php-файл не из текущего каталога. Тогда надо написать путь к нему:

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

Больше команд — linux

Попрактиковаться в линукс в командной строке можно на таких командах:

Подробнее о работе команд можно узнать с помощью параметра --help , дописанного после команды.

Больше команд - Windows

Попрактиковаться в комнадной строке в Windows можно так:

Подробнее о работе команд можно узнать с помощью параметра /? , дописанного после команды.

Команды для работы с сетью Интернет

В линукс показать информацию о настройке сети: ifconfig (или /sbin/ifconfig если у тебя в PATH нет /sbin)

В Windows показать информацию о сети: ipconfig

Показать список открытых с компьютера соединений: netstat (в подсказке по команде указаны также параметры, с помощью которых, например, можно вывести какая программа установила это соединение) Проверить путь до какого-то сервера или узла сети:

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

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

У программ есть горячие клавиши, чтобы ускорять работу. А у операционной системы есть командная строка — это как горячие клавиши, только для всего компьютера.

Что может командная строка

Командная строка может всё, что может операционная система, и больше:

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

Корректнее сказать так: командная строка умеет всё, что умеет операционная система, и даже больше.

Как вызвать командную строку

Командная строка встроена в каждый компьютер с Windows или MacOS. Программу, которая даёт доступ к командной строке, называют терминалом.

Если у вас Windows, для вызова терминала нужно нажать комбинацию клавиш Win+R, в появившемся окне набрать cmd и нажать Enter. В MacOS — нажать Cmd+пробел, набрать terminal и тоже нажать Enter (это стандартная настройка, её можно изменить).

Перед вами появится окно, куда можно вводить команды для компьютера.

Командная строка в Windows Терминал в MacOS

Как работает

Смысл командной строки такой: вы пишете команды для компьютера, а он их выполняет. Все команды делятся на внутренние и внешние.

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

Встроенная в Windows команда dir выводит список всех файлов и каталогов в текущей папке

Встроенная в Windows команда dir выводит список всех файлов и каталогов в текущей папке

Внешние команды — это все программы, которые пользователь ставит на компьютер сам. Часто бывает так, что при установке программа добавляет в систему нужные для себя вспомогательные программы — и они тоже становятся внешними командами. Например:

  1. вы поставили на компьютер программу VS Code, чтобы программировать на Python;
  2. после этого вы можете в командной строке набрать code, нажать клавишу ввода, и программа запустится;
  3. это значит, что сразу после установки этой программы у компьютера появилась новая команда — code.

Параметры команд

У многих команд есть параметры, которые дают дополнительные возможности.

Например, мы уже видели, как команда dir без параметров просто выдаёт нам список всех файлов и каталогов в текущей папке. Но если мы добавим параметр /p, то она покажет на экране не весь список сразу, а по частям, чтобы всё помещалось на экран:

А та же команда dir c параметром /w уберёт все подробности и выведет содержимое папки в виде нескольких колонок:

Параметры вызова можно комбинировать и добавлять к ним свои запросы. Например, если нам нужно запустить VS Code так, чтобы он на старте открыл определённый файл ninja_sword.js, то можно написать так:

Примеры использования

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

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

  1. запустить аудиоредактор,
  2. по очереди открыть в нём каждый файл,
  3. вручную установить нужный уровень громкости,
  4. сохранить файл,
  5. открыть следующий и повторить всё то же самое,
  6. повторить ещё 28 раз

Очевидно, что это займёт много времени, и проще скачать другие подкасты, чем тратить столько сил на эти. Но, например, в MacOS мы можем открыть терминал и написать там две команды:

cd podcasts
for file in *; do wc -l $file; lame --scale 8 $file; done

Первая команда переходит в каталог с подкастами, а вторая:

  1. берёт все файлы в этой папке;
  2. получает их количество и название;
  3. в цикле запускает программу lame и указывает параметры для неё — поднять громкость в 8 раз у этого файла;
  4. повторяет цикл до тех пор, пока не обработаются все файлы.

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

Вот что ещё можно делать через командную строку:

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

Зачем веб-разработчику командная строка

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

Если же вы занимаетесь веб-разработкой, то командная строка вам пригодится:

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