Поиск по сайту:

8 опечаток, которых действительно нужно избегать в Linux


Резюме: Дважды проверьте, правильно ли вы набрали команду, прежде чем нажимать «Enter». В Linux опечатка может иметь разрушительные последствия. Используйте завершение с помощью табуляции, чтобы автоматически заполнять как можно больше записей командной строки. Псевдонимы для длинных и сложных команд — тоже отличная идея.

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

Командная строка Linux

Командная строка Linux — это портал к великой силе, но одной опечатки достаточно, чтобы эта сила повернулась против вас. Мы все слышали о команде, которую вы никогда не должны запускать. Здесь мы говорим о командах, которые вы действительно хотите запускать, но одна ошибка может привести к катастрофе.

Когда вы нажимаете «Enter», все, что вы набираете, обрабатывается оболочкой. Псевдонимы и переменные расширяются. Идентифицируются команды, опции и параметры. Это называется разбором. На следующем шаге ваш проанализированный ввод передается командам, которые будут выполнять ваши инструкции.

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

Простая опечатка может быть поистине разрушительной. Уровень разрушения зависит от команды и ошибки. Вы можете потерять время. Вы можете потерять файл. Вы можете потерять всю файловую систему.

1. Не забывайте -а

Возможно, вам потребуется добавить кого-то в группу, чтобы разрешить ему, скажем, использовать определенную часть программного обеспечения. Например, VirtualBox требует, чтобы пользователи были частью группы «vboxusers». Мы можем сделать это с помощью usermod.

Команда groups выводит список групп пользователя.

groups

Мы добавим пользователя dave в новую группу. Параметр -a (дополнение) добавляет новую группу в список существующих групп, в которых состоит пользователь. Параметр -G (группы) идентифицирует группу.

sudo usermod -a -G vboxusers dave

Новая группа видна после входа и выхода пользователя.

groups

Сейчас он в группе «vboxusers». Однако если вы забудете использовать параметр -a (добавить), все существующие группы пользователя будут удалены. Единственная группа, в которой они будут, это новая группа.

Это неправильная команда:

sudo usermod -G vboxusers dave

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

groups

Если у вас есть один настроенный пользователь, и вы делаете это с ним, у вас будут серьезные проблемы. Во-первых, пользователь больше не является членом группы «sudo», поэтому вы не можете использовать sudo, чтобы начать исправлять ситуацию.

2. Использование неправильного идентификатора диска с dd

Команда dd записывает блоки данных в файловые системы. Он часто используется для записи образов ISO на USB-накопители.

В схеме именования Linux для устройств хранения используется одна буква для идентификации. Первый жесткий диск называется «/dev/sda», второй — «/dev/sdb», третий — «/dev/sdc» и так далее. Разделы идентифицируются номером. Первый раздел на первом жестком диске — «/dev/sda1», второй — «/dev/sda2» и так далее.

Если вы записываете образ на карту памяти USB, вам необходимо знать идентификатор накопителя карты памяти USB. Мы обнаружим это, пропустив lsblk через grep, ища записи с «sd» в них.

lsblk | grep sd

Мы видим, что жесткий диск «/dev/sda» представляет собой диск объемом 32 ГБ с тремя разделами. Один из разделов — это «/boot», а раздел «/dev/sda3» монтируется в «/», что является корнем файловой системы.

Жесткий диск «/dev/sdb» указан как диск емкостью 7,5 ГБ. Он смонтирован в «/media/dave/Pink». Проще говоря, диск «/dev/sda» — это основной жесткий диск на этом компьютере, а «/dev/sdb» — это USB-накопитель.

Команда для записи файла ISO, который находится в каталоге «~/Downloads», на нашу карту памяти USB:

sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sdb conv=fdatasync status=progress

Нас просят ввести пароль, затем dd приступает к действию. Нет никаких «Вы уверены?» предупреждения или возможности отступить. Написание начинается немедленно.

Однако, если вы введете неправильную букву для идентификатора диска, и она совпадает с существующим жестким диском, вы перезапишете этот диск вместо карты памяти.

Это неправильная команда:

sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sda conv=fdatasync status=progress

Мы сказали dd использовать «/dev/sda», что он и сделал. Действие записи выполняется намного быстрее, но заканчивается предупреждением. Вы только что испортили свою установку Linux.

Проверьте и перепроверьте идентификаторы дисков, прежде чем нажимать «Enter».

3. Использование неправильного идентификатора диска с mkfs

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

На этом компьютере у нас есть диск на 25 ГБ и диск на 10 ГБ.

Если мы хотим создать файловую систему Ext4 в первом разделе 10-гигабайтного диска, мы будем использовать эти команды.

sudo umount /dev/sdb1
sudo mkfs.ext4 /dev/sdb1

Но если мы совершим ошибку, используя «a» вместо «b» в идентификаторе диска, мы сотрем один из разделов на 25-гигабайтном диске и сделаем наш компьютер недоступным для загрузки.

