środa, 22 stycznia 2020

Zmienne w bash'u w Linuxie

Najprostsze użycie zmiennej:

#!/bin/bash          
STR="Hello World!"
echo $STR
Na konsoli na wypisze string "Hello World!".

Tu ciut więcej:

#!/bin/bash          
FILENAME=/var/my-backup-$(date +%Y-%m-%d).tgz
tar -czf $FILENAME /home/me/
Zmienna $FILENAME to string dynamiczny, w skład którego wchodzi data w formacie rok-miesiąc-dzień, np. 20019-12-31. Program tar zarchiwizuje nam w pliku /var/my-backup-2019-12-21.tgz zawartość katalogu /home/me

I jeszcze króciutko o funkcjach i zmiennych lokalnych (local):

#!/bin/bash
HELLO=Hello 
function hello {
    local HELLO=World
    echo $HELLO
}
echo $HELLO
hello
echo $HELLO
Tu zmienna $HELLO przyjmuje najpierw wartość "hello", a po wykonaniu funkcji hello zmienna $HELLO zmienia wartość na "World".

zip i Linux

Kompresowanie plików.

Składnia:

zip [options] zipfile list_of_files_with_spaces

Skompresuj plik filename.txt do archiwum o nazwie myfile.zip:

$ zip myfile filename.txt

Wyciągnij z archiwum:

$ unzip myfile.zip
Uprzednio zarchiwizowany plik filename.txt zostanie wydobyty z archiwum.

Opcja -u czyli aktualizacja pliku w archiwum

$ zip –u filename.zip file.txt
W tym przypadku zostanie zaktualizowany plik file.txt w archiwum filename.zip

Opcja -m czyli usunięcie pliku źródłowego po udanej kompresji archiwum:

$ zip –m filename.zip file.txt
Tu zostanie usunięty plik file.txt

Opcja -r (recursively) czyli archiwizacja całego katalogu:

$ zip –r filename.zip directory_name
Tu zostanie skompresowany folder o nazwie directory_name

cron w Linuxie

Listowanie istniejących zadań crontaba:
$ crontab -l
Edycja zadań crontaba:
$ crontab -e 
Znaczenie poszczególnych gwiazdek w pliku crontaba: Czyli:
  • pierwsza gwiazdka - minuta wykonywania zadania
  • druga gwiazdka - godzina wykonywania zadania
  • trzecia gwiazdka - dzień wykonywania zadania
  • czwarta gwiazdka - jest odpowiednikiem miesiąca od 1 do 12 lub jan - dec (z angielska)
  • no i piąta gwiazdka - jest dniem tygodnia, gdzie 0 i 7 to niedziela! Albo można zapisać z angielska (he he) od sun do sat
Po gwiazdkach następuje komenda systemu Linux lub skrypt. Aby uniknąć niespodzianek należałoby stosować bezwzględne ścieżki dostępu.

Tworzenie zakresów lub częstotliwości:

  • */5 * * * * - wykonaj polecenie co pięć minut każdego dnia
  • 0 13-15 * * * – wykonaj polecenie o 13:00, 14:00 i 15:00 każdego dnia
  • 15 23 * * mon-fri – oznacza zadanie wykonywane codziennie od poniedziałku do piątku o godzinie 23:15
  • 0 4 * * mon-fri/2 – uruchomi polecenie w każdy poniedziałek, środę i piątek o godzinie 4:00

No i w całości:

00 */12 * * * /home/wacek/scripts/rename_files.sh 2>&1
Czyli: co dwanaście godzin (z moich obserwacji o 12:00 i 24:00) wykonaj skrypt z katalogu użytkownika "wacek" i jego katalogu "scripts" plik wykonywalny o nazwie "rename_files.sh"

czwartek, 16 stycznia 2020

Kopiowanie plików poprzez SSH czyli SCP

Oczywiście nie pamiętam składni, a wszystko chcę mieć w jednym miejscu. Po kilku więc szukaniach w necie postanowiłem napisać w swoim miejscu.

