Консоль Linux
Консоль Linux абсолютно волшебный и удобный инструмент, позволяющий управлять всей системой короткими командами, причём можно сотворять абсолютно что угодно - от установки программ, до изменения оболочки. Это экономит кучу времени и это главная причина, почему стоит пользоваться консолью.. В Windows чтоб установить программу необходимо прошёлкать сколько-то окон и поснимать галочки, чтоб лишнее не поставилось, здесь же одна команда и получаешь необходимое, тоже можно получить и при установки deb пакетов или из центра программ, или вообще собрать программу из исходников прям в системе - куча возможностей на любой вкус.
Запустить консоль Linux можно запустив терминал (Ctrl+Alt+T зависит от сборки), находится он в
KDE: Пуск (Kickoff) → Система → Konsole (Терминал).
В других: Пуск (Меню) → Администрирование → Терминал
(Или слева при раскрытии меню, зависит от оболочки..)
В файловом менеджере Dolphin и текстовом редакторе Kate консоль (терминал) всегда под рукой, горячая клавиша F4.
Полезной опцией является тот момент, что в консоли можно запустить любое приложение и оно будет туда складывать свой вывод, таким образом можно ловить ошибки приложений..
Например перейдём в директорию и напишем ./start-tor-browser
В Линуксе расширение файла может не быть, исполняемым может быть любой файл у которого стоят разрешения на выполнение (можно выставить правой клавишей в свойствах или chmod +x ./start-tor-browser) в Виндовс обычно исполняемые только .exe и ещё некоторые файлы.
Управление консолью Linux
Часто понадобиться запрашивать привилегии суперпользователя root для многих действий связанных с установкой, изменением файлов итп. Для этого предусмотрен механизм предоставления необходимого количества привилегий, но не более - sudo. Эта команда вводится перед другими и вводится пароль пользователя для разрешения на запуск. В Линуксе везде где производятся существенные изменения - запрашивается пароль.
Имейте ввиду, в целях безопасности консоль Линукс не отображает вводимые пароли, но по факту они вводятся.
В редких случаях и это не советуется, можно запросить права суперпользователя и что-то сделать под ним не вводя каждый раз sudo, если поставить Debian или разные серверные дистрибутивы, в консоли необходимо прописать su, но поскольку в сборках пароль суперпользователя не задан, то можно получить доступ к суперпользователю написав sudo su и свой пароль.
Если ввести любую команду, напрмиер, apt, то можно увидеть описание. Или apt и 2 раза TAB и увидеть только список функций. Если написать man apt попадаем в описание (мануал) к текущей функции. Ещё помощь можно получить в утилитах, к примеру если ввести ls --help
При работе в консоли (терминале) в текстовым редактором nano, чтоб сохранить изменения нажмите закрыть Ctrl+X и подтвердите сохранение, отмена Ctrl+C (во многих случаях прервать любое действие эта команды Ctrl+C или q).
Ctrl+D отключиться (отлогиниться) от текущего пользователя, сервера. Повторное нажатие закрывает консоль.
В любой ситуации не теряйтесь, обычно есть подсказки на экране, что жать..
Для копирования используется сочетание Ctrl+Shift+C, для вставки Ctrl+Shift+V (альтернатива: правая кнопка мышки или Ctrl+Insert с Shift+Insert).
Можно ещё не мучить себя и использовать любой текстовой редактор с графическим режимом:
# Решётка/диезик означает, что всё что дальше не выполнять - это комментарий kate ~/.config/pulse # Открыть под суперпользователем kate sudoedit /var/log/auth.log
Kate умеет сохранять системные файлы по факту сохранения, т.е. просто открывайте в нём любые интересующие файлы и при сохранении вводите пароль и в дамках, без консоли...
Историю команд можно посмотреть введя history, если нажимать стрелки вверх вниз, будут подставляться прошлые введённые команды. Повторить команду можно введя !! (два восклицательных знака, но стрелку вверх и энтер(ввод) быстрее..)
Команды консоли Linux
Никогда не выполняйте команд, назначения которых не понимаете. Команды консоли Linux, дают огромную власть, в том числе и удалить все файлы одной командой..
sudo rm -rf /
# Равноценно
echo "text" | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Линукс загружен в память и скорее всего будет работать не смотря на удаление системы, до момента перезагрузки. Кстати, это ещё одно отличие позволяющее обновлять систему на горячую - нет блокировки файлов системой, не требуется постоянных перезагрузок как в Windows.
Типичное использование консоли:
Было несколько раз на старых сборках, после обновления заглючивало оболочку и компьютер отказывался перезагружаться или выключаться, но из консоли подчинился:
# Выключить компьютер sudo halt или sudo init 0 или telinit 0 или shutdown -h now # Перезагрузить sudo reboot или shutdown -r now
Изменение прав и/или владельца можно осуществить через Действия root (Root Actions Servicemenu, не факт что оно есть в системе). Подробнее права Линукс chmod описаны в соседней статье.. (-R рекурсивно пройти по всем файлам/каталогам внутри)
sudo chown -R $USER:$USER /path/to/dir # Корректней, но группа может отдаваться пустой и она совпадает с пользователем sudo chown -R $USER:$GROUP /path/to/dir # Права sudo chmod 755 /path/to/dir
Иногда необходимо выяснить какой дистрибутив, название и прочие данные:
cat /etc/*release # Посмотреть архитектуру arch # или uname -m
Посмотреть диски в системе:
# Покажет названия с отказом в доступе fdisk -l # Выведет полную информацию sudo fdisk -l
Установка, удаление программ
# Установить пакет/программу sudo apt install -y name # Удалить пакет/программу sudo apt remove -y name # Удалить пакет/программу вместе с его конфигурационными файлами sudo apt purge -y name # Ещё можно явно указанные неиспользуемые зависимости удалить sudo apt -y autoremove
-y - соглашаться со всеми вопросами установщика, он обычно сообщает всякие глупости, мол необходимо дополнительно будет поставить связанные библиотеки или приложение займёт столько-то места на диске.. В основном используются install и remove. Можно перечислить сразу несколько пакетов для установки sudo apt install -y name1 name2... (если будет сбой в одном из пакетов, то это отменит операции далее)
Посомтреть список недавно установленных/удалённых пакетов/программ
grep " install " /var/log/dpkg.log grep " remove " /var/log/dpkg.log grep " purge " /var/log/dpkg.log
Дописать в конец файла
echo -e 'my \n text \n info \n' >> ~/.config/my.conf
Если вместо >> поставить >, то файл перезапишется.
Правильно записывать в файлы, для которых необходимы права суперпользователя, можно так:
# Перезаписать файл echo "значение" | sudo tee /путь/к/файлу/файл.sh # Дописать в конец echo "значение" | sudo tee -a /путь/к/файлу/файл.sh # Параметр -i игнорировать ошибки. # Eщё вариант sudo sh -c 'echo 127.0.0.1 localhost >> /etc/hosts'
echo может иметь иметь опции/параметры:
-e - включить поддержку вывода Escape последовательностей -E - отключить интерпретацию Escape последовательностей -n - не выводить перевод строки
Если включена -e, Escape последовательности для вставки специальных символов:
\b - удалить предыдущий символ \c - удалить перевод строки \n - перевод строки \r - символ возврата каретки в начало строки \t - горизонтальная табуляция \v - вертикальная табуляция
Внутри bash или .sh скрипта во флаге echo -e нет необходимости, если указан интерпретатор для исполнения сценария(скрипта) #!/bin/sh, консоль использует более новый #!/bin/bash. Есть проблема - обработчик при #!/bin/sh может быть разным и его иногда меняют, следствием скрипты могут давать сбой, поэтому использую только #!/bin/bash !!!
Скопировать фалы rsync:
Как-то словил проблему при копировании на диск с 5900 оборотов и меньшей максимальной скоростью диска, на 7200 оборотов (он на порядок быстрее), видимо переполнение буферов идёт или ещё что-то, винт разгоняет копирование свыше 120-160мб/с и принимающий начинает щёлкать головкой, в то время как на 5900 скоростей свыше 90мб/с не замечал. В итоге помогло ограничение скорости копирования. Выставил чуть меньше 90мб/с и вуаля никаких щелчков. Утилита очень полезна если необходимо передать файл на другой сервер или для передачи файлов с ломающегося диска.
# rsync [опции] [источник] [приемник] sudo rsync -a --progress /from/ /to/ sudo rsync -aPv --bwlimit=90000 /media/$USER/disk1/Music/ /media/$USER/disk2/Music/
В случае присутствия пробелов будут ошибки - возьмите в кавычки, я обычно такой формой пользуюсь:
sudo rsync -aPv --delete --bwlimit=140000 "/media/$USER/disk1/Подборка книг/" "/media/$USER/disk2/Подборка книг/"
-a, --archive - работа в режиме архивирования, сохраняются права доступа и информация о владельцах.
--partial - сохранять частично переданные файлы.
--progress - показать % выполнения во время передачи.
-P - эквивалент для --partial --progress (сохранять недокаченные файлы, показывать прогресс).
--ignore-existing - пропускать уже существующие на приёмнике disc2 (так можно немного ускорить, например для видео, они точно не меняются).
--delete - удалять те, которых нет на источнике disc1.
--bwlimit=KBPS - ограничение скорости копирования.
-v - показывать подробности.
-c - сравнивать файлы при помощи подсчёта контрольных сумм (по умолчанию по дате и размеру). Выполняется очень долго..
-n - ничего не делать, только показать что будет скопировано.
Линукс постоянно радует такими мелочами, в системе по умолчанию есть большинство необходимого, а Виндовс беги ищи, устанавливай - трать время..
Навигация и операции с файлами
Возможно пригодится и знание базовых команд для перемещения и управления файлами..
- pwd - показывает директорию в которой находитесь. Иногда бывает необходима в случае сокращения в консоли, например домашняя директория ~
- cd - переходит в указанную директорию, например cd ~ или cd /home/$USER
- ls - линейно выводит список директорий и файлов в текущей директории или указанной
ls /home. Чтоб вывести построчно с указанием прав и владельца необходимо добавить аргумент -l. Чтоб увидеть скрытые файлы и директории -a. Отсортировать по размеру -S. Отсортировать по расширению -X.
В итоге имеем команду ls -la или ls -la /путь/к/каталогу. - du * - считает размер директории, например du -hs * или du -hc /путь.
Аргументы:
-h - human-readable показывает вес файлов в Кб, Мб итд..
-с - подсчитывает сумму..
-s - показать только общий вес файлов..
А вот как можно вывести в отсортированном виде du -hc * | sort -rn - find - Поиск файлов и директорий
# Найти в директории /home файлы по имени абрикос find /home -name "абрикос" # Найти файлы принадлежащие пользователю user1 find /home -user user1 # Найти файлы оканчивающиеся на txt find /home -name "*.txt" # Найти файлы с правами 000 исключая имя public_ftp и удалить их find /home/ -perm 000 -not -name "public_ftp" -exec rm -rf {} \; # Найти все директории и назначить права по умолчанию find /home -type d -exec chmod 755 {} \; # Найти все файлы и назначить права по умолчанию find /home -type f -exec chmod 644 {} \; # Найти только файлы по имени и выставить права find /home/ -name "xmlrpc.php" -type f -exec chmod 000 '{}' \; # Скопировать все файлы в текущей директории содержащие в имени только цифры # [0-9] - регулярное выражение указывающие на массив из диапазона от 0 до 9 find . -name [0-9] -exec cp {} ~/ todir \; # Удалить пустые файлы find /home -type f -empty -exec rm {} \; # Удалить пустые директории find /home -type d -empty -exec rmdir {} \; # Удалить файлы *.gz в директориях logs, по неопределённому пути в /home/ find /home/*/logs -type f -name '*.gz' -delete # Удалить файлы старше 365 дней find /home -type f -mtime +365 -exec rm -f {} \; # Вывести список файлов в которых встречается текст grep -rl 'строка' ./ # или find ./ -type f -exec grep -l 'строка' {} + # Заменить текст в файлах find ./ -type f -readable -writable -exec sed -i "s/старый/новый/g" {} \; # g - заменяем все вхождения, а не только первое # Функция понимает регулярные выражения, заменим все где число вначале find ./ -type f -readable -writable -exec sed -i "s/\dстарый/новый/g" {} \; # Заменить текст в файле sed -i 's/старый/новый/g' file.txt # Заменить текст в файле только в строках с 1 по 10 sed -i '1,10 s/старый/новый/g' file.txt # Заменить текст в файле везде кроме строк с 1 по 20 sed -i '1,20 !s/старый/новый/g' file.txt
Думаю примеров достаточно, за остальным в man find..
Бывает необходимо найти где находится в системных директориях та или иная утилита
whereis find # или which find
- cat - выводит содержимое файла, например cat /proc/bus/input/devices.
Ещё можно заниматься извращениями, например, копирование содержимого файла Linux в другой файл cat файл1 > файл2
Если файл был не пустым, он будет перезаписан, если воспользоваться >> будет дописан в конец файла2. Можно склеить два отдельных файла в один: cat файл1 файл2 > файл3 - mkdir - создаёт директорию, например mkdir -p /путь/к/директории -p создаст рекурсивно все каталоги (если их не существует), иначе будет выдавать сообщение об ошибке, мол старшего каталога нет..
Сразу с правами mkdir -pm 755 /путь/к/директории - cp - копирует файл/директорию, cp опции файл-источник файл-приемник
cp -r /что /куда
-r - рекурсивно, все подкаталоги
-a = -dR --preserve=ALL не будет следовать по ссылкам (копировать от туда все файлы), а только рекурсивно скопирует: ссылки, файлы, директории с сохранением атрибутов.
-f, --force - перезаписывать существующие файлы
-i, --interactive - спрашивать, необходимо ли перезаписывать существующие файлы
-L - копировать не символические ссылки, а то, на что они указывают
-n - не перезаписывать существующие файлы
-P - не следовать символическим ссылкам
-s - не выполнять копирование файлов в Linux, а создавать символические ссылки
-u - скопировать файл, только если он был изменён
-x - не выходить за пределы этой файловой системы
-p - сохранять владельца, временные метки и флаги доступа при копировании
-t - считать файл-приемник директорией и копировать файл-источник в эту директорию
-v - вывести список обработанных файлов
--attributes-only - не копировать содержимое файла, а только флаги доступа и владельца
Параметров больше, сомотрите man cp в консоли.. (q - выход)
# Скопирует все файлы, начинающиеся на test cp ~/test* ~/todir/ # Копировать директорию fromdir со всем содержимым в текущую директорию cp -a /fromdir . # Скопировать файл cp ~/pic.png ~/to/ # Скопировать с переименованием или просто сделать копию cp ~/pic.png ~/to/wallpaper.png cp pic.png pic2.png # Скопировать группы файлов cp *.txt /to/folder cp *.txt *.jpg "read me.doc" /to/folder
При копировании группы файлов, последнее имя трактуется как место назначения, а все предшествующие файлы, как исходные объекты. В других командах, например mv и rm, также разрешены множественные аргументы.
- mv - позволяет перемещать или переименовывать каталоги и файлы
mv /что /куда
-f - заменять файл, если он уже существует
-i - спрашивать, необходимо ли заменять существующие файлы
-n - не заменять существующие файлы
-u - заменять файл только если он был изменен
-v - вывести список обработанных файлов
mv /from /to # Переименование директории mv /oldname /newname # Переименование файла mv oldname.txt newname.txt mv -vf /tmp/download?platform=linuxDeb /tmp/mailspring.deb # Переместить файлы mv /home/my/* /home/mynew/ # Переместить директорию /my/ в /mynew/ mv /home/my/ /home/mynew/ # Перемещать группы файлов mv *.txt /to/folder/ mv *.txt *.jpg "read me.doc" /to/folder/ # Удалить mv /folder /dev/null
- rm - удаляет файл/директорию, например rm -r /путь
-r - рекурсивно пройти все вложенные директории
-f - не запрашивать подтверждения операций
# Удалить директорию со всем вложенным rm -rf /backup/ # Удалить все объекты в директории rm -rf /backup/* # Удалить все файлы rm -f /var/log/spooler-* rm -f /var/log/messages-* rm -f /var/log/secure-*
Специальные обозначения в консоли
- ~/ - означает домашнюю директорию текущего пользователя.
- $USER - подставить имя текущего пользователя.
- ./ - указание на текущий каталог
- ../ - указание на каталог выше, перейти в каталог выше cd .. или cd ../
- * - Знак подстановки, означает любые символы, например, у нас есть ряд файлов для распаковки или не хочется писать всё целиком (актуально если нет графической оболочки, например, при удалённом управлении..)
# Разархивирование tar -Jxvf arch-17.40-492261.tar.xz tar -Jxvf arch-17*.tar.xz # Показать размер du *.tar.xz
- > - перезаписать файл, точнее отправить вывод команды в файл echo 'Привет' > /путь/файл.txt
- >> - дописать в конец
- {} - подставляет имя каждого файла
- \ - в конце строки сообщает, что необходимо рассматривать следующую строку как одну цепочку команд..
Клавиша TAB во время набора текста - автозаполнение..
Поздравляю, с этого момента ты продвинутый пользователь Linux : )