Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: v01d в Aug 11, 2009, 15:49



Титла: bash script - mount all devices
Публикувано от: v01d в Aug 11, 2009, 15:49
Здравейте, някого има ли решение което да монтира автоматично
( като се стартира дадения скрипт )  всички възможни hard disks/usb-та и т.н ?


Титла: Re: bash script - mount all devices
Публикувано от: ntrance в Aug 11, 2009, 15:56
Добавиги в  /etc/fstab


Титла: Re: bash script - mount all devices
Публикувано от: v01d в Aug 11, 2009, 16:16
Въпроса е, че този скрипт ще се стартира на различни машини и всеки път ще са различни партишъните.

Примерно на веднъш ще има: /dev/sda1, /dev/sda2, /dev/sdb1, а друг път ще бъдат съвсем различни.


Титла: Re: bash script - mount all devices
Публикувано от: ntrance в Aug 11, 2009, 16:24
Е ти хептен мързеливата я караш :)   


Титла: Re: bash script - mount all devices
Публикувано от: c2h5oh в Aug 11, 2009, 17:08
Е списъка на партишъните не можеш ли да го вземеш от fdisk -l


Титла: Re: bash script - mount all devices
Публикувано от: v01d в Aug 11, 2009, 23:10
Ми пробвах сам да си напиша скрипта но стигнах до задънена улица.
Искарвам списака от fdisk -l после чрез grep,awk и т.н. го докарвам до

#tmpfile /tmp/disks.txt
/dev/sdaX
/dev/sdbX
# end of file

и проблема ми е при цикъла, че като ги взема от списака не мога да ги монтирам защото примерно цикъла прави следното:
mount -t auto /dev/sdaX <и тук не знам как да го взема на ново къде да го монтира>


Титла: Re: bash script - mount all devices
Публикувано от: eniac111 в Aug 12, 2009, 00:26
http://ubuntuforums.org/showthread.php?t=587134

Ето го на С :D
Код
GeSHi (C):
  1. #include <stdio.h>
  2. int main(){
  3. char str[] = "/dev/sda5";
  4. printf("%c\n",str[8]);
  5. return 0;
  6. }


Титла: Re: bash script - mount all devices
Публикувано от: LinuxFanUNIX в Aug 12, 2009, 01:00
Ако правилно съм разбрал - в tmpfile има нещо подобно:
/dev/sda1
/dev/sda2
/dev/sda3
/dev/hda
/dev/hdb

Ако е така - скрипта е лесен.

Май ми намирисва на ново дистро.  :)


Титла: Re: bash script - mount all devices
Публикувано от: bop_bop_mara в Aug 12, 2009, 01:43
Код
GeSHi (Bash):
  1. mara@OVNI:~$ basename /dev/sda5
  2. sda5
  3. mara@OVNI:~$ filename='/dev/sda5'
  4. mara@OVNI:~$ echo ${filename##/*/}
  5. sda5
  6. mara@OVNI:~$ echo "/mnt/${filename##/*/}"
  7. /mnt/sda5
  8. mara@OVNI:~$
  9.  
  10. ##Конкретно обхождане на списък
  11. mara@OVNI:~$ files=" /dev/sda1 dev/sda2 /dev/sda3 "
  12. mara@OVNI:~$ for file in $files
  13. > do
  14. > echo "Device $file mounts to /mnt/${file##/*/}"
  15. > done
  16. Device /dev/sda1 mounts to /mnt/sda1
  17. Device dev/sda2 mounts to /mnt/dev/sda2
  18. Device /dev/sda3 mounts to /mnt/sda3
  19. ##Или с basename
  20. mara@OVNI:~$ for file in $files; do echo "Device $file mounts to /mnt/$(basename $file)"; done
  21. Device /dev/sda1 mounts to /mnt/sda1
  22. Device dev/sda2 mounts to /mnt/sda2
  23. Device /dev/sda3 mounts to /mnt/sda3
  24. mara@OVNI:~$
  25.  
[_]3
Ето и линк с някои такива непопулярни врътки:
http://www.linuxjournal.com/article/8919


Титла: Re: bash script - mount all devices
Публикувано от: v01d в Aug 12, 2009, 01:52
Ако правилно съм разбрал - в tmpfile има нещо подобно:
/dev/sda1
/dev/sda2
/dev/sda3
/dev/hda
/dev/hdb

Ако е така - скрипта е лесен.

Май ми намирисва на ново дистро.  :)
Да същото има в tmpfile.
Днес ще помъча още малко... явно нещо се насмитам и не мога да се справя
с този скрипт.


Титла: Re: bash script - mount all devices
Публикувано от: v01d в Aug 12, 2009, 01:56
@bop_bop_mara: Много благодаря. Това ми свърши чудесна работа.


Титла: Re: bash script - mount all devices
Публикувано от: v01d в Aug 12, 2009, 02:21
Ако му трябва на някой ~ ето го в завършен и работещ вид:
Цитат
#!/bin/bash
# AM::Auto Mount
# version 0.1
#                         
#
tmpfile="/tmp/xam.tmpfile"

       fdisk -l | grep /dev/ | awk '{print$1}' | grep dev > $tmpfile


for file in $(cat $tmpfile)
do
        mkdir "/${file##/*/}"
        mount -t auto "$file" "/${file##/*/}"
        echo "Device $file is mounted to /${file##/*/}"

done


# remove temporary files

rm $tmpfile



Титла: Re: bash script - mount all devices
Публикувано от: bop_bop_mara в Aug 12, 2009, 12:37
Пал заповядай! Само бях забравила да кажа, че това с pattern-matching-а май е bash-изъм, така че с друг шел трябва да се ползва примерно basename или тежката артилерия sed/awk.
Още нещо, не устоях на тръпката и си поиграх да посъкратя скрипта:
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. for device in `fdisk -l | grep -o '/dev/[a-z]\+[0-9]\+'`
  4. do
  5.    mountpoint="/${device##/*/}"
  6.    mkdir "$mountpoint"
  7.    mount -t "$device" "$mountpoint"
  8.    echo "Device $device is mounted to $mountpoint"
  9. done

 [_]3