Старт основан на runlevel. Показать текущий уровень - команда runlevel
Переключиться на другой уровень можно с помощью команды inti level_number
В папке /etc/rc{level_number}.d лежат скрипты запуска этого уровня. Те что начинаются с К - kill, те что начинаются с S - start. В папке /etc/init.d лежат севрисы. Изначальная конфигурация запуска в /etc/inittab
# полезные команды
runlevel
wall "pc will be shundown"
init 0
telinit 0
service docker start
В более современных системах для запуска используется systemd. systemd оперирует юнитами. Юниты хранятся в директориях:
виды юнитов
systemctl list-units
systemctl --failed
systemctl list-units --type service
systemctl status docker
systemctl stop docker
systemctl start docker
цели - аналог уровнев в sysv
Runlevel | Target | |
---|---|---|
0 | poweroff.target | выключение |
1 | rescue.target | однопользовательский режим |
2,4 | multi-user.target | настраиваемые режимы |
3 | multi-user.target | многопользовательский режим |
5 | graphical.target | графический режим |
6 | reboot.target | перезагрузка |
# запущенные таргеты (аналог runlevel)
systemctl list-units --type=target
# переключиться на другой (аналог init)
systemctl isolate name.target
#посмотреть что установлено по умолчанию
systemctl get-default
# установить по умолчанию
systemctl set-default -f name.target
journal - служба журналирования
# показать события в реальном времени
jounalctl -f
# показать события рута
journalctl _UID=0
# в интервале с grep
journalctl --since="2021-04-21 23:59" --until="2021-04-22 02:00" | grep -v multipathd
# по script name
journalctl _COMM=cron --since="00:00"
Оперирует Services и Tasks. хранит jobs в /etc/init
Для управления используется утилита initctl
Конфигурации библиотек хранятся в файле /etcc/ld.so.conf
он подключает все файлы в директории /etc/ld.so.conf.d/*.conf
# обновить кеш библиотек
ldconfig
# используемые бинарником библиотеки
ldd /bin/ls
export LD_LIBRARY_PATH=/opt/soft/lib
ldconfig
В дебиане для управления пакетов служит утилита apt-get. Список репозиториев для нее хранится в файле /etc/apt/sources.list
dpkg
-l перечень пакетов в системе
-L перечень файлов в системе
-s статус пакета
-S поиск пакета содержащего файл
dpkg -S /bin/ifconfig
-i install
-r remove
-P remove with configs
dpkg-reconfigure - переконфигурация
apt-cache search something
apt-cahce show something
apt-cache depends something
apt-cache rdepends something
apt-get install something
apt-get remove something
apt-get --purge remove webmin
apt-get autoremove
apt-get install aptitude
aptitude
В RedHat дистпридутивах перечень репозиториев хранится в /etc/yum.repos.d
rpm -iv somePackage.rpm
# проверка пакета
rpm -Vv somePackage
# получение ниформации query
rpm -q somePackage
# extract
rpm2cpio somePakcage > somePakcage.cpio
less something.cpio
yum install somePakcage
yum remove somePackage
yum upgrade
yum search something
#download rpms
yum downloader somePackage
основные настройки облочки bash сохраняются в /etc/profile
настройки для пользователя ~/.profile
далее настройки внешенего вида настраиваются в ~/.bashrc
# выполнение несскольких команд
echo hello; ls; echo Buy
# запись информации в файл
cat >file.txt
echo some content
^C
env
abc=123
export abc
echo $abc
unset abc
PATH=$PATH:.
touch {6,7,8}.txt
uname -a
# опредилить тип файла
file someFile.txt
whatis history
history
man -k http
# игнорируем настройи профиля
exec ls -a
cat somefile
cut -c 2,3,5 test.txt
fmt -w 5 text.txt
sed -e 's/something/somethingNew'
tail -n 7 somefile
может работать в реальном времени tail -f somefile
echo Hello| tr -t A-Z a-z
awk -F: '{if($3==0) {print }}' /etc/passwd
- вывод строки для рута# поиск файлов
find . -type f
# по имени
find . -name somename
# найти больше чем 5MB
find . -size +5M
# найти по времени доступа в днях
find . -atime +5
# найти по времени изменения в днях
find . -сtime +5
#locate в некоторых дистрибутивах есть быстрый поиск
locate something
#cpio
ls | cpio -o > ../test.cpio
find . -name *.txt | cpio -o > test2.cpio
cpio -id < ../test2.cpio
# dd
dd if=/dev/sdb of=drive.img
dd if=/dev/sda bs=64k | ssh root@centos5.5 «dd of=/dev/mapper/vg00-lv_rh73 bs=64k»
#gzip
gzip drive.img
gunzip drive.img.gz
#bzip2
bzip2 drive.img
bunzip2 drive.img.bz2
#xz
xz drive.img
unxz drive.img.xz
#tar
tar cvf archive.tar folder
tar xvf archive.tar
# исользует gz для сжатия в tar.gz
tar cvfz archive.tar folder
wc file.txt
wc < file.txt
ls > list.txt 2>error.log
ls >> addToList.txt 2>error.log
# вывод на экран и в файл
ls | tee output.txt
# построчная передача как параметр
find . -name *.txt | xargs rm -f
# запуск в фоновом режиме с помощью &
sleep 10000 &
# проверить
jobs
# вернуть
fg 1
#остановим ^Z и запустим
bg 1
# отобразить процессы
ps -aux
# убить все в именем
killall sleep
kill -9 pid
# предотвращает прекращение процесса при логауте
nohup sleep 1000
#
pgrep sleep -l
pkill sleep
# uptime говорит кроме времени работы общую загрузку системы и количество пользователей
uptime
# память
free
# Приоритет процесса NI (nice) -20 - максимум, 19 - минимум
ps alx
ps -eo user,pid,pcpu,nice,comm
nice sleep 6000 & # устанавливает низкий приоритет 10
nice -n -20 sleep 6000 & # устанавливает высший приоритет -20
renice 5 -p PID # переустановить приоритет
renice 15 -u username
Обычно более просто операции с процессами можно выполнить с помощью top
#top
top
процесс можно убить нажав k введя pid и сигнал 15 - мягко sigterm, 9 - жестко sigkill
<> сортировка
посмотреть по ядрам 1
скрыть idle процессы i
load average среднее количество процессов в очереди планировщика за соответственно 1 5 15 минут
0.0%us - процент использования процессора процессами пользователя
0.3%sy - процент использования процессора системными вызовами
0.0%wa - процент времени процессор ждал завершения дисковых операций
0.0%ni - процент использования процессора процессами с повышенным приоритетом nice
99.7%id - процент бездействия процессора
hi = servicing IRQs
si = servicing soft IRQs
st = steal (time given to other DomU instances)
top - 20:56:15 up 6 days, 33 min, 3 users, load average: 0.05, 0.01, 0.00
Tasks: 146 total, 1 running, 145 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1923456k total, 1690960k used, 232496k free, 172140k buffers <- использование памяти
Swap: 1675256k total, 8k used, 1675248k free, 1078592k cached <- использование swap больше ноля плохо
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
apt-get install sysstat
iostat -xmt 1 10
iotop -P
#показать SMART
smartctl -a /dev/sda
#показать UID и метки
blkid
#данные из планировщика диска
blockdev --report
sar -d
#данные по загрузке диска для процесса
pidstat -d
# -n - нумеровать строки
grep -n something somefile.txt
# -i - не обращать внимания на регистр
grep -i something somefile.txt
:wq или ZZ - выйти с сохранением
:q! или ZQ - выйти без сохранения
:e! - отменить все
/ - начать поиск ниже
? - начать поиск выше
N и n - продолжить поиск
Права Linux кодируются цифрами (bitmask 1,2,4) либо буквами (rwx), a - all, g - group, o - other, u - user
chmod a+x file
chmod go-w file
chmod ugo+x file
Специальные биты прав Linux
chmod u+s script
позволяет запускать файл от имени пользователя - владельца скриптаchmod g+s script
позволяет запускать файлы от имени группы владельца скрипта, для папок меняет группу владельца создаваемых файлов на группу владельца папкиchmod o+t file
- для защиты папки, если установлен удалить содержимое может только владелец либо rootнапример 4751 - установлен suid bit, полные права у пользователя (4+2+1), на чтение и исполнение у группы, только на исполнение у остальных
Права по умолчанию. По умолчания файл создается с правами 666 - маска, а папка 777 - маска. Маска задается для пользователя через команду например umask 022
означает что для этого пользователя файлы будут создаваться с правами 666 - 022 = 644, а папки 777 - 022 = 755. Персистентно можно изменить в файле `grep UMASK /etc/login.defs
mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt
mkswap /dev/sda2
swapon /dev/sda2
# (use -U or -L to define by UUID or labels, respectively)
genfstab -U /mnt >> /mnt/etc/fstab
# disk free
df -h
# показать inode
df -i
# взвесить summarize - не показывать размер вложенных но суммировть его в результат
du -h --summarize .
# показать inode файлов
ls -i
# проверить
umount /dev/sdb1
fsck /dev/sdb1
fsck -t ext4 /dev/sdb1
# низкоуровневая работа с файловой системой
debugfs -v /dev/sdb1
mount -v -t nfs 192.168.1.109:/c/Users/RF/Downloads /home/nfs/
mount /dev/xvdb1 /mnt/share -o acl,user_xattr
файл конфигурации хрантся в ` /usr/share/X11/xorg.conf.d/ или
/etc/X11`
echo $DISPLAY
cat /etc/X11/default-display-manager
/usr/bin/sddm
# первый вариант не учитывающий изменения в файлах
find / | grep -v '^/proc' > snapshot1
#Install software on to your system. After you install the software continue.
find / | grep -v '^/proc' > snapshot2
diff -crB snapshot1 snapshot2 > changes
# вариант с расчетом контрольных сумм
find / ! -wholename '/proc*' -type f -prune -print0 | xargs -0 md5sum| tee md5sum.txt
md5sum -c md5sum.txt 2> /dev/null | grep -i 'FAILED$' > failed.txt
cat failed.txt | grep -v "var\|sys" >diff.txt
sed 's/: FAILED//g' diff.txt> result.txt
cat result.txt | xargs md5sum > changedmd5.txt
for i in $(tr '\r' '\n' < result.txt); do grep $i md5sum.txt; done >md5before.txt
md5sum -c md5before.txt 2> /dev/null | grep -i 'FAILED$'
# to edit /etc/sudoers use visudo
User_Alias ADMINS = radiofisik, dockeruser
ADMINS ALL=(ALL) NOPASSWD:ALL
#посмотрим название интерфейса в ip link
ip link
#испольлзуем это название для нахождения или сооздания файла конфигурации
vi /etc/systemd/network/enp0s4.network
[Match]
name=en*
[Network]
DHCP=yes
#Address=192.168.1.10/24
#Gateway=192.168.1.1
#перезапустим сеть и включим автозагрузку
systemctl restart systemd-networkd
systemctl enable systemd-networkd
#настроим использование dns в /etc/resolv.conf
nameserver 8.8.8.8
#hostname
echo MySuperHost > /etc/hostname
#Определить какое приложение слушает порт
netstat -tpln
#tcpdump
tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and ip proto \icmp'
#замер трафика на интерфейсе
m1=`cat /sys/class/net/eth1/statistics/tx_bytes` ; sleep 10s ; m2=`cat /sys/class/net/eth1/statistics/tx_bytes` ; echo $((($m2-$m1)/1024))
#вычислим строчку конфигурации
gtf 1920 1080 60
# 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
#используя ее установим разрешение
# Create 1920x1080 resolution mode
xrandr --newmode '1920x1080' 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
# Add new resolution mode to the display
xrandr --addmode Virtual1 1920x1080
# Resize the display to use the new resolution mode
xrandr --output Virtual1 --mode '1920x1080' --rate 60
# список дисков
ubuntu@stageb:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 55.4M 1 loop /snap/core18/1944
loop1 7:1 0 69.9M 1 loop /snap/lxd/19188
loop2 7:2 0 32.3M 1 loop /snap/snapd/11402
loop3 7:3 0 32.3M 1 loop /snap/snapd/11588
loop4 7:4 0 55.5M 1 loop /snap/core18/1997
loop5 7:5 0 70.4M 1 loop /snap/lxd/19647
sda 8:0 0 400G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 399G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 399G 0 lvm /
sr0 11:0 1 1024M 0 rom
# список железа
lshw
lsusb
lspci
# список модулей ядра
lsmod
Открытые порты
sudo netstat -tulnp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1027/nginx: master
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 9740/docker-proxy
tcp 0 0 0.0.0.0:8090 0.0.0.0:* LISTEN 11130/node
sudo ss -tulnp | grep :80
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1032,fd=8),("nginx",pid=1027,fd=8))
tcp LISTEN 0 4096 0.0.0.0:8001 0.0.0.0:* users:(("docker-proxy",pid=9740,fd=4))
sudo systemctl status nginx
sudo systemctl stop nginx
sudo systemctl disable nginx