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

Bash tworzenie skryptów Linux

VPS Starter Arubacloud
0 głosów
808 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ź 422 wizyt
pytanie zadane 19 grudnia 2019 w Systemy operacyjne, programy przez Thominik Nowicjusz (120 p.)
0 głosów
1 odpowiedź 644 wizyt
pytanie zadane 28 listopada 2019 w Systemy operacyjne, programy przez Nortalf Użytkownik (880 p.)
0 głosów
0 odpowiedzi 738 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...