Terminal, Bash - prośba o wskazówki przy kilku zadaniach.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
lito77
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 27 sty 2011, 09:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Terminal, Bash - prośba o wskazówki przy kilku zadaniach.

Post autor: lito77 »

Witam!

To mój pierwszy post na forum więc witam wszystkich.

Próbuję rozwiązać parę zadanek w terminalu i z niektórymi szczeże mówiąc mam problemy.
Jak byście do nich podeszli?

1.Wyświetl zawartość pliku /etc/passwd zmieniając loginy kont na pisane dużymi literami;

ja próbowałem tak:

cat /etc/passwd | tr '^[a-zA-Z0-9]*:' '^[A-ZA-Z0-9]*:' ale wszystko mi zmienia,

2. Odszukaj zaczynając od swojego katalogu domowego, wszystkie pliki zawierające napis #!/bin/bash;


find . -type f | grep '#!bin/bash/' jak by niepatrzył nie działa,


3.Odszukaj zaczynając od swojego katalogu domowego, wszystkie pliki z rozszerzeniem .html zawierające znaczniki <H1> lub <H2> lub <H3> lub <H4> lub <H5> lub <H6>;

moje poczynania zatrzymały się na:

find . -type f main*.html | grep -q'<[hH][1-6]>' dalej bez pomysłu,

4.Wykonać odpowiednie operacje tak aby w każdą pierwszą środę miesiąca wykonywana była kopia zapasowa Twojego katalogu domowego.

5.Odszukaj zaczynając od swojego katalogu domowego, wszystkie pliki do których nie masz prawa w i dodaj sobie do prawo.

Co do tych dwóch ostatnich to nawet nie będe wypisywał tego co próbowałem :pt36:

Z góry dziękuje za pomoc i pozdrawiam.
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Terminal, Bash - problemy.

Post autor: Hauleth »

4. crontab
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: Terminal, Bash - problemy.

Post autor: Dwimenor »

Widzę, że zbliża się sesja to i sporo prac domowych. Powinieneś sam to rozwiązać - wtedy czegoś się nauczysz.

Jednak coś tam zrobiłeś i nie przychodzisz z pustymi rękami. Więc będzie kilka podpowiedzi.

Kod: Zaznacz cały

1.Wyświetl zawartość pliku /etc/passwd zmieniając loginy kont na pisane dużymi literami;

ja próbowałem tak:

cat /etc/passwd | tr '^[a-zA-Z0-9]*:' '^[A-ZA-Z0-9]*:' ale wszystko mi zmienia,
/etc/passwd składa się z pól oddzielonych od siebie dwukropkiem (:). Ogranicz się do tego co jest w pierwszym polu.

Kod: Zaznacz cały

2. Odszukaj zaczynając od swojego katalogu domowego, wszystkie pliki zawierające napis #!/bin/bash;


find . -type f | grep '#!bin/bash/' jak by niepatrzył nie działa,
Niepotrzeba ci do tego finda. Użyj:
grep -r "szukana fraza" *
Flaga -r oznacza szukanie rekursywne (wraz z podkatalogami)
* oznacza wszystko
Dwie uwagi do tego zadania:
1. Powłoka traktuje znak # jako rozpoczęcie komentarza. krótko mówiąc: wszystko za tym znakiem aż do końca lini jest ignorowane. Dlatego nie działa.
Musisz poprzedzić # znakiem \.
2. Zadanie wyraźnie mówi, że masz zacząć od swojego katalogu domowego. Więc warto by ograniczyć wyniki wyszukiwania. Nie możesz założyć, że powłoka będzie otwarta aktualnie w $HOME

Kod: Zaznacz cały

3.Odszukaj zaczynając od swojego katalogu domowego, wszystkie pliki z rozszerzeniem .html zawierające znaczniki <H1> lub <H2> lub <H3> lub <H4> lub <H5> lub <H6>;

moje poczynania zatrzymały się na:

find . -type f main*.html | grep -q'<[hH][1-6]>' dalej bez pomysłu,
Po pierwsze: dlaczego używasz flagi -q dla grepa?
grep --help pisze: -q, --quiet, --silent wyłączenie wypisywanie wyniku
Po drugie, dlaczego szukasz tylko w plikach zaczynających się od "main", skoro polecenie mówi o wszystkich plikach.html?

Kod: Zaznacz cały

4.Wykonać odpowiednie operacje tak aby w każdą pierwszą środę miesiąca wykonywana była kopia zapasowa Twojego katalogu domowego.
Backup rsyncem:

Kod: Zaznacz cały

