Linux find root path

Содержание
  1. How-To get root directory of given path in bash?
  2. How to find the disk where root / is on in Bash on Linux?
  3. lsblk and PKNAME
  4. PKNAME for raw or LVM partition backed root ‘/’
  5. Wrap up to be a bash statement
  6. 25 примеров использования команды find для начинающих знакомство с Linux
  7. 1)Выведите списки всех файлов текущей директории и ее подкаталогов
  8. 2)Найдите все файлы и директории в вашей текущей рабочей директории
  9. 3)Выведите список всех файлов определенной директории
  10. 4)Найдите файл по имени в директории
  11. 5)Найдите файл во множестве директорий
  12. 6)Найдите файл по имени без учета регистра
  13. 7)Найдите все типы файлов отличные от упомянутого
  14. 8)Найдите файлы по множеству признаков
  15. 9)Найдите файлы с использованием условия OR
  16. 10)Поиск файлов на основе разрешений
  17. 11)Найдите все скрытые файлы
  18. 12)Найдите все файлы со SGID
  19. 13) Найдите все файлы со SUID
  20. 14)Найдите все исполняемые файлы
  21. 15)Найдите файлы с доступом только для чтения
  22. 16)Найдите все файлы пользователя
  23. 17)Найдите все файлы группы
  24. 18)Найдите все файлы определенного размера
  25. 19)Найдите все файлы в диапазоне размеров
  26. 20)Найдите файлы, измененные N дней назад
  27. 21)Найдите файлы, в которые заходили N дней назад
  28. 22)Найдите все пустые файлы и директории
  29. 23)Найдите самый большой и самый маленький файлы
  30. 24)Найдите все файлы с определенным доступом и сменить его на 644 (или еще на что-нибудь)
  31. 25)Найдите все файлы, подходящие по определенным критериям, и удалите их
  32. How-To get root directory of given path in bash?
  33. Solution 2
  34. Solution 3
  35. Solution 4
  36. Solution 5

How-To get root directory of given path in bash?

This returns always the first directory. In this example it would return following:

Thanks to @condorwasabi for his idea with awk! 🙂

If your path is relative and looks like this: dir1/in/dir2 then you should target the field -f1 instead of -f2

You can try this awk command:

 basedirectory=$(echo "$PATH" | awk -F "/" '') 

At this point basedirectory will be the string home Then you write:

Glad you found a solution. Anyway you were right, I just edited the script. I don’t know why I wrote , I also tested it before posting it. Now it should work.

This also works to get the nth directory along a path e.g. basedirectory=$(echo «$PATH» | awk -F «/» ‘‘)

If PATH always has an absolute form you can do tricks like

However I should also add to that that it’s better to use other variables and not to use PATH as it would alter your search directories for binary files, unless you really intend to.

Also you can opt to convert your path to absolute form through readlink -f or readlink -m :

You can also refer to my function getabspath.

To get the first directory component of VAR:

So, if VAR=»/path/to/foo» , this returns /path/ .

