Bashskript Problem?

Ich habe hier ein Bashskript, welches Dateien überwacht (noch nicht vollständig und absolut unoptimiert). Ich weiß, dass es Tools gibt, aber es ist ein Projekt für die Uni und deshalb ist Optimierung und Effizienz nicht wirklich wichtig. Ich möchte damit die Grundlagen des Shellscriptings einfach etwas lernen.

Das ist bisher das Script:

#!/bin/bash


echo "Das Skript wurde gestartet. Der Typ Ihres Betriebssystem ist "\"$OSTYPE\""."


# If-Abfrage, die das Betriebssystem erkennt und den Pfad zum überwachten Ordner oder Datei festlegt # HIER BITTE DIE PFADE ZUM ZU ÜBERWACHENDEN ORDNER EINTRAGEN   
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    BASE_DIRECTORY=" " # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = Linux
elif [[ "$OSTYPE" == "darwin"* ]]; then
    BASE_DIRECTORY="/Users/name/Library/CloudStorage/GoogleDrive-email@gmail.com/Meine Ablage/Uni/TestOrdner" # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = MacOs
elif [[ "$OSTYPE" == "win32" || "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
    BASE_DIRECTORY="/g/Meine Ablage/Uni/TestOrdner" # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = Windows
else    
    echo "Das Betriebssystem ist unbekannt." # Wenn das Betriebssystem unbekannt ist, wird eine Fehlermeldung ausgegeben
    exit 1
fi


DIRECTORY="$BASE_DIRECTORY" # Pfad zum Ordner
FILE="$BASE_DIRECTORY/Datei.txt" # Pfad zur Datei   
FILE2="$BASE_DIRECTORY/Datei2.txt" # Pfad zur Datei2 


cd "$BASE_DIRECTORY" || {
    echo "Wechsel zu $BASE_DIRECTORY fehlgeschlagen!" # Wechselt in den TestOrdner oder gibt eine Fehlermeldung aus
    exit 1;
}



# Funktion, um zu überprüfen, ob Dateien gelöscht wurden
checkIfDeleted() {
    if [ ! -f "$FILE" ]; then 
        echo "Die Datei \"$(basename "$FILE")\" wurde gelöscht, umbenannt oder verschoben."
    elif [ ! -f "$FILE2" ]; then
        echo "Die Datei \"$(basename "$FILE2")\" wurde gelöscht, umbenannt oder verschoben."
    elif [ ! -d "$DIRECTORY" ]; then
        echo "Der Ordner \"$(basename "$DIRECTORY")\" wurde gelöscht, umbenannt oder verschoben."
    fi
}


# Speichert den "ursprünglichen" Hash-Wert der Dateien
ORIGINAL_HASH=$(md5 -q "$FILE")
ORIGINAL_HASH2=$(md5 -q "$FILE2")


checkIfEdited() {
    if [ ! -f "$FILE" ]; then # Wenn $FILE nicht existiert, dann wird das Skript hier beendet
    return
    fi


    if [ ! -f "$FILE2" ]; then # Wenn $FILE2 nicht existiert, dann wird das Skript hier beendet
    return
    fi


    if [ ! -d "$DIRECTORY" ]; then # Wenn $DIRECTORY nicht existiert, dann wird das Skript hier beendet
    return
    fi


    # Berechnet den aktuellen Hash-Wert der Dateien
    CURRENT_HASH=$(md5 -q "$FILE")
    CURRENT_HASH2=$(md5 -q "$FILE2")


    # Hash-Werte werden verglichen
    if [ "$CURRENT_HASH" != "$ORIGINAL_HASH" ]; then
        echo "Die Datei \"$(basename "$FILE")\" wurde bearbeitet."
        # Ursprünglicher Hash-Wert wird für zukünftige Überprüfungen aktualisiert
        ORIGINAL_HASH="$CURRENT_HASH"
    elif [ "$CURRENT_HASH2" != "$ORIGINAL_HASH2" ]; then
        echo "Die Datei \"$(basename "$FILE2")\" wurde bearbeitet."
        # Ursprünglicher Hash-Wert wird für zukünftige Überprüfungen aktualisiert
        ORIGINAL_HASH2="$CURRENT_HASH2"
    fi
}


while true; do # Endlosschleife, die die Funktionen "checkIfDeleted" und "checkIfEdited" alle 10 Sekunden ausführt
    checkIfDeleted
    checkIfEdited
    sleep 10
done

Ja, ich weiß, welche Probleme das Skript mit sich bringt, aber ich habe ein anderes Problem:

Wenn jemand das Skript nutzen möchte, muss er die Pfade seiner Dateien einfügen und sogar neue Variablen definieren.

Man könnte das doch so machen, dass das Skript die Liste des Ordners einliest und dann auf alle Dateien direkt zugreifen muss, ohne dass man sie in das Skript einfügen muss.

Also irgendwie mit dem Befehl "ls". Ich weiß aber nicht, wie ich das implementieren soll.

Kann mir wer helfen bitte?

Visual Basic, Linux, HTML, Webseite, VBA, Bash, Batch, cmd, Code, lua, MySQL, PHP, Programmiersprache, Python, Script, Python 3
Linux from Scratch - bashrc File anschauen?

Moin Leute,

ich arbeite gerade das LFS 12.1-Buch durch und bin bei Kapitel 4.4 und habe gerade die .bashrc File erstellt. Jetzt musste ich aber aufgrund einer Fehlermeldung und eines Versuches, diese zu beheben, das Terminal schließen und mich in einem neuen Terminalfenster neu anmelden.

Jetzt habe ich ein bisschen Sorge, dass meine Änderungen für die Erstellung der .bashrc nicht gespeichert wurden. Habe aber auch keine Möglichkeit, die Datei anzusehen, weil ich die nicht finden kann. Sie soll im Verzeichnis /home/lfs auf meiner LFS-Partition sein, aber dieses Verzeichnis sehe ich in meinem Dateimanager dort nicht. Auch über die Suche finde ich diese Datei nicht.

Weiß jemand, ob man, wenn man folgenden Befehl ausführt:
"cat > ~/.bashrc << "EOF"

set +h

umask 022

LFS=/mnt/lfs

LC_ALL=POSIX

LFS_TGT=$(uname -m)-lfs-linux-gnu

PATH=/usr/bin

if [ ! -L /bin ]; then PATH=/bin:$PATH; fi

PATH=$LFS/tools/bin:$PATH

CONFIG_SITE=$LFS/usr/share/config.site

export LFS LC_ALL LFS_TGT PATH CONFIG_SITE

EOF"

und dann mit "EOF" das beendet, ob die erstellte Datei dann automatisch schon gespeichert wird? Weil wenn man "EOF" eingibt, dann kommt man ja aus dem "Editor" wieder raus und kann weitere Befehle eingeben.

Beim Befehl "source ~/.bash_profile" war ich noch nicht angelangt.

Vielleicht stelle ich mich gerade auch doof an und vielleicht wirkt meine Frage auch komisch aber bin immer noch mit der Lösung des ersten Problems beschäftigt und bin mir jetzt halt einfach nicht sicher, ob das mit der Datei schon funktioniert hat oder ob ich jetzt irgendwas nochmal neu machen muss. Geht leider irgendwie aus der Anleitung auch nicht hervor, inwiefern das jetzt wann gespeichert ist.

Linux, Bash, Shell, Terminal
Linux from Scratch 12.1 - Verschieben der "undocumented instantiation" von etc/bash.bashrc als root funktioniert nicht?

Moin Leute,

hoffe, das Thema passt in dieses Subforum hier. Falls nicht, bitte verschieben.

Ich bin gerade dabei, mir mit Linux From Scratch eine eigene Distro zu bauen und bin jetzt auf ein Problem gestoßen. Hoffe, jemand kennt sich hier damit aus und kann mir weiterhelfen.

Im aktuellen Stable LFS Book 12.1 wird in Kapitel 4.4 steht folgende wichtige Info:

"Several commercial distributions add an undocumented instantiation of /etc/bash.bashrc to the initialization of bash. This file has the potential to modify the lfs user's environment in ways that can affect the building of critical LFS packages. To make sure the lfs user's environment is clean, check for the presence of /etc/bash.bashrc and, if present, move it out of the way."

deutsch:

"Einige kommerzielle Distributionen fügen eine undokumentierte Instanzierung von /etc/bash.bashrc zur Initialisierung der Bash hinzu. Diese Datei kann die Umgebung des Lfs-Benutzers in einer Weise verändern, die die Erstellung wichtiger LFS-Pakete beeinträchtigen kann. Um sicherzustellen, dass die Umgebung des Lfs-Benutzers sauber ist, überprüfen Sie, ob /etc/bash.bashrc vorhanden ist, und entfernen Sie sie, falls sie vorhanden ist, aus dem Weg."

Man soll dort also als root den folgenden Befehl ausführen:

"[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE"

Jetzt zu meinem Problem. Wenn ich den Befehl mit sudo eingebe, bekomme ich folgende Fehlermeldung ausgegeben:

"lfs is not in the sudoers file. This incident will be reported.

mv: cannot move '/etc/bash.bashrc' to '/etc/bash.bashrc.NOUSE': Permission denied"

Wenn ich den Befehl ohne sudo eingebe, bekomme ich die gleiche Fehlermeldung wie oben, nur ohne den "lfs is not in the sudoers[...]" Fehler.

Jetzt habe ich halt das Problem, dass ich so nicht weiterkomme. Habe schonmal ein bisschen gegoogelt, aber da stand nur, ich solle mal die Besitzer meiner Verzeichnisse prüfen. Die sind aber alle auf den erstellten LFS-Benutzer gesetzt.

Als root kann ich mich in dem erstellten LFS-System nicht anmelden, da er dann ein Passwort verlangt, obwohl ich für root eigentlich kein spezielles Passwort festgelegt habe. Das Passwort vom LFS-Benutzer funktioniert hier auch nicht, da ich dann den Fehler "Authentication failure" bekomme.

Weiß jemand, was ich da tun kann und wie ich den LFS-Benutzer in die "sudoer file" integrieren kann, falls das notwendig ist? Oder wie kann ich da weitermachen? Übersehe ich vielleicht auch etwas oder stelle ich mich doof an?

Habe nebenbei auch noch die Videoreihe, die der YouTuber "marcus-s" mal darüber gemacht hat, laufen, um mir das nebenbei ein bisschen anzuschauen und es besser zu verstehen, was ich dort tue. Lese aber trotzdem weiterhin immer meine Buchversion, die ich von der LFS-Webseite habe durch und führe die Befehle von dort aus, da er eine ältere Version nutzt. Und da ist zum Beispiel diese Info von oben noch gar nicht enthalten, die Videos helfen mir da also nicht weiter.

Hoffentlich kann mir jemand von euch helfen.

Linux, Bash, Error, Root, Shell, Terminal, Fehlermeldung, sudo, Linux-Distribution
Probleme mit Fail2Ban?

Fail2Ban auf dem raspberry pi macht probleme. Wenn ich den status überprüfe erhalte ich diese fehlermeldung:

x fail2ban.service - Fail2Ban Service
   Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
   Active: failed (Result: exit-code) since Tue 2024-06-11 19:56:05 CEST; 3s ago
  Duration: 314ms
    Docs: man:fail2ban(1)
  Process: 3578 ExecStart=/usr/bin/fail2ban-server -xf start (code=exited, status=255/EXCEPTION)
  Main PID: 3578 (code=exited, status=255/EXCEPTION)
    CPU: 311ms

Jun 11 19:56:05 tbt systemd[1]: Started fail2ban.service - Fail2Ban Service.
Jun 11 19:56:05 tbt fail2ban-server[3578]: 2024-06-11 19:56:05,576 fail2ban.configreader  [3578]: WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'
Jun 11 19:56:05 tbt fail2ban-server[3578]: 2024-06-11 19:56:05,608 fail2ban        [3578]: ERROR  Failed during configuration: Have not found any log file for sshd jail
Jun 11 19:56:05 tbt fail2ban-server[3578]: 2024-06-11 19:56:05,610 fail2ban        [3578]: ERROR  Async configuration of server failed
Jun 11 19:56:05 tbt systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
Jun 11 19:56:05 tbt systemd[1]: fail2ban.service: Failed with result 'exit-code'.

Es steht ja ERROR failed during configuration: Have not found any log file in sshd jail

und ERROR Async configuration of server failed.

Ich habe im jail.local den path zum ssh jail angepasst (zu logpath = /var/log/auth.log) aber es geht immer noch nicht...

Software, Linux, Networking, Programmiersprache, Softwareentwicklung, ssh, Raspberry Pi, Raspberry, sshd, Raspberry Pi 4
Über USB Stick booten ohne BIOS?

Ich bin vor 2 Tagen von Windows auf Linux Mint (Cinnamon) umgestiegen, weil ich das Design und die Funktionen ansprechender finde, ich komme auch bisher gut damit zurecht, allerdings ist mir ein Manko aufgefallen und zwar die Kompaktheit, dass ich keine Windows Programme benutzen kann, das wusste ich schon vorher, aber erst jetzt ist mir aufgefallen wie ärgerlich das eigentlich ist und wie sehr ich manche Programme brauche, die es nur für Windows gibt, ich habe schon gesucht und bin auf Wine gestoßen, was aber nicht funktioniert, z.B. bei FL Studio startet es nicht. Daher möchte ich wieder auf Windows umsteigen, da ich auch Windows über 10 Jahre gewohnt bin und ich doch wieder auf Windows zurück möchte. (Windows 10)

Daher meine Frage und mein Problem, ist es möglich wieder zu wechseln? Ja, aber folgendes Problem: mein Mainboard hat seit kurzem Probleme, das ich nicht mehr ins Bios komme, ich habe wirklich jede Taste ausprobiert, Entf, F2 und so weiter, was nicht geklappt hat, was eventuell mit meiner neuen Tastatur zusammenhängen könnte, denn diese wird im Grub Menu unter Linux auch nicht erkannt oder nur falsch z.B. war die Enter Taste = / und - zusammengedrückt, komisch.

Ich habe bereits einen USB-Stick mit Windows 10 installiert, aber ich kann die Bootreihenfolge nicht ändern, weil ich nicht ins Bios komme, gibt es eine andere Lösung?

Windows, Linux, IT, Ubuntu, USB-Stick, BIOS, booten, Linux Mint, Windows Installation, Windows 10, Windows 10 Pro
Linux hat BIOS/Motherboard Einstellungen zurückgesetzt?

Hallo,

ich habe ein ASUS Vivobook Pro 15 Notebook und habe darauf immer Windows 11 drauf gehabt und das auch oft neu installiert. Nun habe ich das erste mal Linux bzw. Ubuntu 22.04 ausprobiert und da es mir nicht ganz so gefallen hat wieder deinstalliert bzw. noch einmal Windows 11 installiert.

Das Problem ist: Die ganzen voreingestellten/vorinstallierten Treiber auf dem BIOS oder Motherboard (?) wurden entfernt. Sprich: Ich kann keine Netzwerkverbindung mehr aufbauen. Zumindest nicht sofort, wie früher nach einer frischen Windows Installation. Auf der Herstellerseite habe ich mir den Treiber heruntergeladen und führe das aus und kann es installieren (so wie früher das einmal der Fall war). Mit einer Internetverbindung werden dann über Windows Updates dann auch die restlichen Treiber heruntergeladen und installiert.

Soweit passt das. Aber das ist für mich ein umständlicher Weg.

Wichtige Infos:

  • Ubuntu habe ich normal über die Herstellerseite heruntergeladen und mit Rufus ein USB Stick erstellt (alles Standardeinstellungen)
  • Eine Windows 11 Installation funktionierte (nach dem Kauf des Notebooks) auch nicht perfekt. Ich musste ein Intel Treiber herunterladen und während der Installation "Treiber laden" klicken, damit ich Zugriff auf meine Festplatte hatte. Aber während der Installation von Ubuntu brauchte ich sowas nicht.

Meine Fragen:

  1. Was genau hat die Ubuntu Installation mit meinem Notebook angerichtet? Was genau wurde da gelöscht oder verändert? Ubuntu lief auch nicht ganz ordnungsgemäß. Es gab einige Zeilen Code beim hochfahren (Fehlermeldungen?) und der Bereitschaftsmodus hat auch nicht genau funktioniert.
  2. Gibt es eine Möglichkeit, das wieder auf den Ursprung zurückzusetzen? Also das ich WLAN+Touchpad etc. auch ohne manuelle Treiber nach einer Win 11 Installation nutzen kann?

Außerdem:

  • Auch bei einer erneuten Ubuntu Installation gibt es nun Probleme. Ich kann mich auch nicht mit WLAN verbinden. Leider bietet der Hersteller nur Treiber für Windows an.
  • Ich habe schon bereits BIOS Update durchgeführt.
Windows, Microsoft, WLAN, Technik, Linux, IT, Ubuntu, USB-Stick, Update, BIOS, booten, Linux Mint, Motherboard, Treiber, Windows Installation, Windows-Update, Windows 10, Windows 11
Warum benutzt man noch Windows zum arbeiten, wenn es Linux gibt?

Hallo zusammen,

warum zur Hölle benutzt ihr zum Arbeiten eigentlich noch Windows? Es ist absolut lächerlich! Microsoft gibt eure Daten an Dritte weiter, und ihr setzt euch einer unglaublich hohen Virengefahr aus. Ihr unterstützt damit auch noch eine Monopolfirma, die ihre Macht ausnutzt, um den Markt zu dominieren und Innovationen zu ersticken.

Habt ihr jemals darüber nachgedacht, dass Linux all diese Probleme lösen könnte? Linux ist die ultimative Antwort auf die Datenkraken und Sicherheitsrisiken, die uns alle bedrohen. Es ist Open Source und wird von einer engagierten Gemeinschaft entwickelt, die Transparenz und Sicherheit wirklich ernst nimmt.

Open Source ist die Zukunft. Mit Linux habt ihr die volle Kontrolle über euer System. Es gibt keine versteckten Hintertüren, keine undurchsichtigen Datensammlungen und keine überteuerten Lizenzgebühren. Stattdessen könnt ihr ein stabiles, sicheres und flexibles Betriebssystem nutzen, das euren Bedürfnissen entspricht.

Und was passiert mit euren Daten, wenn ihr nicht Open-Source-Software verwendet? Sie werden verkauft, analysiert und möglicherweise missbraucht. Jede App, die nicht Open Source ist, könnte eure persönlichen Informationen an den Höchstbietenden weitergeben. Mit Open Source hingegen könnt ihr den Quellcode einsehen und sicherstellen, dass nichts hinter eurem Rücken passiert.

Linux ist nicht nur eine Alternative, es ist die Lösung. Weg mit Windows, weg mit Microsoft! Setzt auf Freiheit, Sicherheit und Kontrolle. Setzt auf Linux und Open Source!

Windows, Microsoft, App, Linux, IT, Ubuntu, booten, Linux Mint, Open Source, Programmiersprache, Windows 10, Linux-Distribution, Windows 11 Pro

Meistgelesene Beiträge zum Thema Linux