rsync -avh $HOME /miejsce_docelowe
Każda pierwsza środa miesiąca: napisz sprawdzanie daty używając date i wrzuć to do crona.

Kod: Zaznacz cały

5.Odszukaj zaczynając od swojego katalogu domowego, wszystkie pliki do których nie masz prawa w i dodaj sobie do prawo.
Skoro tak chętnie używasz find'a to używaj go dalej. Akurat tu będzie dobry. Np flaga -readable. Jak to "odwrócić" pozostawiam tobie.

Kod: Zaznacz cały

man find
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Terminal, Bash - problemy.

Post autor: borzole »

ad2.

Kod: Zaznacz cały

grep -l '#!/bin/bash' -r ~/*
ad3.

Kod: Zaznacz cały

find ~/ -type f -name \*.html -exec grep -li '<h[1-6]>' '{}' \;
ad5.
prawie jak 3, poczytaj man help
lito77
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 27 sty 2011, 09:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Terminal, Bash

Post autor: lito77 »

Wielkie dzięki.

Tak dla ścisłości to inne15 zadań mam zrobione, więc się nie obijam ;-)

Kombinuje dalej.


Co tworzenia kopii:

at 00:00am Wed 1-7 cp $HOME /miejsce docelowe
lub
at 00:00am Wed 1-7 cp /home /miejsce docelowe

ale jak to zrobić żeby to działało w tle i sprawdzało datę?

aha jakie znaki mogą w tr ograniczyć tekst w tym przypadku od "początku" do ":" ?

EDIT:
A więc może tak:

00 0 1-7 * 3 root cp $HOME /home/wojtek/katalogdocelowy

ale jak to podmontowac do crona?

echo "00 0 1-7 * 3 root cp $HOME /home/wojtek/katalogdocelowy" > kopiuj.sh

crontab kopiuj.sh


Czy dobrze myslę?
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: Terminal, Bash

Post autor: Dwimenor »

Kod: Zaznacz cały

A więc może tak:

00 0 1-7 * 3 root cp $HOME /home/wojtek/katalogdocelowy
A więc kopiujesz swój katalog domowy do...katalogu domowego. Nie sądzisz, że wpadniesz w nieskończoną pętlę?
katalog do którego kopiujesz powinien być w osobnym systemie plików.
Po drugie: kopiujesz jako root. Po co? Nadmiar uprawnień nie jest dobrą sprawą. W tym wypadku utworzone pliki backupu będą własnością roota, a nie wojtka
Po trzecie dodaj flagę -r do polecenia, aby skopiowało katalogi wraz z zawartością.

Kod: Zaznacz cały

ale jak to podmontowac do crona?

Kod: Zaznacz cały

crontab -e
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
lito77
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 27 sty 2011, 09:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Terminal, Bash

Post autor: lito77 »

Co do 1. to:

cat /etc/passwd | tr $USER ' i właśnie co dalej?'

Proszę raz jeszcze opomoc i z góry dziękuje ;-)
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: Terminal, Bash

Post autor: Dwimenor »

Zupełnie źle do tego podchodzisz (chodzi o pierwsze)
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
lito77
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 27 sty 2011, 09:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Terminal, Bash

Post autor: lito77 »

Dzięki za kolejne info.

Szczerze mówiąc to padam już na ryj. Do jutra muszę to zrobić, wolne wziąłem bo sesja. Teraz w głowę się pukam czemu 10 lat temu na studia się nie wybrałem. No ale cóż... Jeszcze algebre, systemy operacyjne no i c++ powtórzyć. Więc jak ktoś mnie rozumie i po prostu napisze czarno na białym jak to zrobić to będe wdzięczny.Chodzi mi o 1,4 i 5. Co do
4. to:
aha ja jestem teraz na windzie żony bo mi coś strony w ubuntu nie działają...

echo "00 0 1-7 * 3 cp -r $HOME /katalogdocelowy" > kopiuj.sh
crontab -e i wpisuje tutaj kopiuj.sh czy
crontab -e i coś mi się otworzy? (nie jestem teraz na ubuntu niestety)

Pomóżcie proszę też z 1 i 5.:cry:

EDIT:
1.
cat /etc/passwd | awk -F ":" '{print toupper ($1)":"$2":",$3":",$4":",$5":",$6":",$7":"}'

5.
find /home -type f -exec chmod u+w '{}' \;

zostało 4. help!!!
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: Terminal, Bash

Post autor: Dwimenor »

Kod: Zaznacz cały

crontab -e
Otworzy ci edycję twojej tabeli crontaba
Tam wklejasz swoje polecenie
00 0 1-7 * 3 cp -r $HOME /katalogdocelowy
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości