PS
Решил поделиться своими заметками по разным тематикам. Сразу предупреждаю, что они могут быть малого объёма и не раскрывать тему полностью (какие-то базовые/начальные вещи). Я писал их для себя, чтобы быстрее въехать в какой-либо материал, либо когда понадобиться - открыть и вспомнить, что и как (короче, использую как шпаргалки).
В настоящей статье описаны некоторые команды терминала Linux. Решил разделить на несколько частей, а то много получается для одной.
Краткой содержание данной статьи: навигация, создание файлов и директорий, информация по ФС в целом, пару полезных команд и утилит и многое другое.
В следующих частях:
- 2 часть: aliases, функции и цикл for, подключение по публичному ключу на сервер, подробнее о процессах в системе, сбор информации о системе, создание пользователей и изменение их параметров, некоторые системные и сетевые настройки.
- 3 часть: роутинг пакетов и встроенный в ядро межсетевой экран Netfilter (iptables) и утилиты для работы с сетью.
PSS
Как и в прошлой статье про Кали Линух перед командами я буду ставить значок бакса ($), это просто обозначение команд в терминале. Для некоторых могут потребоваться права суперюзера, но в Дзен невозможно поставить решетку, так как он воспринимает это как хештег...
Начнемс
Я не знаю почему у меня в заметках это стоит в начале, поэтому сразу с козырей:
tcpdump - это анализатор трафика, который стоит до firewall Linux, поэтому через него можно посмотреть входящие пакеты до их фильтрации:
$ tcpdump -w 'file' -c 'number' -nve port 'number' proto 'protocol' 'interface'
В данной команде использованы следующие флаги и значения:
- -w 'file' - запись полученного трафика в файл;
- -с 'number' - ограничение по пакетам;
- -n - не конвертирует IP-адреса в доменные имена (ускоряет работу);
- -v - verbose, выводит чуть больше инфы;
- -e - выводит заголовок канального уровня;
- port 'number' - указываем интересующий (можно глянуть в /etc/services)
- proto 'protocol' - указываем интересующий протокол (можно глянуть в /etc/protocols))
- 'interface' - (обязательный параметр) указываем интерфейс, на котором будем слушать трафик.
Кстати, все флаги, значения, параметры, которые можно использовать для утилит, а также их описание и примеры использования (иногда) можно посмотреть, прописав одну из следующих команд:
$ man 'name_of_utilita' ; чтобы выйти нажмите "q"
$ 'name_of_utilita' --help
Немного разогрелись, теперь пройдемся по базе, по самому началу:
Для того, чтобы узнать, что вы за фрукт пользователь, можно использовать одну из команд:
$ whoami
$ groups
$ id
$ echo $USER
Возможно, вы потерялись и хотите понять, где вы и что вокруг вас, тогда следующие команды для вас:
$ hostname; выводит имя вашей тачки
$ uname -a ; выводит информацию по системе
$ pwd ; print working directory, выводит полный путь до вас
$ ls -al ; list, выводит содержимое текущей директории
Немного о дисковом пространстве в вашей системе. Для просмотра занятого/свободного пространства на дисках используем следующую команду:
$ df ; disk free
Флаги, которые можно использовать с данной командой:
- -h (humanreadable) - вывод информации в удобочитаемой форме;
- -i (inode) - вывод информации про иноды (инод - сущность, в которой хранится мета-информация о файле, иногда может хватать места для файлов, но могут закончится иноды, так как место для них резевируется при создании файловой системы, обычно это 1% от общего пространства).
Вот еще одна команда, она показывает сколько памяти используется и свободно:
$ free ; можно добавить флаг (-h), как и в предыдущем случае
В выводе увидите: total, used, free, shared - память используемая несколькими программами, buffers - зарезервированная память системой для процессов, cached - часто используемая информация, swap - виртуальная память (в винде - файл подкачки, при ее использовании все тормозит, используется тогда, когда кончилась физическая, иногда туда засовываются участки информации, которые очень редко используются, либо программы которые требуют много, но используют мало, то им выделяется не физическая память, а виртуальная), w/who - открытые сессии с системой.
Немного о ФС
Файловая система - иерархическая
- / - корень
- /etc - локальные настройки
- /home - каталоги пользователя
- /bin (*/bin) - базовые утилиты
- /sbin (*/sbin) - сервисные утилиты
- /usr - общая часть программ
- /var - изменяемые файлы (логи, очереди и тд)
Посмотрим информацию об объектах (если так можно сказать) в системе, используя описанную выше команду:
$ ls -al
Вывод следующий (слева направо): типа файла/права UGO, количество ссылок на данный инод, пользователь, группы, размер файла, дата создания, наименование.
Тип файла:
- - : file
- d : directory
- s : socket
Модель UGO (user/group/other) - права пользователя, группы, остальных. Для каждой категории есть 3 значения: r-read, w-write, x-execute (права на чтение, запись и исполнение). Если стоит "-", то такого права у соответствующего субъекта нет. Например, на рисунке выше для файла ".emacs" (файл, так как первое значение = "-") у пользователя Denimoll есть права на чтение и запись, а у группы staff и остальных пользователей есть права только на чтение данного файла.
Иногда нельзя изменять документ даже когда он доступен для записи, для этого проверяем файл следующей командой:
$ lsattr 'name_of_file'
Если в выводе присутствует атрибут "i", то значит такой файл запрещено менять даже пользователю root. Чтобы убрать/добавить данный атрибут можно прописать:
$ chattr -i 'name' ; убираем
$ chattr +i 'name' ; добавляем
Еще немного про иноды.
$ ls -i .bash_history
1083617 .bash_history
Выводит номер инода, на который ссылается файл ".bash_history".
$ stat .bash_history
Выводит данные инода (Mtime - дата когда изменили контент файла, Ctime - когда поменяли метаданные, то есть права пользователя или что-то подобное).
Процессы
Для мониторинга процессов, запущенных в системе используются следующие команды:
$ ps ; вывод процессов в данной сессии
$ ps ax ; вывод всех процессы
$ ps ax | grep 'name' ; процессы отфильтрованные по 'name' (grep крутая штука)
Чтобы удалить процесс убиваем его:
$ kill 'number of process' ; посылается 15 сигнал, то есть terminate
$ kill -9 ''number of process' ; stop-сигнал
Полезные вещи
/dev/null - черная дыра (можно забрасывать туда что угодно, оно уничтожается)
/dev/zero - источник нулей. Можно использовать для тестирования скорости или для создания гипербольшого файла:
$ dd if=/dev/zero of=./testfile1 bs=4k
/dev/random, /dev/urandom - источники случайных данных
Полезные утилиты
- tee - дублирует данные полученные через stdin в файл и в stdout
$ ps ax | grep process | tee /dev/null
- which 'program' - покажет по какому пути расположен исполняемый файл program, который будет выполняться при запуске program
Полезные команды
- Ctrl+z - увести текущую программу в фон (или в конце программы &)
- bg - продолжить ее выполнение в фоне (background)
- fg - достать программу из фона (foreground)
- jobs - посмотреть список фоновых задач
- fg N - достать задачу номер N
- kill %'number of job'
Поиск файлов
Для поиска файлов можно использовать одну из следующих команд:
$ ls 'dir' | grep 'name_of_file' ; поиск в директории dir
$ find . -name 'name' ; . - это значит в текущей директории
$ locate 'ляля'
$ find . -name "*.gz" ; найти в текущей директории файлы с именем, подходящим под маску '*.gz'
$ find . -name "*.gz" -exec echo "file {} found" \ ; та же команда, но с красивым выводом - file ляля.gz found
Редактор VIM
Даже про такой редактор у меня немного инфы есть. Имеет 2 режима: вставка и командный.
- i,a - режим вставки
- esc - выйти из режима вставки
- ^,$ - начало/конец строки
- dw, d6, d$, dd - удалить (слово, 6 символов справа, все до конца строки, строку)
- yy - скопировать строку
- p - вставить строку
- x,wq - выйти с сохранением
Подробнее можно посмотреть туц.
Навигация, файлы и директории
Создать файл можно так:
$ cat > file + пишем текст
$ touch file
Создать каталог так:
$ mkdir dir ; флаги -v, -p - создание сразу нескольких
Команда копи:
$ cp 'one' 'to two' ; флаги: -v, -r-скопировать включая каталоги, -p - сохраняет права/разрешения
Передвижение
$ cd 'dir' ; (если прописать "-", то перейдет в предыдущую директорию, например были в desk, потом cd /users/denimoll, пишем cd - и мы снова в desk)
$ cd .. ; вернуть на одну директорию назад (были в /home/user, стали в /home)
$ pushd dir ; сменить директорию (предыдущая сохранится в стек)
$ popd ; сменить директорию на верхнюю из стека
$ dirs ; показать стек директорий
Подводочка
Пока писал, оформлял, понял, что все в куче и новичкам вкурить будет сложно. У меня еще очень много заметок по Линуху осталось, так что 2-3 статьи будет по нему точно.