Ścieżka Kariery Computer Vision – BLOG – Miesiąc 1. – Podstawy Basha

Podstaw ciąg dalszy. Mam już trochę tego dość i chciałabym chociaż zahaczyć o coś, co ma związek z uczeniem maszynowym, ale staram się być cierpliwa. Bez odpowiednich podstaw szybko utknęłabym, pisząc prawdziwy kawałek kodu. Dlatego zaciskam zęby i idę ćwiczyć Podstawy Basha.

Podstawy Basha – plan pracy

  1. Czytamy (wertujemy?) podręcznik, dostępny za darmo na stronie autora:
  2. Robimy notatki (drukujemy cheat sheet z tutoriala o podstawach Basha)
  3. Próbujemy napisać polecenie do wyszukiwania słowa “numpy” (duże i małe litery) we wszystkich plikach z rozszerzeniem .py w naszym repo. 

Ad. 1 – podręcznika The Linux Command Line

Przyznam bez bicia, że nie przeczytałam całości… Przewertowałam tylko podręcznik (szukałam głównie komend i omijałam opisy). Poprosiłam też chataGPT o streszczenie i oto, do czego doszliśmy wspólnymi siłami (pominęłam te komendy, które nie działały na moim macu oraz te, które moim zdaniem są zupełnie nieprzydatne):

Co warto wiedzieć o Bashu:

  • Powłoka (np. bash) to interpreter poleceń.
  • System plików Linuksa jest drzewiasty, z korzeniem /.
  • Rozróżniamy ścieżki bezwzględne (/etc) i względne (docs/).
  • ~ oznacza katalog domowy.

Skróty klawiaturowe w Bashu:

  • Ctrl+D – zakończenie sesji
  • strzałki góra/dół – historia poleceń
  • strzałki lewo/prawo – poruszanie kursorem
  • Tab – uzupełnianie nazw plików
  • Uwaga na pliki z spacje w nazwach (trzeba dodać znak ucieczki \.
  • Polecenia mają składnię: nazwa [opcje] [argumenty]
  • Dostępna pomoc (man, –help), aliasowanie, zmienne środowiskowe.

Przegląd najważniejszych poleceń:

KomendaFunkcjaPrzykłady
aliasdefiniowanie skrótu do poleceniaalias ll=”ls -l”  #dodaje alias
ll                #używa alias
unalias ll        #kasuje alias
cdzmiana katalogucd /etc         # przejdź do katalogu /etc
cd ~            # do katalogu domowego
cd              # do katalogu domowego
cd ..           # jeden poziom wyżej
cpkopiowanie pliku lub katalogucp plik1 plik2           # kopiowanie pliku
cp -r kat1 kat2          # rekurencyjnie
datepokazuje datę
echowypisuje tekst lub zmiennąecho $HOME              # HOME i PATH to zmienne środowiskowe
echo $PATH
exitzakończenie sesji
fileokreślenie typu plikufile /bin/ls    # typ pliku
lessprzeglądaj plik strona po stronieless /etc/passwd  # przeglądanie pliku
q               # wyjście z less
lslista zawartości kataloguls              # lista plików
ls -l           # format długil
s -a           # pokaż ukryte
ls -la          # l + a
mandokumentacja poleceniaman ls                   # dokumentacja
mkdirtworzy katalogmkdir nowy_kat
mkdir -p a/b/c           # struktura zagnieżdżona
mvprzenosi lub zmienia nazwęmv stara nowa   # zmiana nazwy / przeniesienie
mv „plik z nazwą.txt” nowy.txtmv plik\ z\ nazwą.txt nowy.txt
pwdpokazuje bieżący katalog
rmusuwa plik lub katalogrm plik                  # usuń plik
rm -r katalog
rm -rf katalog          # wymuszenie usunięcia
rm -i plik               # z potwierdzeniem
typepokazuje typ poleceniatype ls                 # czy wbudowane?
type cd
type echo
unaliasusuwa alias
uptimeczas działania systemu
whichlokalizacja programuwhich cp                # ścieżka do programu
which git

Ad. 2 – notatki i ściągi

Przeczytałam artykuł Bash od zera na porozmawiAImy.pl i wydrukowałam sobie ściągawkę. Chociaż jest bardzo podstawowa (przydałaby się część druga z bardziej ambitnymi komendami), na początek wystarczy.

Ad. 3 – zadanie

Czas na zadanie. Mamy napisać komendę wyszukującą słowo “numpy” bez względu na wielkość liter we wszystkich plikach z rozszerzeniem .py (czyli wyszukiwanie po typie i potem wyszukanie find, a może grep po wynikach?).

  1. wyszukać wszystkie pliki .py w repo
  2. wyszukać słowo kluczowe w wynikach

Zacznę od napisania polecenia do wyszukiwania słowa “numpy” (duże i małe litery) we wszystkich plikach z rozszerzeniem .py w naszym repo.

SPOILER! Kliknij, żeby zobaczyć rozwiązanie:
find ./Developer/sciezka-kariery-computer-vision -type f -name "*.py"

Dlaczego tak?
find wyszukuje wszystkie pliki lub katalogi. Dodałam –type f czyli file oraz -name „*.py”, żeby zawrzeć tylko pliki .py.

Czas na drugą część zadania — znalezienie wszystkich słów „numpy” wewnątrz tych plików. Trochę bez sensu drukować samo słowo — wydrukowałabym tylko na ekranie kilka razy słowy „numpy”. Dlatego wydrukuję całą linijkę, w której występuje słowo „numpy”.

SPOILER! Kliknij, żeby zobaczyć rozwiązanie:
find ./Developer/sciezka-kariery-computer-vision -type f -name "*.py" | xargs grep -i -h "numpy"

Dlaczego tak?
xargs pobiera dane będące wynikiem poprzedniej części pipeline’a, a grep wyszukuje linijki ze słowem „numpy”. Parametr -i oznacza ignorowanie wielkości liter.

Podsumowanie

To zadanie było trudniejsze niż przypuszczałam. Grep i xargs to wg mnie bardziej zaawansowane komendy, chociaż w przypadku pracy w Bashu z pewnością się przydają. Najważniejsze, że teraz widząc takie komendy w sieci (np. w instrukcjach instalacji itp.), będę wiedziała, o co w nich chodzi i nie dam się wpuścić w maliny.



Co dalej?

Zapisz się do naszego newslettera, żeby nigdy nie przegapić żadnego wartościowego artykułu.

Zajrzyj do sekcji Kariera w AI, gdzie znajdziesz konkretne materiały o zmianach na rynku pracy – w Polsce i na świecie – oraz ścieżkach kariery związanych ze sztuczną inteligencją (nie tylko jako programista!).

→ A jeśli chcesz pisać modele i pracować jako Architekt AI, ale nie wiesz, od czego zacząć (lub utknąłeś gdzieś na ścieżce), odwiedź dział Nauka AI – czeka tam wiedza, ciekawostki i realne wsparcie.


! Uwaga

Niniejszy ebook ma charakter informacyjny i edukacyjny. Nie stanowi porady prawnej ani oferty pracy w rozumieniu przepisów krajowych lub unijnych.
Przy tworzeniu niniejszego artykułu korzystano ze wsparcia narzędzi opartych na sztucznej inteligencji – m.in. w zakresie porządkowania treści, analizy źródeł, przyspieszenia redakcji i wyszukiwania źródeł Jednak wszelkie decyzje dotycząca treści, interpretacji i ostatecznej formy zostały podjęte przez człowieka.

Podziel się swoją opinią

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *