«cat» - это встроенная оболочка или внешняя программа?

Я думаю, что Ваш tty сообщает о несправедливости tty размер. Попытайтесь работать

pi@raspberrypi$ stty -aF /dev/ttyO0

Там Вы будете видеть, сколько строк и столбцов tty думает, что имеет. Этот размер должен соответствовать набору размера в шпаклевке. Можно также изменить параметры, такие как число столбцов, с помощью stty. Команда была бы чем-то как

pi@raspberrypi$ stty -F /dev/ttyO0 cols 80

Можно проверить больше параметров по http://unixhelp.ed.ac.uk/CGI/man-cgi?stty

33
10.06.2015, 16:50
6 ответов

findmnt -nt btrfs , исходный субтом находится в [...] , точка монтирования - первый столбец. Кроме того, вы можете самостоятельно просмотреть файл /proc/self/mountinfo .

-121--68865-

тип указывает, что будет использовать оболочка. Например:

$ type echo
echo is a shell builtin
$ type /bin/echo
/bin/echo is /bin/echo

Это означает, что если в подсказке bash ввести echo , вы получите встроенный. При указании пути, как в /bin/echo , будет получена внешняя команда.

который , напротив, является внешней программой, которая не имеет специальных знаний о том, что будет делать оболочка. В debian-подобных системах , который является сценарием оболочки, который выполняет поиск исполняемого файла в PATH. Таким образом, он даст вам имя внешнего исполняемого файла, даже если оболочка будет использовать встроенный.

Если команда доступна только как встроенная, , которая ничего не возвращает:

$ type help
help is a shell builtin
$ which help
$ 

Теперь, пусть; s посмотрите на cat :

$ type cat
cat is hashed (/bin/cat)
$ which cat
/bin/cat

cat является внешним исполняемым файлом, а не оболочкой builtin.

59
27.01.2020, 19:37

findmnt -nt btrfs , исходный субтом находится в [...] , точка монтирования - первый столбец. Кроме того, вы можете самостоятельно просмотреть файл /proc/self/mountinfo .

-121--68865-

тип указывает, что будет использовать оболочка. Например:

$ type echo
echo is a shell builtin
$ type /bin/echo
/bin/echo is /bin/echo

Это означает, что если в подсказке bash ввести echo , вы получите встроенный. При указании пути, как в /bin/echo , будет получена внешняя команда.

который , напротив, является внешней программой, которая не имеет специальных знаний о том, что будет делать оболочка. В debian-подобных системах , который является сценарием оболочки, который выполняет поиск исполняемого файла в PATH. Таким образом, он даст вам имя внешнего исполняемого файла, даже если оболочка будет использовать встроенный.

Если команда доступна только как встроенная, , которая ничего не возвращает:

$ type help
help is a shell builtin
$ which help
$ 

Теперь, пусть; s посмотрите на cat :

$ type cat
cat is hashed (/bin/cat)
$ which cat
/bin/cat

cat является внешним исполняемым файлом, а не оболочкой builtin.

-121--13412-

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

4
27.01.2020, 19:37

Поскольку здесь есть несколько хороших ответов об использовании типа, чтобы узнать, является ли такая команда, как cat встроенной или внешней программой. Я собираюсь применить более общий подход. Есть некоторые команды, которые должны быть встроены, так как они влияют на текущую оболочку. Три классических примера: cd, exec и exit. Есть некоторые команды, которые не должны быть встроены, так как их функциональность зависит от поведения execve или системных вызовов. Примерами таких программ являются su, sudo, calife и super. Все остальные команды могут быть построены как встроенные или как внешние программы. cat является отличным примером программы этого класса, поскольку существуют оболочки, которые включают ее в качестве builtin, и оболочки, которые не включают ее. Стоит отметить, что многие команды этого класса, доступные в виде builtins, также доступны как внешние программы.

2
27.01.2020, 19:37

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

Например, установка /bin/rksh (ограниченная оболочка) вместо предварительно определенной оболочки пользователя в качестве оболочки по умолчанию для этого пользователя в /etc/profile .

ПРИМЕЧАНИЕ: если исполняемый файл с таким именем не существует в системе, то создайте жесткую ссылку ln/bin/ksh/bin/rksh и ksh по своему имени определит, является ли он ограниченным или нет.

ограниченная оболочка (например) запретить выполнение команды cd или указать команду с помощью команды / (явный путь) в вызове и запрещает изменение переменной PATH , SHELL или ENV , а также запрещает перенаправление выходных данных.

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

-121--15648-

Он не жалуется на сам файл /etc/init.d/supervisor , но, скорее всего, на файл, который он хочет выполнить как - обычно оболочка, которая появляется в строке shebang в этом файле. Это несколько вводящая в заблуждение ошибка, которую я видел много раз раньше.

-121--150410-

Другие уже ответили о cat , я просто хотел бы объяснить проблему echo . При использовании опции -a типа (перечислить все совпадения) будет видно, что echo является и компоновкой оболочки , и внешней программой:

$ type -a echo
echo is a shell builtin
echo is /bin/echo

Эти два элемента полностью независимы друг от друга. тип без параметров просто возвращает первую найденную соответствующую команду. Таким образом, тип foo покажет, что будет выполнено при выполнении foo . Могут быть и другие варианты, но они не будут отображаться, если не использовать -a .

2
27.01.2020, 19:37

cat хешируется (/ bin / cat) аналогично cat is / bin / cat (то есть это внешняя программа ).

Разница в том, что вы уже запускали cat в этом сеансе, поэтому bash уже просмотрел его в $ PATH и сохранил полученное местоположение в хеш-таблице, чтобы это не было ' Мне не придется снова искать это в этом сеансе.

Чтобы увидеть все команды, которые были хешированы в вашем сеансе, запустите hash

$ hash
hits    command
   2    /usr/bin/sleep
   3    /usr/bin/man

$ type sleep
sleep is hashed (/usr/bin/sleep)

$ type man
man is hashed (/usr/bin/man)

$ type ls
ls is /usr/bin/ls

$ type cat
cat is /usr/bin/cat

$ type echo
echo is a shell builtin
46
27.01.2020, 19:37

Другой способ проверить список встроенной оболочки: использовать compgen , который сам является встроенной оболочкой!

Следующая команда перечисляет все встроенные команды оболочки:

compgen -b

Вы можете проверить cat , echo , набрав команду greping, например: -

$ compgen -b | grep echo
echo
$ compgen -b | grep cat
$ 

Вы можете увидеть compgen -b | grep cat возвращает без вывода, это означает, что cat не является встроенной командой оболочки .

Посетите список полезных опций, предоставленных compgen .


Вы также можете использовать встроенную команду друг друга: help для отображения встроенной команды оболочки.

$ help help
help: help [-dms] [pattern ...]
    Display information about builtin commands.
4
27.01.2020, 19:37

Теги

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