2023-01-14
Cron pozwala na automatyzację zadań na systemie Linux. Czasami chcemy aby te automaty działały na wybranym koncie, bo to konto ma już zdefiniowane odpowiednie dostępy, alebo też dlatego, że automatycznie uruchamiany skrypt będzie tworzył pliki, katalogi, do ktorych tylko ot konto powinno mieć dostęp.
W takim przypadku może się przydać zaplanowanie zadań do wykonania dla innego użytkownika.
Tak oto uruchomisz polecenie pozwalające edytować harmonogram zadań dla użytkownika:
crobtab -e -u redis
Jak tylko uruchomi się edytor wprowadź definicję polecenia, które ma się regularnie uruchamiać. Np aby co minutę zapisać aktualną datę w pliku użyj takiej linijki:
*/1 * * * * date >> /tmp/my_date.txt
Po zapisaniu definicji, możesz skontrolować, czy wszystko jest ok:
crontab -l -u redis
Co ciekawe, zadania w crontab można definiować nawet jeśli wybrany użytkownik używa shella nologin!
Dodajmy jeszcze, że ewentualne sprawdzenie działania crona można wykonać uruchamiając
grep CRON /var/log/syslog
2023-01-07
Polecenie su może służyć do zmiany tożsamości w sesji Linux. Jednak w tym przypadku pojawił sie błąd:
sudo su - redis
This account is currently not available.
O co chodzi? Chodzi o to, że użytkownik redis nie ma przypisanego żadnego shella, a właściwie to ma… nologin:
grep redis: /etc/passwd
redis:x:113:118::/var/lib/redis:/usr/sbin/nologin
Jeśli koniecznie chcesz wykonać su na to konto, to można by ten shell zmienić na /bin/bash, ale… jeśli ktoś pomyślał o takim skonfigurowaniu konta, to pewnie miał ku temu powody.
sudo usermod -s /bin/bash redis
No to co można zrobić dalej? Może wcale nie trzeba przełączać się na to konto, może po prostu wystarczy uruchamiać pojedyncze polecenia? Jeśli tak, to zobacz:
sudo -u redis -s /bin/bash -c "whoami"
redis
sudo może na koncie wskazywanym opcją -u z wykorzystaniem shella wskazywanym przez opcję -s wykonać polecenie! To super. Jeśli to polecenie miałobybyć bradziej złożone, np. miałoby więcej opcji, przekierowywałoby output do pliku itp. to nie zapomnij o umieszczeniu komendy w cudzysłowach lub apostrofach.
2022-12-27
W katalogu /var/log/journal odkładają się logi generowane przez journal. Logi to jedna z ważniejszych rzeczy w pracy administratora, więc to dobrze, że się tam odkładają. Jeśli jednak jest ich zbyt dużo, to też niedobrze.
Po pierwsze można sprawdzić, ile miejsca te logi zajmują:
journalctl --disk-usage
Po drugie, można usunać stare logi, zostawiając tylko wskazaną ilość miejsca:
journalctl --vacuum-size=200M
No i po trzecie, można skonfigurować journal, do przechowywania tylko zadanej ilości logów. Plik konfiguracyjny to /etc/systemd/journald.conf. Linijka definiująca ile miejsca można przeznaczyć na logi to SystemMaxUse:
SystemMaxUse=200M
Po zmianach w pliku journald powinien zostać zrestartowany:
sudo systemctl restart systemd-journald
Więcej informacji o journal.conf:
man journal.conf
2022-12-27
Co to ja właściwie zainstalowałem? No cóż – takie pytanie można zadawać sobie czasami i całkiem na trzeźwo. Żeby sprawdzić, co ostatnio było instalowane na Ubuntu można posłużyć się poleceniem:
grep install /var/log/dpkg.log
Jeśli plik w między czasie już się zrollował, to można dodać jeszcze jego wcześniejszą wersję:
grep install /var/log/dpkg.log /var/log/dpkg.log.1
Mając taką komendę można następnie budować sprytniejsze raporty, o których można poczytać tutaj:
https://unix.stackexchange.com/questions/12578/list-packages-on-an-apt-based-system-by-installation-date
W moim przypadku w/w komenda była wystarczająca
2022-12-27
Pod Hyper-V pracuje maszyna wirtualna z Linux. Część z plików została wykasowana z Linuxa, ale rozmiar dysku wirtualnego pozostał duży (ok 45 GB). Dostępny w konsoli Hyper-V edytor dysku, mimo wydania komendy zmniejszenia dysku, nie zmniejszył rozmiaru, albo zrobił to w minimalnym zakresie. Co robić?
1. Kilka operacji do wykonania na systemie gościa – Linuxa. Oczywiście na początku kasujemy wszelkie niepotrzebne pliki (ale to nie główny temat tego wpisu). Następnie na dysku na którym występuje problem (u mnie to dysk podmontowany w katalogu root) należy wykonać takie oto polecenia:
su
cd /
cat /dev/zero > zero.dat ; sync ; sleep 1 ; sync ; rm -f zero.dat
O co chodzi? Hyper-V zoptymalizuje tylko „wyzerowane” sektory. Ta komenda całe puste miejsce dysku zapełnia zerami. Dzięki temu, za chwilę komendy Hyper-V zobaczą to puste miejsce. Polecenie zapełnia dysk na 100% używając też miejsca wykorzystywanego przez juz usunięte pliki i o to właśnie chodzi. Jeśli na systemie linux działa jakaś ważna aplikacja, to zapełnienie dysku może być dla niej poważnym problemem – przemyśl ten krok 😉
2. Wyłącz linuxa.
3. Na systemie hosta, w powershellu uruchomionym jako administrator:
Optimize-VHD "C:\HV-Machines\exported u20\U20\Virtual Hard Disks\U20.vhdx" -Mode Full
To polecenie dokonuje pełnej optymaliacji dysku usuwając wyzerowane sektory. W moim przypadku rozmiar dysku spadł z 45 GB do 33, a wcześniej uruchamiany kreator nie zwalniał praktycznie nic.
Źródła:
How to compact VHDX files in the most efficient way – C:Amie (not) Com! (c-amie.co.uk)
virtual machine – Linux VHDX size on Hyper-V – Stack Overflow
2022-12-03
Mówią, że Windows to system prosty, zbyt prosty, że prawdziwi profesjonaliści wybierają Linuxa, bo na Windows można umrzeć z nudów. Tak? To jak spowodować, żeby pliki mp4 automatycznie uruchamiały się np. z odtwarzaczem VLC?
- Programy domyślne – nie działa
- Instalacja kodeków – nie działa
- Instalacja / Deinstalacja Films & TV – nie pomaga
- Grzebanie po rejestrze – odpada.
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp4\UserChoice
Skojarzenie pliku z programem jest dodatkowo zabezpieczone przez sumę kontrolną i nie wiem jak ją wyliczyć…. ale ktoś wiedział…
Pobierz program
https://kolbi.cz/SetUserFTA.zip
A następnie uruchom polecenie:
SetUserFTA.exe" .mp4 "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
Sprawdź. U mnie działa. Koniec.
How to make VLC or Windows Media Player to open mp4 files without asking additional questions?
2022-11-15
Azure CLI uruchamiane z linii komend jest zdecydowanie prostsze niż wykonywanie tej samej czynności z poziomu PowerShell. No dobrze, może nie zawsze, ale zdarza się. Na przykład do utworzenia alertu, w przypadku PowerShella trzeba utworzyć kilka różnych obiektów programistycznych, które w końcu łączy się w całość. Nie jest to problem dla programisty, ale administrator może mieć odmienne zdanie.
Niestety z CLI jest taki problem, że zbudowanie poleceń, które nawzajem wykorzystywałyby swoje wyniki wymaga znajomości języka skryptowego BASH. BASH jest starszy, żeby nie powiedzieć „toportniejszy” od nowoczesnego PowerShella.
Ostatnio spotkałem jednak eleganckie rozwiązanie na usunięcie grupy zasobów, której nazwa rozpoczyna się od zadanego ciągu znaków. No po prostu bardzo mi się to spodobało:
az group list --query "[?starts_with(name,'lab-dev-de')].name" --output tsv
To polecenie poszuka takich grup. Warto je uruchomić przed usuwaniem, bo właśnie te grupy zasobów zostaną usunięte w kolejnym kroku. Korzystamy z opcji group list, czyli wylistuj grupy zasobów, których nazwa zaczyna się od czegoś tam.
No i polecenie usuwające:
az group list --query "[?starts_with(name,'lab-dev-de')].[name]" --output tsv | xargs -L1 bash -c 'az group delete --name $0 --no-wait --yes'
Zaczynamy od polecenia szukającego określonej grupy zasobów i potokiem przekazujemy do xargs, którego zadaniem jest uruchomić komendę z parametrami. polecenie to az group delete, a parametr to $0 – czyli nazwa grupy zasobów. Reszta parametrów jest przekazywana statycznie. O nic nie spyta tylko weźmie i usunie. Wygodne (i niebezpieczne)