Все ли разные дистрибутивы Linux имеют одинаковые командные строки? [закрыто]

Если это не порядок, в котором файлы были выбраны в Nautilus, я предполагаю, что порядок может быть определен либо физическим порядком записей в каталоге (проверьте с помощью ls -lU), либо датой файлов (ls -lt).

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

Чтобы заставить порядок быть детерминированным, вы можете либо изменить физический порядок/время файла, если это определяющий фактор. Или создать скрипт, который сделает это, взяв список файлов из Nautilus и используя sort, for и, возможно, sleep или какой-то wait-for-process-started механизм, и добавить его в качестве альтернативы приложениям, предоставляемым Nautilus для данного типа(ов) MIME. Второй вариант, вероятно, более надежен.

4
28.09.2018, 13:15
3 ответа

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


Большинство систем Unix предоставляют одни и те же базовые утилиты для работы в командной строке. Эти утилиты работают в основном одинаково, поскольку они стандартизированы. Кроме того, синтаксис, используемый для написания команд оболочки, стандартизирован (циклы, перенаправления, конвейеры, фоновые процессы, присвоение переменных, заключение в кавычки и т. д. )Стандарт называется POSIX, и его можно найти здесь(см. Раздел «Оболочка и утилиты» ).

В большинстве систем Unix (, особенно в Linux, по какой-то причине )стандартные утилиты были расширены дополнительными функциями, но функциональные возможности, описанные стандартом POSIX , должны быть реализованы. Если стандартная утилита не соответствует стандарту POSIX, вам, вероятно, следует отправить отчет об ошибке.

В частности, сама оболочка часто расширяется, чтобы обеспечить более удобный интерактивный опыт или предоставить более продвинутые средства программирования оболочки. Оболочка, будучи таким же приложением, как и любое другое, поставляется в различных вариантах (реализациях )и bashявляется наиболее популярной в системах Linux (, но она также доступна в качестве оболочки по умолчанию, например. macOS и может быть установлена ​​на любой Unix ). Оболочки zshи kshтакже популярны и предоставляют различные наборы расширений, но все они должны по крайней мере быть в состоянии делать в основном то, что говорит стандарт POSIX, используя общий синтаксис (, за исключением случаев использования расширения, такие как специальные типы массивов и более причудливые формы сопоставления имен файлов с образцом и т. д., хотя некоторые из них также довольно похожи между оболочками ).

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

В различных дистрибутивах Linux набор доступных инструментов и утилит довольно однороден, а переносимость в целом хорошая (с той оговоркой, что инструменты для конкретных дистрибутивов и архитектур могут отличаться или отсутствовать ). При рассмотрении использования и написания сценариев, которые должны работать на других типах систем Unix, становится более важным знать, какие расширения являются специфическими для вариантов инструментов и утилит GNU/Linux, и что можно ожидать от «общего применения». Система POSIX/Unix».

10
27.01.2020, 20:45

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

Команды, которые вы использовали в оболочке, берутся из встроенных функций оболочки или внешнего программного пакета. В зависимости от установленных программ они могут быть одинаковыми или разными. Хотя вы всегда используете команды в своей оболочке, на самом деле они почти не имеют ничего общего с вашей оболочкой (Это применимо даже к Windows/OS X/*BSD ), просто узнайте, как работает ваша оболочка.

Просто некоторые дистрибутивы по умолчанию -устанавливают для вас какое-то обычное программное обеспечение, так что вы получаете доступ к некоторым общим командам. Например, вы можете использовать lsпочти во всех дистрибутивах только потому, что почти все дистрибутивы устанавливают для вас программное обеспечение linux-utils.

В некоторых дистрибутивах у вас есть больше свободы выбора пакетов, которые вы хотите, в этом случае вы можете не получить доступ ls, если откажетесь установить linux-utilsили любое программное обеспечение, которое может предоставить эту команду. Также обратите внимание, что разные программные пакеты МОГУТ конфликтовать друг с другом, если они предоставляют команды с одинаковыми именами.

4
27.01.2020, 20:45

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

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

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

Редактировать

Посмотрите сценарии оболочки, например. в старом -стиле /etc/init.d, и каждый из них начинается с

#!/bin/sh

Таким образом, они ожидают некую стандартную оболочку, которая, например. на Debian предоставлен dash. Для сравнения, сценарии оболочки, которые я пишу для себя, начинаются с

#!/bin/bash

, потому что я иногда использую расширения bash. Есть масса других оболочек, см., например. здесь

4
27.01.2020, 20:45

Теги

Похожие вопросы