Skip to content

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"
Then divide Reserved block count with Block count, and you get the percentage that is reserved.

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