При работе в терминале можно столкнуться с командами, о которых мало информации в man-страницах или которые не являются бинарниками. Один из таких примеров -
fc.▪️ fc vs history. Для просмотра истории команд в Linux обычно используют
history, но есть ещё команда fc, которая делает примерно то же самое:
# fc -l -5 # Покажет последние 5 команд
# history 5 # Тоже покажет последние 5 команд
На первый взгляд, непонятно, чем fc лучше или отличается от history. Попробуем разобраться, что это вообще за команда.
▪️ Поиск информации о fc
1️⃣ Проверяем документацию и ищем бинарник:
man fc
No manual entry for fc
which fc
Man-страницы нет и бинарника тоже.
2️⃣ Проверяем, алиас ли это:
alias | grep fc
Нет, алиаса тоже нет.
3️⃣Используем type, чтобы определить природу команды:
type fc
fc is a shell builtin
fc оказывается встроенной командой в оболочку Bash, как и pwd, cd, history, type.
▪️ Как Bash обрабатывает команды? Важно понимать, в каком порядке оболочка ищет и исполняет команды. Bash проверяет их в следующем порядке:
1. Сначала проверяются алиасы.
2. Затем встроенные в оболочку команды.
3. Только потом ищутся бинарники в $PATH (слева направо по списку директорий).
Это объясняет, почему при наличии нескольких версий Python или PHP выполняется конкретная версия – она первая в $PATH.
▪️ Как временно "сломать" команду? Можно использовать алиас, чтобы подменить стандартное поведение команды. Например, так можно отключить history:
alias history='echo "Здесь истории нет"'
history
Здесь истории нет. Теперь history не работает, пока не удалить алиас:
unalias history
Чтобы проверить, какие версии одной и той же команды существуют в системе, используем:
type -a history
history is aliased to `echo "Здесь истории нет"'
history is a shell builtin
#linux #history
🧑💻 NetworkAdmin