Это неправильная команда:

sudo umount /dev/sda1
sudo mkfs.ext4 /dev/sda1

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

4. Не удаляйте файл crontab

Демон cron запускает задачи в заданное для вас время. Он берет свою конфигурацию из файла crontab. У каждого пользователя, включая root, может быть файл crontab. Чтобы отредактировать ваш crontab, используйте эту команду:

crontab -e

Файл crontab открывается в редакторе. Вы можете вносить изменения и добавлять новые команды.

Но если вы наберете команду с ошибкой и нажмете «r» вместо «e», вы удалите — как в случае delete — ваш файл crontab.

Это неправильная команда:

crontab -r

В следующий раз, когда вы воспользуетесь командой crontab -e, вы увидите пустой файл по умолчанию.

Эту ошибку легко совершить, потому что на большинстве клавиатур буквы «e» и «r» расположены рядом друг с другом. Пересборка сложного файла crontab не доставляет удовольствия.

5. Повторение истории

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

Команда history выводит список ваших предыдущих команд в окне терминала. Они пронумерованы. Чтобы повторно использовать команду, поставьте перед ее номером восклицательный знак «!» и нажмите клавишу «Enter».

history

Предположим, мы клонировали репозиторий Git, запутались с ним и удалили его. Нам нужно клонировать его еще раз. Прокручивая окно терминала, мы вскоре можем обнаружить команду git clone. Мы можем повторно запустить его, набрав:

!60

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

!61

Это запускает следующую команду в списке, rm *. Это удалит все файлы в вашем текущем каталоге.

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

Представьте себе сценарий, в котором у вас есть скрипт с именем «restart.sh». Этот сценарий устанавливает по умолчанию набор файлов конфигурации для некоторого программного обеспечения, которое вы пишете. Периодически, когда вы разрабатываете и тестируете, вам нужно стереть все с доски, поэтому вы вызываете свой скрипт.

Этой команды должно быть достаточно, чтобы найти и сопоставить команду в вашей истории и выполнить ее.

!re

Но если вы использовали команду reboot с тех пор, как в последний раз использовали свой скрипт, будет найдена и немедленно выполнена именно команда reboot.

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

6. Бедствие пространств

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

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

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

Допустим, у нас есть каталог «Разработка», который содержит два других каталога: «геокодер» и «бин». Внутри каталога «geocoder» также есть каталог «bin».

Чтобы удалить файлы в каталоге «geocoder/bin» и удалить каталог, вы должны использовать эту команду.

rm -r geocoder/bin

Теперь представьте, что вы случайно добавили пробел после «geocoder/», вот так.

Это неправильная команда:

rm -r geocoder/ bin

Бум. Каталог «Разработка» теперь пуст. Каталоги «Development/geocoder», «Development/geocoder/bin» и «Development/bin» были полностью уничтожены.

Помните, завершение табуляции — ваш друг.

7. Использование > вместо >>

Перенаправление отправляет вывод процесса в файл. Мы используем знак «больше чем» «>» для захвата выходных данных процесса. Если файл существует, он сначала очищается.

Допустим, мы расследуем утечку памяти. У нас есть скрипт под названием «memlog.sh». Он отображает статистику памяти один раз в секунду. Мы собираемся перенаправить это в файл с именем «memory.txt» для последующего анализа.

memlog.sh > memory.txt
head memory.txt

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

memlog.sh >> memory.txt

Если мы используем один знак «больше» «>», мы потеряем вчерашние данные, потому что файл очищается первым.

8. Перенаправление в неверном направлении

Перенаправление может использовать содержимое файла в качестве входных данных для программы.

У нас есть файл с именем «placenames.sql», который мы хотим импортировать в sqlite3. Файл схемы описывает, как воссоздать таблицы базы данных. Он также содержит данные, которые мы хотим сохранить в базе данных. 1,3 ГБ и более 11 миллионов строк — это большой файл.

ls -hl placenames.sql
wc placenames.sql

С помощью этой команды мы можем создать новую базу данных с именем «places.sqlite3».

sqlite3 places.sqlite3 < placenames.sql

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

Это неправильная команда:

sqlite3 places.sqlite3 > placenames.sql

Наш файл схемы был уничтожен, перезаписан приветственным сообщением оболочки sqlite3.

cat placenames.sql

До свидания, 1,3 ГБ данных.

Как избежать опечаток в командной строке

Есть хорошие привычки, которые вы можете принять, чтобы избежать подобных ошибок.

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

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

Общеизвестно, что сложно вычитывать собственные тексты, но это то, что вам нужно сделать в командной строке. Почитайте, что есть на самом деле. Не смотрите на него и не думайте, что он говорит то, что вы хотели напечатать. Что это на самом деле говорит? Потому что это то, что он действительно собирается сделать.