#bash

3
21
Catharsis

python3 -m http.server 

Używam codziennie, ale się jarałem jak to odkryłem. Boże jakie to jest przydatne to ja nie mogę.

koszotorobur

@Catharsis - bez tego i bez netcata (nc -z -w1 -v ) do skanowania czy port otwarty - to jak bez ręki!

Zaloguj się aby komentować

ShellCheck

Narzędzie do analizy statycznej kodu, które ostrzeżega użytkownika przede błędami oraz sugeruje poprawki dotyczące składni skryptów powłoki bash/sh.

ShellCheck można łatwo zintegrować z ulubionym edytorem kodu (jak VS Code czy Vim) lub uruchamiać z linii komend.

#technologia #programowanie #skryptowanie #bash #shell #linux
7ded98d4-14cd-4d37-bb5f-786eb8d63a3a
Amhon

W sumie to zawsze pisałem w czystym vimie. Wrzucę parę swoich tworow do testów.

Zaloguj się aby komentować

Google Shell Style Guide

Google opublikowało standardy jakie skrypty napisane w Bashu powinny spełniać - polecam się z nim zapoznać i zacząć je stosować!

#technologia #linux #bash
9f12246a-2b30-41d5-82d3-9d06d9806fc6
ataxbras

Nawet sensowny styleguide jak na Google

parapet-inferno

@ataxbras panie, jak mam do zrobienia apkę z dodaniem karty do google pay i czytam co tam natworzyli to ja wolę śmierć przez bunga-bunga

ataxbras

@parapet-inferno Usunęli "don't be evil" i weszli w typowy lifecycle korpośmieci

A na poważnie, to nie spieprzyli tego styleguide, bo coś co ma 35 lat ma tak ugruntowane praktyki, że trzeba bardzo chcieć coś zepsuć. Nie twierdzę, że w Bashu nie można źle pisać, ale to tak niewygodny język skryptowy, że pewne praktyki są do bólu oczywiste, bo każde inne kopią w tyłek. Np. [[]] i [].

redve123

Jako linting używać 2 spacji.

Nie 4 jak z jakiegos powodu robi każdy, nie tab jak robi każdy z RIGCZ-em. 2


Nie chce spotkać osoby która stwierdziła że to będzie standard

ZohanTSW

Och ten temat spacja vs tab xD


Co do samego tematu TAB vs space to zaletą używania tabu jest to, że każdy sobie może skonfigurować jak szeroki ma być tabulator i mieć po swojemu, a wadą jest to, że w zasadzie wszędzie trzeba to ustawiać ręcznie. W przypadku spacji jest na odwrót


A dwie spacje wynikają pewnie z tego, że jak narzucają maksymalną liczbę kolumn na 80, to w przypadku 4 spacji przy zagnieżdżeniach szybko się kończy miejsce :P

redve123

@ZohanTSW w jakim sensie trzeba ustawiać taby ręcznie?

Catharsis

ehh przydało by się w końcu kiedyś na porządnie nauczyć basha, zawsze piszę na czuja xd. Większość moich skryptów w bashu skończyło tak, że w połowię się wkurzam na basha i przepisuje od nowa na pythona i działa od strzała mimo, że pythona też nie znam i też piszę na czuja, ale python to taki prosty i przyjemny język, że nie trzeba się go uczyć żeby w nim pisać xd.

koszotorobur

@Catharsis - ja jak zacząłem uczyć innych ludzi to stwierdzlem, że koniec z rumakowaniem i nawet mój kod BASHa musi spełniać jakieś podstawowe standardy - bo jak mam wymagać od innych jak nie będę najpierw wymagał od siebie?

Zaloguj się aby komentować

https://cheat.sh/ - jedyny cheat sheet jakiego potrzebujesz!

Działa w terminalu jak i w Twoim ulubionym edytorze tekstu.

Dostępny na Linuksie, macOSie i Windowsie.

GitHub repo: https://github.com/chubin/cheat.sh

#technologia #linux #windows #bash
486a135d-690d-4ed6-97df-aebaff5571cd
wombatDaiquiri

@koszotorobur używałeś "produkcyjnie" w sensie w pracy? Faktycznie wystarczają Ci podpowiedzi?

koszotorobur

@wombatDaiquiri - kiedyś miałem w terminalu ale mało używałem - ale odkąd mam w VSC to się od tego uzależniłem tak, że zacząłem się uwsteczniać

wombatDaiquiri

@koszotorobur bardzo dobrze. return to monke bracie

Zaloguj się aby komentować

Magiczny jednoliniowiec BASHa wykorzystujący dwie funkcjonalności komendy GNU sed:


sed '/regexp/,/regexp/ s/regexp/replacement/'

Komenda najpierw znajduje określoną sekcję pomiędzy dwoma wyrażeniami regularnymi /regexp/,/regexp/ a następnie w tej sekcji wykonuje substytucję wartości zdefiniowaną w s/regexp/replacement/.

Sprawdza się podczas modyfikowania plików konfiguracyjnych INI oraz TOML lub innych posiadających zdefiniowane sekcje, gdzie wartości w sekcjach się powtarzają (innymi słowy nie są unikalne dla całego pliku konfiguracyjnego).

Przykład gdzie wartość "xxx" zostanie zamieniano na "zzz" tylko w sekcji "[aaa]":
echo -e '[aaa]\nxxx\n[bbb]\nxxx\n[ccc]\nyyy' | sed '/^\[aaa\]/,/^\[/ s/xxx/zzz/'

Przykład gdzie wartość "xxx" zostanie zamieniano na "zzz" tylko w sekcji "[bbb]":
echo -e '[aaa]\nxxx\n[bbb]\nxxx\n[ccc]\nyyy' | sed '/^\[bbb\]/,/^\[/ s/xxx/zzz/'

#technologia #linux #bash #oneliner #sed
17845825-86de-4f9e-b271-0adee16a784f

Zaloguj się aby komentować

Dla tych co używają Linuksa - BASH Strict Mode: http://redsymbol.net/articles/unofficial-bash-strict-mode/

Przydatny w skryptowaniu

#technologia #komputery #linux #bash
ZohanTSW

Piorunek leci, bo to podstawa bashyzmu. Od siebie dodam, że czasami można do flag dorzucić -E (w zależności od potrzeb, nie zawsze to chcemy), a na koniec pytania skryptu uruchomić program shellcheck (wręcz obowiązkowo)

ZohanTSW

Jak dla mnie to nie problem, warto szerzyć dobre nawyki nawet kosztem powtarzania :)

Zaloguj się aby komentować

Tomki i Tomkinie, znacie jakiś konsolowe polecenie, które skopiuje mi wyłącznie pliki według jakiegoś wzorca zachowując przy tym drzewo katalogów, w którym te pliki siedzą?

Chcę skopiować z karty pamięci na dysk wszystkie pliki JPG pochowane w podkatalogach, które w nazwie mają 202308
#pytanie #linux #bash #zsh
ramzes

@Miedzyzdroje2005

Próbuj coś takiego

rsync -avz --remove-sent-files --files-from=<(find . -name *jpg -type f ) ./ destination/

Zaloguj się aby komentować

http://bash.org.pl/top/
Głównym celem serwisu jest publikowanie zabawnych cytatów z IRC. Nic nie stoi jednak na przeszkodzie aby przysyłać śmieszne rozmowy z innych środków komunikacji (IM, czat, etc.). Pamiętaj jednak, aby Twój tekst był czytelny - na wzór innych fortunek. Wszystkie cytaty przed akceptacją są oceniane przez osoby zarejestrowane, oraz przechodzą moderacje (co oznacza, że każdy cytat przed opublikowaniem jest przeglądany przez moderatora).
Popularny serwis sprzed dwóch dekad.
. #heheszki #bash #lata00
830264f5-7e24-4a04-ae2a-6c6a639bdbd9
groovy

ten serwis umarł, ostatni wpis z 2020. a szkoda

Drathir

Pamiętam basha sprzed 10 lat stare dobre czasy.

robochlop

IRC jeszcze istnieje? Tzn są jeszcze kanały gdzie ktokolwiek jest i cokolwiek się dzieje, poza botami oczywiście.

Zaloguj się aby komentować

PeBe

o @hejto , jak strasznie by się przydało formatowanie by markdown

Zaloguj się aby komentować

Skrypt bash, któy skanuje wybrane logi (sam je musisz zdefiniować) i pozwala banować adresy IP skanerów w oparciu o ipset.
#!/bin/bash
######################################################### Apache access_log ###################################################################
#Look for the file and if does not exist create it.
for x in /root/access_403.txt ; do
[ ! -f $x ] && touch $x;
done
################################################################################################################################################
display the Apache log file and pass it to grep, grep all the lines not containing the word bot and pass it to grep,
grep all the lines not containing the word google and pass it to grep,
grep all the lines that contain the word " 403 " (spaces are specially inserted - see what the apache2 log looks like) and pass it to awk,
use awk to display the first column and pass it to awk,
use awk to display a regexp to extract IP addresses from the log file,
use ip as the string that starts with the character listed above (something between 0 and 9) and display the string and pass it to sed,
use sed to remove any blank lines and pass it to uniq,
use uniq to show me how many times the IP address has been listed and pass it to awk,
use awk to select the first column and if it is 3 or more then display what is in column 2 and pass it to grep,
use grep to separate all this from /root/access_403.txt and the rest that is left should be put into /tmp/access_403.log
################################################################################################################################################
cat /var/log/httpd/access_log | grep -v bot | grep -v google | grep " 403 " | awk '{ print $1 }' | awk '{match($0,/[0-9]+.[0-9]+.[0-9]+.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' | sed '/^$/d' | uniq -c | awk '$1>1{print $2}'| grep -F -x -v -f /root/access_403.txt > /tmp/access_403.log
################################################################################################################################################
If file /tmp/ccess_403.log is not empty then add to file /root/ipaddresses.txt what is in file /tmp/access_403.log
for IP which is in /tmp/access_403.log run a command that adds IP addresses from a file
and/or use commands to add each IP address to the ipset/firewalld ipset
################################################################################################################################################
if [ -s /tmp/access_403.log ]
then
cat /tmp/access_403.log >> /root/access_403.txt
#firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/tmp/access_403.log
for ip in $(cat /tmp/access_403.log); do /usr/sbin/ipset add blacklist $ip;done
for ip in $(cat /tmp/access_403.log); do firewall-cmd --permanent --ipset=blacklist --add-entry=$ip;done
#for ip in $(cat /tmp/access_403.log); do iptables -A INPUT -s $ip/32 -d 0/0 -j DROP; done
fi
Delete the below file
rm -f /tmp/access_403.log
#echo "List of blocked IP addresses:" | cat /root/403.txt
######################################################### Apache error_log #####################################################################
for x in /root/error_403.txt ; do
[ ! -f $x ] && touch $x;
done
cat /var/log/httpd/error_log| grep " 403 " | awk '{ print $13 }' | awk '{match($0,/[0-9]+.[0-9]+.[0-9]+.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip}' | sed '/^$/d' | uniq -c | awk '$1>0{print $2}'| grep -F -x -v -f /root/error_403.txt > /tmp/error_403.log
if [ -s /tmp/error_403.log ]
then
cat /tmp/error_403.log >> /root/error_403.txt
#firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/tmp/error_403.log
for ip in $(cat /tmp/error_403.log); do /usr/sbin/ipset add blacklist $ip;done
for ip in $(cat /tmp/error_403.log); do firewall-cmd --permanent --ipset=blacklist --add-entry=$ip;done
#for ip in $(cat /tmp/error_403.log); do iptables -A INPUT -s $ip/32 -d 0/0 -j DROP; done
fi
rm -f /tmp/error_403.log
#echo "List of blocked IP addresses:" | cat /root/403.txt
Reload firewalld
firewall-cmd --reload

Zaloguj się aby komentować

A wiecie, że #bash ma ograniczoną ilość postów i w pewnym momencie @zegar nie będzie już taki punktualny na tym tagu? Chyba, że się zapętli i będzie dwa razy te same posty wrzucał, ale to by było mega słabe ( ͠° ͟ʖ ͡°)
lubieplackijohn userbar
lubieplackijohn

@zegar słabo, oj słabo. Weź to zoptymalizuj czy coś. Nie chcę dwa razy czytać tego samego ( ͠° ͟ʖ ͡°)

Zaloguj się aby komentować

Następna