Kopiowanie pliku plik.txt z lokalnego hosta na zdalny do katalogu /home/john_doe/other_files:

scp plik.txt john_doe@remote_host.com:other_files

Kopiowanie plików plik1.txt i plik2.txt z lokalnego hosta na zdalny do katalogu /home/john_doe/other_files:

scp plik1.txt plik2.txt john_doe@remote_host.com:other_files

Kopiowanie pliku plik.txt z lokalnego hosta na zdalny do katalogu /home/john_doe/other_files poprzez ssh skonfigurowane na porcie 20021:

scp -P 20021 plik.txt john_doe@remote_host.com:other_files

Kopiowanie pliku /archiw/plik.txt ze zdalnego hosta na lokalny do katalogu /home/other_files:

scp user@remote_host.com:/archiw/plik.txt /home/other_files

Kopiowanie kilku plików ze zdalnego hosta na lokalny do katalogu obecnego:

scp user@remote_host.com:/archiw/{arch1.zip, arch2.zip, arch3.zip} .

środa, 15 stycznia 2020

Utworzenie z konsoli nowego użytkownika Devise w Rails

Niezmiennie zapominam :-)
# Devise
user = User.new(email: 'test@example.com', 
                password: 'password', 
                password_confirmation: 'password')
user.save

Udostępnienie "gołego" pliku przez Google Drive

Dobry skądinąd Google Drive Ma bardzo denerwującą funkcję. Otóż jeśli komuś udostępniasz plik, zwykły plik tekstowy, to osoba otrzymująca link otwiera wcale nie ów plik tekstowy, tylko cały interfejs googlowy. Dopiero w tym interfejsie można sobie plik pobrać. Wkurzające. Szczególnie jeśli chcesz wstawić linki do pobrania na swojej stronie.

Jest jednak na to sposób.

Krótka analiza otrzymanego linka google zaraz po jego udostępnieniu

https://drive.google.com/file/d/1A0PjiDcAt0JUTgScY8hCy56FL6vm-gKJ/view?usp=sharing
W tym linku interesuje nas tylko sam id pliku, a jest nim, w tym przypadku 1A0PjiDcAt0JUTgScY8hCy56FL6vm-gKJ

Wycinamy sobie ten id.

Tutaj jest link do "obierania" interfejsu:

http://drive.google.com/uc?export=view&id=

Wystarczy na końcu dokleić wyekstrahowanyid pliku, co w całości da:

https://drive.google.com/open?id=1A0PjiDcAt0JUTgScY8hCy56FL6vm-gKJ

Ta dam! Mamy "goły" plik.

Całość przeczytałem na https://www.lmeservices.com/share-google-drive-files-via-url/

Wyszukiwanie zawartości w plikach Linux

Zapominam składnię, więc tu sobie składam przykłady.

grep -iRl "your-text-to-find" ./

I przełączniki:

  • -i - ignorowanie wielkości liter
  • -R - szukanie w podkatalogach (recursively search)
  • -l - pokazuj nazwy plików zamiast znalezionych fragmentów tekstów

Parametry:

  • ./ - gdzie ma szukać (w tym przypadku w obecnym katalogu)

Inne przydatne przełączniki:

  • -n - pokazuj numer linii. Wyłącz wtedy opcję -l (tylko nazwy plików) bo nic nie zobaczysz :-)
  • -w - szukaj tylko jako pełny wyraz (whole word only)

I inne przykładowe zapytanie

Wyszukanie ciągu "debugId" we wszystkich plikach z rozszeniem `js` w aktualnym katalogu, w ukrytym podkatalogu `.next`


grep -R 'debugId' ./.next/**/*.js

I wstawka od AI:
**: Jest to wzorzec używany przez bash lub inną powłokę obsługującą “rozszerzenie globbing” (np. w przypadku włączenia opcji globstar w bash lub domyślnie w zsh). Symbolizuje dowolną ilość poziomów katalogów, w tym katalog nadrzędny. W praktyce oznacza: “przeszukaj wszystkie katalogi i ich podkatalogi”.