filesystem
See file info
stat /path/to/file
Enable moutn by label
e2label /dev/sda2 "boot"
nano /etc/fstab
LABEL=boot /boot ext4 defaults 0 1
LABEL=disk2 /data/disk2 ext4 defaults 0 1
Change file owner
chown -R node_exporter:node_exporter /usr/local/bin/node_exporter
Change owner for folder
chown -R root /data/disk2
Change group for folder
chgrp -R root /data/disk2
Chage access level for folder
chmod -R 755 /data/disk2
Set script executable
chmod u+x /usr/local/bin/dockerrm.sh
Allow run as root
chmod u+s /usr/local/bin/dumbproxy
ACL
apt install acl
setfacl -R -m u:dumbproxy:rX /etc/letsencrypt/
setfacl -R -d -m u:dumbproxy:rX /etc/letsencrypt/
getfacl /etc/letsencrypt/
Get file ACL from backup and apply it to prod
cd /opt/app-backup-directory
getfacl -R . > /opt/saved-permissions
cd /opt/app-prod-directory
setfacl --restore=/opt/saved-permissions
Copy folder
rsync -av /var/lib/docker /data/disk2
Rename folder
mv /var/lib/docker /var/lib/docker.08-04-22.backup
Top 5 folders by space used
du -Sh /opt | sort -rh | head -5
Look for text in gz files recursively
find . -name \*.log.gz -print0 | xargs -0 zgrep "TEXT PATTERN"
List block devices
lsblk -o NAME,PATH,MOUNTPOINT,SIZE,FSSIZE,FSAVAIL,FSTYPE,TYPE,TRAN
List disk
fdisk -l
lsblk and df have different sizes
root@staging:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 197M 1.1M 196M 1% /run
/dev/vda1 ext4 69G 43G 24G 65% /
tmpfs tmpfs 982M 0 982M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 197M 0 197M 0% /run/user/62817
root@staging:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 252:0 0 70G 0 disk
└─vda1 252:1 0 70G 0 part /
You could see that df
vda1 file system is smaller than lsblk
vda. Why? Because df
only shows usable space, while lsblk
shows block devices. df
displays the size which is available for the users. Some space in the filesystem is reserved for the filesystem (e.g. Journal) and is not available for the users, thus not displayed.
To see how many blocks are reserved, run this command:
sudo tune2fs -l /dev/vda1 | grep "lock count"
Expand VM disk and LVM partition
Ensure the kernel recognizes the larger disk
echo 1 > /sys/class/scsi_disk/0:0:0:0/device/rescan
Resize the second partition with fdisk
fdisk /dev/sda
p # print current
d # delete
2
n # create
p # primary partition
2 # partition number
default first/last cylinders
t # change partition id
2
8e (hex code)
p # print the current again to verify it's expanded
w # write changes
Reboot the virtual machine
shutdown -r now
Once it's back up, resize the LVM physical volume
pvresize /dev/sda2
Now resize the LVM logical volume
lvdisplay
lvresize -l +100%FREE /dev/centos/root
Finally, lets resize the filesystem
resize2fs -p /dev/mapper/centos-root # for ext4
OR
xfs_growfs /dev/mapper/centos-root # for xfs
Verify the filesystem is larger
df -h
Expand Physical partition (no LVM)
- Found which partition is runing out of space
df -h
Look for /dev/sdX and Use%
- Rescan disk device size
echo 1>/sys/class/block/sdX/device/rescan
- Check new space is visible on device
lsblk
Look for sdX type disk. Should be same amount you set on VM disk
- Edit partition
fdisk /dev/sdX
p - print existing partitions
d - delete existing partition (don't worry we create it next with new size)
2 - select partition number to delete
n - create new partition
p - primary
2 - the same partition number you've deleted
first sector: Enter - use default
last sector: Enter - use default (we expand partition to the whole available space)
n - do not remove ext4 signature
p - print and compare to previous partition size
w - write changes
- Sync new size to OS
partprobe /dev/sdX
- See new partition size
lsblk
- Look for new partition size
df -h
Look for old filesystem size
- Resize filesystem
resize2fs /dev/sdX2
- See new filesystem size
df -h
Resize second partition when third partition is swap
No LVM. Potentially dangerous. You've added +10G to the end of the disk.
sfdisk -l /dev/sda
sfdisk -F /dev/sda
swapoff -a
echo '+9G,' | sfdisk --move-data /dev/sda -N 3 --force
echo ',+9G' | sfdisk /dev/sda -N 2 --force
resize2fs /dev/sda2
Expand LVM partition
Physical disk - Physical partition - Physical Volume (PV) - Volume Group (VG) - Logical Volume (LV) - Filesystem
- Found which partition is runing out of space
df -h
Look for /dev/sdX and Use%
- Rescan disk device size
echo 1>/sys/class/block/sdX/device/rescan
- Check new space is visible on device
lsblk
Look for sdX type disk. Should be same amount you set on VM disk
- Edit partition
fdisk /dev/sdX
p - print existing partitions
d - delete existing partition (don't worry we create it next with new size)
1 - select partition number to delete
n - create new partition
p - primary
1 - the same partition number you've deleted
first sector: Enter - use default
last sector: Enter - use default (we expand partition to the whole available space)
n - do not remove ext4 signature
p - print and compare to previous partition size
w - write changes
- Sync new size to OS
partprobe /dev/sdX
- Resize physical volume
pvresize /dev/sdX1
pvdisplay
- look for new disk space
vgdisplay
look for Free PE / Size
- Change logical volume
lvdisplay
look for logical volume name and size
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
- See new partition size
lsblk
Look for new partition size
df -h
Look for old filesystem size
- Resize filesystem
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
- See new filesystem size
df -h
Rules for mount disks
/etc/systemd/system/*.mount
/etc/udev/rules.d
RAID
For md (software RAID) please see md
Create Physical Volume LVM
pvcreate /dev/md0 /dev/md1
Create Volume Group LVM
vgcreate vg00 /dev/md0 /dev/md1
Move Physical Volume from One to Second LVM
pvmove /dev/md1 /dev/md0
проверить раздел hda1 на наличие bad-блоков
badblocks -v /dev/hda1
проверить/восстановить целостность linux-файловой системы раздела hda1
fsck /dev/hda1
поиск файла по всему компу. Используется БД /var/lib/mlocate/mlocate.db
locate <file>
обновить БД поиска файлов mlocate.db
updatedb
поиск файла по всем директориям
find / -name <filename>
переименовать файл. Можно использовать с указанием пути для одновременного перемещения и смены имени.
mv <file1> <file2>
перемещает файл в папку
mv <file> <dir>
скопировать файл и переименовать с расширением old
cp /etc/file.conf{,.old}
копирование папки и подпапок
cp -r <dir1> <dir2>
копировать все файлы директории в текущую директорию
cp <dir>/* .
удалить папку со всем содержимым
rm -rf <dir>
создать папку dir2 со всеми промежуточными
mkdir -p /tmp/<dir1>/<dir2>
создать две парки в директории tmp
mkdir /tmp/{dir1,dir2}
создать символическую ссылку на файл или директорию
ln -s <file1> <lnk1>
монтирование компакт диска
mount /dev/hdc /media/cdrom
смонтировать ISO-образ
mount -o loop file.iso /mnt/cdrom
монтировать сетевую файловую систему Windows (SMB/CIFS)
mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share
то же самое
mount -t cifs "//workstation/share" /mnt -o user="workgroup/user"
размонтирует раздел hda2
umount /dev/hda2
создание образа из файла
dd if=/dev/cdrom of=filename.iso
доступное место на дисках
df -h
размер каталога
du -h
du -Hh -d 1 /var/log
изменить разрешения файла: 1 - execute (x), 2- write (w), 4 - read (r)
chmod 1...8 <file>
изменение прав каталогов, назначение владельца файла
chown -R <user>:<group> <dir>
SATA имеет максимум 63 партиции из них из-за DOS(MBR) только 4 могут быть primary. Только одну из primary можно разделить на logical партиции, т.е. сделать из нее extended партицию.
поиск строки с совпадением в файле
grep <what> <file>
поиск сообщений в логах от демона
grep -ri <демон> /var/log
изменения прав на 644 для файлов
find /home/test -type f -exec chmod 644 {} \;
изменения прав на 755 для папок
find /home/test -type d -exec chmod 755 {} \;
Change files permissions to 644 and directories permissions to 755
find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;
alternative - capital X
chmod -R u=rwX,g=rX,o=rX testdir/
заменить UP на down
find . -name "*UP" -exec rename 's/UP/down/g' {} \;
вывести список файлов более 100 Мб
find / -size +100M -print
найти все файлы, содержащие в имени .ps
locate "*.ps"
создает архив archive.tar папки tar
tar -cvf archive.tar <dir>
просматривает содержимое архива
tar -tvf archive.tar
распаковывает архив archive.tar в папку
tar -xvf archive.tar -C <dir>
создает gzip архив archive.tar.gz папки dir
tar -czvf archive.tar.gz <dir>
создает bzip2 (лучше сжатие чем gzip) архив archive.tar.bz2 папки dir
tar -cjvf archive.tar.bz2 <dir>
добавление файла в архив
tar -Ajvf archive.tar.bz2 <file>
удалить файл из архива
tar -j --delete archive.tar.bz2 <file>
поиск слова в и вывод содержащих
grep -i what <file>
поиск строк начинающихся с
grep "^what" <file>
поиск строк заканчиющихся на
grep "what$" <file>
выводит содержимое файла без строк содержащих what
grep -v "what" <file>
вывести первую и треью колонки. Разделение по проблелу
echo a b c | awk '{print $1,$3}'
заменить текст в файле
sed -i 's/<что_заменить>/<на_что_заменить>/g' /etc/file
вывод содержимое файла(ов) без прокрутки
cat <file>
вывод содержимого файла с прокруткой (V переход в режим редактирования)
less <file>
Find GZ archive files not older than 30 days and copy content to one file
find /var/log/exim4/ -name "rejectlog.*.gz" -mtime -30 -exec zcat {} + >> /root/all_rejectlog.txt && cat /var/log/exim4/rejectlog /var/log/exim4/rejectlog.1 >> /root/all_rejectlog.txt
Extract GZ archives and keep GZ
This command keeps original GZ files intact and extract each GZ file in directory to specific directory
for f in /var/log/exim4/mainlog.*.gz; do STEM=$(basename "${f}" .gz); gunzip -c "${f}" > /home/username/exim/logs/"${STEM}"; done
Disk SMART find specific attribute in multiple disks
for i in {a..i}; do smartctl --attributes /dev/sd"$i" | grep 'Erase_Fail_Count_Total'; done