Розширені команди для користувачів Linux¶
Розширені команди забезпечують більше налаштувань і елементів керування в більш спеціалізованих ситуаціях, коли ви ознайомитеся з основними командами.
Цілі: у цьому розділі майбутні адміністратори Linux дізнаються про:
деякі корисні команди, не описані в попередньому розділі.
деякі розширені команди.
Команди користувача, Linux
Знання:
Складність:
Час читання: 20 хвилин
Команда uniq
¶
Команда uniq
є дуже потужною командою, яка використовується з командою sort
, особливо для аналізу файлів журналу. Це дозволяє сортувати та відображати записи, видаляючи дублікати.
Щоб проілюструвати, як працює команда uniq
, скористаємося файлом firstnames.txt
, який містить список імен:
antoine
xavier
steven
patrick
xavier
antoine
antoine
steven
Примітка
uniq
вимагає, щоб вхідний файл був відсортований перед запуском, оскільки він порівнює лише послідовні рядки.
Без аргументів команда uniq
не відображатиме ідентичні рядки, які слідують один за одним у файлі firstnames.txt
:
$ sort firstnames.txt | uniq
antoine
patrick
steven
xavier
Щоб відобразити лише ті рядки, які з’являються лише один раз, скористайтеся параметром -u
:
$ sort firstnames.txt | uniq -u
patrick
І навпаки, щоб відобразити лише ті рядки, які з’являються у файлі щонайменше двічі, скористайтеся параметром -d
:
$ sort firstnames.txt | uniq -d
antoine
steven
xavier
Щоб просто видалити рядки, які з’являються лише один раз, скористайтеся опцією -D
:
$ sort firstnames.txt | uniq -D
antoine
antoine
antoine
steven
steven
xavier
xavier
Нарешті, щоб підрахувати кількість входжень кожного рядка, використовуйте параметр -c
:
$ sort firstnames.txt | uniq -c
3 antoine
1 patrick
2 steven
2 xavier
$ sort firstnames.txt | uniq -cd
3 antoine
2 steven
2 xavier
Команда xargs
¶
Команда xargs
дозволяє створювати та виконувати командні рядки зі стандартного введення.
Команда xargs
зчитує зі стандартного вводу аргументи, розділені пробілами або переводами рядків, і виконує команду (за замовчуванням /bin/echo
) один або кілька разів, використовуючи початкові аргументи, за якими йдуть аргументи, прочитані зі стандартного введення.
Першим і найпростішим прикладом може бути наступне:
$ xargs
use
of
xargs
<CTRL+D>
use of xargs
Команда xargs
очікує введення зі стандартного введення stdin. Введено три рядки. Кінець введення користувача вказується в xargs
послідовністю натискань клавіш Ctrl+D. Потім xargs
виконує команду за замовчуванням echo
, за якою слідують три аргументи, що відповідають введеним користувачам, а саме:
$ echo "use" "of" "xargs"
use of xargs
Можна вказати команду, яку буде виконувати xargs
.
У наступному прикладі xargs
виконає команду ls -ld
для набору папок, указаних у стандартному вводі:
$ xargs ls -ld
/home
/tmp
/root
<CTRL+D>
drwxr-xr-x. 9 root root 4096 5 avril 11:10 /home
dr-xr-x---. 2 root root 4096 5 avril 15:52 /root
drwxrwxrwt. 3 root root 4096 6 avril 10:25 /tmp
На практиці команда xargs
виконала команду ls -ld /home /tmp /root
.
Що станеться, якщо команда, яку потрібно виконати, не приймає кілька аргументів, як команда find
?
$ xargs find /var/log -name
*.old
*.log
find: paths must precede expression: *.log
Команда xargs
намагалася виконати команду find
із кількома аргументами за параметром -name
, що спричинило find
створення помилки:
$ find /var/log -name "*.old" "*.log"
find: paths must precede expression: *.log
У цьому випадку командою xargs
потрібно примусово виконати команду find
кілька разів (один раз на рядок, введений як стандартний ввід). Параметр -L
із наступним цілим числом дозволяє вказати максимальну кількість записів, які потрібно обробити командою одночасно:
$ xargs -L 1 find /var/log -name
*.old
/var/log/dmesg.old
*.log
/var/log/boot.log
/var/log/anaconda.yum.log
/var/log/anaconda.storage.log
/var/log/anaconda.log
/var/log/yum.log
/var/log/audit/audit.log
/var/log/anaconda.ifcfg.log
/var/log/dracut.log
/var/log/anaconda.program.log
<CTRL+D>
Щоб вказати обидва аргументи в одному рядку, скористайтеся параметром -n 1
:
$ xargs -n 1 find /var/log -name
*.old *.log
/var/log/dmesg.old
/var/log/boot.log
/var/log/anaconda.yum.log
/var/log/anaconda.storage.log
/var/log/anaconda.log
/var/log/yum.log
/var/log/audit/audit.log
/var/log/anaconda.ifcfg.log
/var/log/dracut.log
/var/log/anaconda.program.log
<CTRL+D>
Приклад резервного копіювання за допомогою tar
на основі пошуку:
$ find /var/log/ -name "*.log" -mtime -1 | xargs tar cvfP /root/log.tar
$ tar tvfP /root/log.tar
-rw-r--r-- root/root 1720 2017-04-05 15:43 /var/log/boot.log
-rw-r--r-- root/root 499270 2017-04-06 11:01 /var/log/audit/audit.log
Особливістю команди xargs
є те, що вона розміщує вхідний аргумент у кінці викликаної команди. Це дуже добре працює з наведеним вище прикладом, оскільки передані файли формуватимуть список файлів, які потрібно додати до архіву.
Використовуючи приклад команди cp
, щоб скопіювати список файлів у каталозі, цей список файлів буде додано в кінці команди... але що команда cp</ code> очікує в кінці команди призначення. Щоб зробити це, скористайтеся опцією <code>-I
, щоб розмістити вхідні аргументи не в кінці рядка.
find /var/log -type f -name "*.log" | xargs -I % cp % /root/backup
Параметр -I
дозволяє вказати символ (символ %
у наведеному вище прикладі), куди будуть розміщені вхідні файли для xargs
.
Пакет yum-utils
¶
Пакет yum-utils
— це набір утиліт, створених для yum
різними авторами, які роблять його зручнішим і потужнішим у використанні.
Примітка
Хоча yum
було замінено на dnf
у Rocky Linux 8, назва пакета залишилася yum-utils
, хоча його також можна встановити як dnf-utils
. Це класичні утиліти YUM, реалізовані як прокладки CLI поверх DNF для підтримки зворотної сумісності з yum-3
.
Ось кілька прикладів цих утиліт.
Команда repoquery
¶
Команда repoquery
використовується для запиту пакетів у сховищі.
Приклади використання:
- Відображення залежностей пакета (це може бути пакет програмного забезпечення, який було встановлено або не встановлено), еквівалентно
dnf deplist <package-name>
repoquery --requires <package-name>
- Відображати файли, надані встановленим пакетом (не працює для пакетів, які не встановлено), еквівалентно
rpm -ql <package-name>
$ repoquery -l yum-utils
/etc/bash_completion.d
/etc/bash_completion.d/yum-utils.bash
/usr/bin/debuginfo-install
/usr/bin/find-repos-of-install
/usr/bin/needs-restarting
/usr/bin/package-cleanup
/usr/bin/repo-graph
/usr/bin/repo-rss
/usr/bin/repoclosure
/usr/bin/repodiff
/usr/bin/repomanage
/usr/bin/repoquery
/usr/bin/reposync
/usr/bin/repotrack
/usr/bin/show-changed-rco
/usr/bin/show-installed
/usr/bin/verifytree
/usr/bin/yum-builddep
/usr/bin/yum-config-manager
/usr/bin/yum-debug-dump
/usr/bin/yum-debug-restore
/usr/bin/yum-groups-manager
/usr/bin/yumdownloader
…
Команда yumdownloader
¶
Команда yumdownloader
завантажує пакети RPM зі сховищ. Еквівалент dnf download --downloadonly --downloaddir ./ package-name
Примітка
Ця команда дуже корисна для швидкого створення локального сховища з кількома обертами за хвилину!
Приклад: yumdownloader
завантажить пакет rpm samba та всі його залежності:
$ yumdownloader --destdir /var/tmp --resolve samba
or
$ dnf download --downloadonly --downloaddir /var/tmp --resolve samba
Опції | Коментарі |
---|---|
--destdir |
Завантажені пакети будуть збережені у вказаній папці. |
--resolve |
Також завантажує залежності пакетів. |
Пакети psmisc
¶
Пакет psmisc
містить утиліти для керування системними процесами:
pstree
: командаpstree
відображає поточні процеси в системі у вигляді дерева.killall
: командаkillall
надсилає сигнал завершення всім процесам, визначеним за назвою.fuser
: командаfuser
визначаєPID
процесів, які використовують вказані файли або файлові системи.
Приклади:
$ pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]
# killall httpd
Kill процеси (параметр -k
), які мають доступ до файлу /etc/httpd/conf/httpd.conf
:
# fuser -k /etc/httpd/conf/httpd.conf
Команда watch
¶
Команда watch
регулярно виконує команду та відображає результат у терміналі на весь екран.
Параметр -n
дозволяє вказати кількість секунд між кожним виконанням команди.
Примітка
Щоб вийти з команди watch
, ви повинні ввести клавіші: Ctrl+C для зупинки процесу.
Приклади:
- Відображати кінець файлу
/etc/passwd
кожні 5 секунд:
watch -n 5 tail -n 3 /etc/passwd
Результат:
Every 5.0s: tail -n 3 /etc/passwd rockstar.rockylinux.lan: Thu Jul 1 15:43:59 2021
sssd:x:996:993:User for sssd:/:/sbin/nologin
chrony:x:995:992::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- Контроль кількості файлів у папці:
watch -n 1 'ls -l | wc -l'
- Показати годинник:
watch -t -n 1 date
Команда install
¶
На відміну від назви, команда install
не використовується для встановлення нових пакетів.
Ця команда поєднує копіювання файлів (cp
) і створення каталогу (mkdir
) із керуванням правами (chmod
, chown
) та інші корисні функції (наприклад, резервне копіювання).
install source dest
install -t directory source [...]
install -d directory
Опції:
Опції | Зауваження |
---|---|
-b або --backup[=suffix] |
створює резервну копію цільового файлу. |
-d |
розглядає аргументи як імена каталогів. |
-D |
створює всі провідні компоненти перед копіюванням SOURCE у DEST. |
-g та -o |
встановлює право власності. |
-m |
встановлює дозволи. |
-p |
зберігає мітки часу вихідних файлів. |
-t |
копіює всі вихідні аргументи до каталогу. |
Примітка
Існують параметри для керування контекстом SELinux (див. сторінку підручника).
Приклади:
Створення каталогу за допомогою параметра -d
:
install -d ~/samples
Скопіюйте файл із вихідного розташування до каталогу:
install src/sample.txt ~/samples/
Ці два накази можна було виконати за допомогою однієї команди:
$ install -v -D -t ~/samples/ src/sample.txt
install: creating directory '~/samples'
'src/sample.txt' -> '~/samples/sample.txt'
Ця команда вже економить час. Поєднайте його з власником, групою власників і керуванням правами, щоб покращити економію часу:
sudo install -v -o rocky -g users -m 644 -D -t ~/samples/ src/sample.txt
Примітка
sudo
потрібен у цьому випадку, щоб змінити властивість.
Ви також можете створити резервну копію існуючих файлів завдяки опції -b
:
$ install -v -b -D -t ~/samples/ src/sample.txt
'src/sample.txt' -> '~/samples/sample.txt' (archive: '~/samples/sample.txt~')
Як бачите, команда install
створює файл резервної копії з тильдою ~
, доданою до оригінального імені файлу.
Суфікс можна вказати за допомогою параметра -S
:
$ install -v -b -S ".bak" -D -t ~/samples/ src/sample.txt
'src/sample.txt' -> '~/samples/sample.txt' (archive: '~/samples/sample.txt.bak')
Команда tree
¶
Розгорніть файли або каталоги в каталозі у вигляді дерева.
опції | опис |
---|---|
-a |
Усі файли перераховані |
-h |
Друкує розмір у більш зрозумілий спосіб |
-u |
Відображає власника файлу або номер UID |
-g |
Відображає власника групи файлів або номер GID |
-p |
Друкує захист для кожного файлу |
Наприклад:
$ tree -hugp /etc/yum.repos.d/
/etc/yum.repos.d/
├── [-rw-r--r-- root root 1.6K] epel-modular.repo
├── [-rw-r--r-- root root 1.3K] epel.repo
├── [-rw-r--r-- root root 1.7K] epel-testing-modular.repo
├── [-rw-r--r-- root root 1.4K] epel-testing.repo
├── [-rw-r--r-- root root 710] Rocky-AppStream.repo
├── [-rw-r--r-- root root 695] Rocky-BaseOS.repo
├── [-rw-r--r-- root root 1.7K] Rocky-Debuginfo.repo
├── [-rw-r--r-- root root 360] Rocky-Devel.repo
├── [-rw-r--r-- root root 695] Rocky-Extras.repo
├── [-rw-r--r-- root root 731] Rocky-HighAvailability.repo
├── [-rw-r--r-- root root 680] Rocky-Media.repo
├── [-rw-r--r-- root root 680] Rocky-NFV.repo
├── [-rw-r--r-- root root 690] Rocky-Plus.repo
├── [-rw-r--r-- root root 715] Rocky-PowerTools.repo
├── [-rw-r--r-- root root 746] Rocky-ResilientStorage.repo
├── [-rw-r--r-- root root 681] Rocky-RT.repo
└── [-rw-r--r-- root root 2.3K] Rocky-Sources.repo
0 directories, 17 files
Команда stat
¶
Команда stat
відображає стан файлу або файлової системи.
$ stat /root/anaconda-ks.cfg
File: /root/anaconda-ks.cfg
Size: 1352 Blocks: 8 IO Block: 4096 regular file
Device: 10302h/66306d Inode: 2757097 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-01-20 13:04:57.012033583 +0800
Modify: 2023-09-25 14:04:48.524760784 +0800
Change: 2024-01-24 16:37:34.315995221 +0800
Birth: 2
File
- Відображає шлях до файлу.Size
- Відображає розмір файлу в байтах. Якщо це каталог, він відображає фіксовані 4096 байт, зайняті назвою каталогу.Blocks
- Відображає кількість виділених блоків. Увага, будь ласка! Розмір кожного блоку в цій команді становить 512 байт. Стандартний розмір кожного блоку вls -ls
становить 1024 байти.Device
- Номер пристрою в десятковій або шістнадцятковій системі числення.Inode
- Inode — це унікальний ідентифікаційний номер, який ядро Linux призначає файлу або каталогу.Links
- Кількість жорстких посилань. Жорсткі посилання іноді називають фізичними посиланнями.Access
- Час останнього доступу до файлів і каталогів, тобтоatime
у GNU/Linux.Modify
- Час останньої модифікації файлів і каталогів, тобтоmtime
у GNU/Linux.Change
- Востаннє властивість змінено, наприклад,ctime
у GNU/Linux.Birth
- Час народження (час створення). У деяких документах він скорочується якbtime
абоcrtime
. Для відображення часу створення вам потрібна файлова система та версія ядра, яка перевищує певну версію.
Для файлів:
atime – після доступу до вмісту файлу за допомогою таких команд, як cat
, less
, more
і head
, atime
файл можна оновити. Будь ласка, зверніть увагу! atime
файлу не оновлюється в реальному часі, і з міркувань продуктивності йому потрібно зачекати деякий час, перш ніж його можна буде відобразити. mtime – зміна вмісту файлу може оновити mtime
файлу (наприклад, додавати або перезаписувати вміст файлу за допомогою переспрямування), оскільки розмір файлу є властивістю файлу, ctime
також буде оновлено одночасно. ctime. Зміна власника, групи, дозволів, розміру файлу та посилань (м’яких і жорстких посилань) файлу призведе до оновлення ctime.
Для каталогів:
atime – після використання команди cd
для входу в новий каталог, доступу до якого раніше не було, ви можете оновити та виправити atime
цього каталогу. mtime – виконання таких операцій, як створення, видалення та перейменування файлів у цьому каталозі, оновить mtime
і ctime
довідника. ctime – коли дозволи, власник, група тощо каталогу змінюються, ctime
каталогу буде оновлено.
Підказка
- Якщо ви створюєте новий файл або каталог, його
atime
,mtime
іctime
точно збігаються - Якщо вміст файлу змінено,
mtime
таctime
файлу неминуче буде оновлено. - Якщо в каталозі створюється абсолютно новий файл,
atime
,ctime
іmtime
цього каталогу буде оновлено одночасно. - Якщо
mtime
каталогу оновлюється, тоctime
цього каталогу має бути оновлено.