$ strips off the prefix X and returns the remainder. So if VAR=/path/to/foo , then /*/ matches the prefix /path/ and the expression returns the suffix to/foo .

$ strips off the suffix X . By inserting the output of $ , it strips off the suffix and returns the prefix.

If you can guarantee that your paths are well formed this is a convenient method. It won’t work well for some paths, such as //path/to/foo or path/to/foo , but you can handle such cases by breaking down the strings further.

Читайте также:  Send test mail linux

Источник

How to find the disk where root / is on in Bash on Linux?

Question: how to find the disk where the Linux’s root(/) is on in Bash? The root may be on a LVM volume or on a raw disk.

# df -hT | grep /$ /dev/sda4 ext4 48G 32G 14G 71% / 
# df -hT | grep /$ /dev/mapper/fedora-root ext4 48G 45G 1.4G 98% / 

The it is a LVM volume in LVM group ‘fedora’:

# lvs | grep fedora | grep root root fedora -wi-ao---- 48.83g 

and ‘fedora’ is on the single disk partition ‘/dev/sda3’ of disk ‘/dev/sda’:

# pvs | grep fedora /dev/sda3 fedora lvm2 a-- 64.46g 4.00m 

For both cases above, we want to find out ‘/dev/sda’ (the root filesystem is on only one physical disk).

To solve this problem, one straightforward way is to check every possible cases and handle each case following the format for each case (raw partition, or LVM partition). But in Linux, there is a more convenient tool to handle this problem – using lsblk .

lsblk and PKNAME

lsblk can show one important value here:

For a raw partition, the parent kernel device is the disk, and for an LVM partition, the parent kernel device is the physical volume (the partition). Here are examples of output of lsblk .

For a ‘/’ on a raw partition:

root@vm0:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT . sdc 8:32 0 1.8T 0 disk ├─sdc1 8:33 0 512M 0 part /boot/efi └─sdc2 8:34 0 1.8T 0 part /

For a ‘/’ on an LVM partition:

root@vm1:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 19.5G 0 part ├─vgubuntu-root 253:0 0 18.5G 0 lvm / └─vgubuntu-swap_1 253:1 0 976M 0 lvm [SWAP]

PKNAME for raw or LVM partition backed root ‘/’

From lsblk ‘s manual, we can see it supports various output format. Here, we use the key/value pair format which is easy to parse in Bash.

# lsblk -oMOUNTPOINT,PKNAME -P | grep 'MOUNTPOINT="/"' MOUNTPOINT="/" PKNAME="sdc"
# lsblk -oMOUNTPOINT,PKNAME -P | grep 'MOUNTPOINT="/"' MOUNTPOINT="/" PKNAME="sda5"

We can easily get rid of the trailing numbers (so we get the disk device name) by

This can be applied to both cases. For the raw partition case, the sed command simply does not have any additional effect.

Wrap up to be a bash statement

Now, we can wrap all up into a bash statement using some Bash grammar and techniques

dev=$(eval $(lsblk -oMOUNTPOINT,PKNAME -P -M | grep 'MOUNTPOINT="/"'); echo $PKNAME | sed 's/9*$//')

For the raw partition case, we get

root@vm0:~# dev=$(eval $(lsblk -oMOUNTPOINT,PKNAME -P -M | grep 'MOUNTPOINT="/"'); echo $PKNAME | sed 's/7*$//') root@vm0:~# echo $dev sdc

For the LVM partition case, we get

root@vm1:~# dev=$(eval $(lsblk -oMOUNTPOINT,PKNAME -P | grep 'MOUNTPOINT="/"'); echo $PKNAME | sed 's/8*$//') root@vm1:~# echo $dev sda

Источник

25 примеров использования команды find для начинающих знакомство с Linux

25 примеров использования команды find для начинающих знакомство с Linux

Команда find — это одна из самых полезных и важных команд на Linux.
Она по умолчанию установлена и доступна практически на всех версиях Linux. В Linux все хранится в виде файлов, и очевидно стоит знать, как эти файлы искать.

С помощью команды find можно искать интересующие файлы по ряду поисковых критериев. Критерии можно указывать как вместе, так и по отдельности, а затем уже совершать действия с полученном результатом. В этом руководстве мы собираемся описать команду find с помощью примеров использования.

Читайте также:  Make directory linux centos

1)Выведите списки всех файлов текущей директории и ее подкаталогов

Для того чтобы вывести списки всех файлов текущей директории и ее подкаталогов, мы можем использовать:

В качестве альтернативы, мы можем также использовать ‘find . ’ , которая выдаст вам тот же результат.

2)Найдите все файлы и директории в вашей текущей рабочей директории

Если нужно найти только директории, то можно использовать:

Чтобы найти только файлы, а не директории:

3)Выведите список всех файлов определенной директории

Для того чтобы найти файлы из определенной директории надо ввести:

This command will look for all the files in /root directory.

4)Найдите файл по имени в директории

Для поиска файла по имени в определенной директории введите:

$ find /root -name "linuxtechi.txt"

Эта команда будет искать файл linuxtechi.txt в директории /root. Так же мы найти все файлы с расширением .txt:

5)Найдите файл во множестве директорий

Для поиска файлов во множестве директорий введите:

$ find /root /etc -name "linuxtechi.txt"

With this command, we can look for linuxtechi.txt file in /root & /etc directories.

С помощью этой команды мы можем найти файл linuxtechi.txt в директориях /root и /etc .

6)Найдите файл по имени без учета регистра

Ищите файлы без учета регистра с помощью -iname:

$ find /root -iname "Linuxtechi.txt"

В результате вы получите все файлы с названием linuxtechi.txt. При этом файлов может быть несколько, так как linuxtechi.txt будет равняться LINUXTECHI.txt .

7)Найдите все типы файлов отличные от упомянутого

Давайте предположим, что нам необходимо найти все файлы отличные от определенного типа файлов. Чтобы этого добиться вводим:

8)Найдите файлы по множеству признаков

Мы можем совмещать более чем одно условие при поиске файлов. Предположим, что нам нужны файлы с расширениями .txt и .html :

9)Найдите файлы с использованием условия OR

Так же мы можем совмещать несколько поисковых критериев, что приведет к поиску файлов на основе удовлетворения одному из условий. Делается это с помощью оператора OR:

$ find -name "*.txt" -o -name "linuxtechi*"

10)Поиск файлов на основе разрешений

Чтобы найти файлы с определенным доступом используйте -perm :

$ find /root -type f -perm 0777

11)Найдите все скрытые файлы

Для поиска скрытых файлов в директории введите:

12)Найдите все файлы со SGID

Для поиска файлов с битами SGID исполните команду:

13) Найдите все файлы со SUID

Для поиска файлов с битами SUID используем:

14)Найдите все исполняемые файлы

Для поиска только исполняемых файлов введите:

15)Найдите файлы с доступом только для чтения

К тому же, с помощью команды find можно найти файлы, доступные только для чтения:

16)Найдите все файлы пользователя

Для поиска файлов определенного пользователя надо использовать следующую команду:

17)Найдите все файлы группы

Для поиска файлов определенной группы используем:

18)Найдите все файлы определенного размера

Если мы хотим искать, размер которого нам известен, тогда можно использовать -size :

19)Найдите все файлы в диапазоне размеров

Если мы ищем файл, размер которого нам не известен, но зато мы знаем примерный его размер, или нам просто сделать выборку файлов в определенном диапазоне размеров, то можно ввести:

Можно использовать команд find при поиске файлов тяжелее, чем, например, 50 mb:

20)Найдите файлы, измененные N дней назад

For example, we want to locate all the files that have been modified 8 days ago. We can accomplish that using ‘-mtime‘ option in find command

Читайте также:  Создания загрузочного образа linux

Например, мы можем обнаружить найти все файлы отредактированные 8 дней назад. Делается это с помощью команды -mtime:

21)Найдите файлы, в которые заходили N дней назад

Можно найти файлы, в которые входили 8 дней назад с помощью -atime:

22)Найдите все пустые файлы и директории

Для нахождения всех пустых файлов в системе введем:

А чтобы вывести их директории:

23)Найдите самый большой и самый маленький файлы

Для вывода списка самых больших или самых маленьких файлов используем find в связке с sort , и, если нам понадобится вывести 3 «самых-самых», то используем еще head .

Для вывода трех файлов из текущей директории введем:

$ find . -type f -exec ls -s <> \; | sort -n -r | head -3

Схожим образом мы можем вывести самые маленькие файлы текущей директории:

$ find . -type f -exec ls -s <> \; | sort -n | head -3

24)Найдите все файлы с определенным доступом и сменить его на 644 (или еще на что-нибудь)

Команда find может предложить продвинутые варианты использования. К примеру, мы может изменить все разрешения 644 определенных файлов на 777. Для этого исполняем:

$ find / -type f -perm 644 -print -exec chmod 777 <> \;

25)Найдите все файлы, подходящие по определенным критериям, и удалите их

Рано или поздно может понадобиться удалить те или иные файлы. Если так произошло, то вводим:

$ find / -type f -name 'linuxtechi.*' -exec rm -f <> \;

Вышеуказанные примеры отлично демонстрируют возможности команды find , которая способна существенно упростить задачу поиска файлов.

Источник

How-To get root directory of given path in bash?

This returns always the first directory. In this example it would return following:

Thanks to @condorwasabi for his idea with awk! 🙂

Solution 2

If PATH always has an absolute form you can do tricks like

However I should also add to that that it’s better to use other variables and not to use PATH as it would alter your search directories for binary files, unless you really intend to.

Also you can opt to convert your path to absolute form through readlink -f or readlink -m :

You can also refer to my function getabspath.

Solution 3

You can try this awk command:

 basedirectory=$(echo "$PATH" | awk -F "/" '') 

At this point basedirectory will be the string home Then you write:

Solution 4

To get the first directory component of VAR:

So, if VAR=»/path/to/foo» , this returns /path/ .

$ strips off the prefix X and returns the remainder. So if VAR=/path/to/foo , then /*/ matches the prefix /path/ and the expression returns the suffix to/foo .

$ strips off the suffix X . By inserting the output of $ , it strips off the suffix and returns the prefix.

If you can guarantee that your paths are well formed this is a convenient method. It won’t work well for some paths, such as //path/to/foo or path/to/foo , but you can handle such cases by breaking down the strings further.

Solution 5

To get the first firectory:

path=/home/user/example/foo/bar mkdir -p "/tmp/backup$path" cd /tmp/backup arr=( */ ) echo "$" 

PS: Never use PATH variable in your script as it will overrider default PATH and you script won’t be able to execute many system utilities

EDIT: Probably this should work for you:

Источник

Оцените статью
Adblock
detector