• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Bash tworzenie skryptów Linux

Object Storage Arubacloud
0 głosów
816 wizyt
pytanie zadane 14 listopada 2017 w Systemy operacyjne, programy przez pjeter Nowicjusz (120 p.)
Witam, mam do napisania skrypt służący do wyszukiwania w podanych katalogach wszystkich dowiązań twardych do podanego pliku w formacie: skrypt  plik katalog1 katalog2  ... Próbowałem kombinować z poleceniem find, ale nic mi nie wychodzi(dopiero zaczynam z linuxem). Nawet nie wiem szczerze mówiąc jak to zapisać i nie chodzi mi o to by ktoś to za mnie napisał. Potrzebuję wskazówek jak zacząć i jakich komend użyć. Z góry dzięki za podpowiedzi i pozdrawiam.
komentarz 14 listopada 2017 przez niezalogowany

Próbowałem kombinować z poleceniem find

Pokaż co próbowałeś zrobić i w jaki sposób.

Jak dobrze rozumiem, to skrypt ma się uruchamiać przez podanie mu miejsca rozpoczęcia wyszukiwania oraz pliku na który ma wskazywać hardlink? Btw tak, musisz użyć find

komentarz 14 listopada 2017 przez pjeter Nowicjusz (120 p.)
edycja 14 listopada 2017 przez pjeter
Dzięki za podpowiedź, chodzi o to, że ja w ogóle nie wiem jak się za to zabrać.

#!/bin/bash
if [find -samefile plik katalog1 katalog2]
then
    echo ls -i #skrypt wypisuje na stdout numer i-węzła podanego pliku(chyba) jeśli znalazł plik z dowiązaniem twardym, następnie przegląda kolejno podane katalogi i poszukuje innych dowiązań twardych do podanego pliku.
    echo #i tu wypisuje na stdout pełną nazwę ścieżki
fi

Po prostu potrzebuję pomocy krok po kroku... Dzięki za podpowiedzi.
komentarz 14 listopada 2017 przez niezalogowany

Na przyszłość wrzucaj kod w specjalny bloczek:

#!/bin/bash
if [find -samefile plik katalog1 katalog2]
then
    echo ls -i #skrypt wypisuje na stdout numer i-węzła podanego pliku(chyba) jeśli znalazł plik z dowiązaniem twardym, następnie przegląda kolejno podane katalogi i poszukuje innych dowiązań twardych do podanego pliku.
    echo #i tu wypisuje na stdout pełną nazwę ścieżki
fi

 

1 odpowiedź

0 głosów
odpowiedź 14 listopada 2017 przez niezalogowany
Wskazówka: przyjrzyj się parametrowi -samefile w find
komentarz 14 listopada 2017 przez niezalogowany

Wskazówek ciąg dalszy:

Używasz find, kluczem są odpowiednie parametry, a więc:

  • -samefile do sprawdzenia czy pliki są identyczne (a takie będą jeżeli to hardlink)
  • raczej nie potrzebujesz if'ów, find powinien wystarczyć ;)
komentarz 14 listopada 2017 przez niezalogowany

Załóżmy takie środowisko:

├── original_file
└── path
    └── to
        ├── another
        │   └── hard
        │       └── link
        │           └── myanotherhardlink
        └── hard
            └── link
                └── myhardlink

Gdzie "original_file" to plik stworzony pierwotnie, "myhardlink", "myanotherhardlink" to hard linki.

Spróbuj pobawić się z find i -samefile na tym środowisku. Tyle wystarczy aby zrobić to zadanie ;) 

komentarz 15 listopada 2017 przez pjeter Nowicjusz (120 p.)

Dzięki właśnie o to mi chodziło, kombinuję ze składnią, ale nie chce działać, albo nie wypisuje całej ścieżki dostępu.

#!/bin/bash
find ./$2 -samefile $1 -print 

 

komentarz 15 listopada 2017 przez niezalogowany
Nie potrzebujesz -print, tyle powinno wystarczyć
komentarz 15 listopada 2017 przez pjeter Nowicjusz (120 p.)
Jak odpalam skrypt to nic nie wyświetla tylko przechodzi do następnej linijki jakby nic się nie stało. W projekcie muszę wyświetlić wszystkie znalezione nazwy  na stdout z pełną nazwą ścieżki dostępu.

Wielkie dzięki za zainteresowanie.
komentarz 18 listopada 2017 przez pjeter Nowicjusz (120 p.)

Takie coś utworzyłem:

#!/bin/bash
if [ -e ./$1 ]; then echo "Nr i-węzła pliku $1 to `ls -i $1`"
else echo "Nie ma takiego pliku, postać wywołania skryptu: skrypt plik katalog1 katalog2"
fi
for (( i=1; i <= 3; i++ )); do
    if [ ! -e ./$i ]; then echo "Plik $i nie isnieje" 
    elif [ ! -r ./$i ]; then echo "Nie masz uprawnień do czytania pliku $i " 
    elif [ ! -w ./$i ]; then echo "Nie masz uprawnień do edycji pliku $i" 
    elif [ ! -x ./$i ]; then echo "Nie masz uprawnień do wykonywania pliku $i" 
    fi    
done
find ./$2 -samefile $1 
find ./$3 -samefile $1

Mógłbyś na to zerknąć czy jest to poprawne?

Z góry dzięki.

komentarz 18 listopada 2017 przez niezalogowany
Jak dla mnie to templatka na find'a więc raczej wciąż zostaje to poprawne ;0
komentarz 18 listopada 2017 przez pjeter Nowicjusz (120 p.)
Dzięki więc tak  to wyślę do oceny.

Podobne pytania

0 głosów
1 odpowiedź 425 wizyt
pytanie zadane 19 grudnia 2019 w Systemy operacyjne, programy przez Thominik Nowicjusz (120 p.)
0 głosów
1 odpowiedź 680 wizyt
pytanie zadane 28 listopada 2019 w Systemy operacyjne, programy przez Nortalf Użytkownik (880 p.)
0 głosów
0 odpowiedzi 751 wizyt

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...