Benutzer-Werkzeuge

Webseiten-Werkzeuge


dinge_die_einem_das_leben_erleichtern

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
dinge_die_einem_das_leben_erleichtern [2017/04/07 22:20] – [Dinge die das Leben erleichtern] admindinge_die_einem_das_leben_erleichtern [2025/06/10 13:07] (aktuell) – [Festplatten vernichten und bereit für den Mülleimer] loma
Zeile 1: Zeile 1:
 [[dinge_die_einem_das_leben_erleichtern|{{:wiki:marble_1.png?nolink&100 |Dinge die einem das Leben erleichtern}}]] [[dinge_die_einem_das_leben_erleichtern|{{:wiki:marble_1.png?nolink&100 |Dinge die einem das Leben erleichtern}}]]
-====== Dinge die das Lebafgafdafdfasden erleichtern ======+====== Dinge die das Leben erleichtern ====== 
 +Du möchtest dich gerne für unsere Hilfe erkenntlich zeigen 8-o. Gerne. Wir bedanken uns bei dir für deine Spende! 🙏 \\ 
 +[[https://www.paypal.com/donate/?hosted_button_id=KE592Y5993ZKW|{{:spenden.gif|}}]] \\ 
 +\\ 
 +Zum frei verfügbaren [[:apt-repository|Apt-Repository]] 
 +\\ 
 +GITLAB: [[https://git.osit.cc|{{:gitlab_logo.png?nolink&60|}}]]
 \\ \\
 \\ \\
 ===== Alle Mails an Root an echte Mailadresse weiterleiten ===== ===== Alle Mails an Root an echte Mailadresse weiterleiten =====
  
-Viele Programm senden default Servicemails an Root. Nur hat Root ja keine echte Adresse (root@localhost). Also bedienen wir hier uns Aliases. Zum einrichten der Funktion geht man wie folgt vor:+Viele Programme senden default Servicemails an Root (hier Ubuntu 16.04). Nur hat Root ja keine echte Adresse (root@localhost). Also bedienen wir hier uns Aliases. Zum Einrichten der Funktion geht man wie folgt vor:
      
   nano /etc/aliases   nano /etc/aliases
Zeile 32: Zeile 38:
 ^ Befehl^ Beschreibung | ^ Befehl^ Beschreibung |
 | <code> for i in * ;do mv "$i" $(echo "$i" | tr [:blank:] _ ) ;done </code>| Bei allen Dateien im Verzeichnis das Leerzeichen entfernen und durch einen Unterstrich ersetzen | | <code> for i in * ;do mv "$i" $(echo "$i" | tr [:blank:] _ ) ;done </code>| Bei allen Dateien im Verzeichnis das Leerzeichen entfernen und durch einen Unterstrich ersetzen |
-| find / -nouser -or -nogroup| Sucht nach Dateien und Ordner im ganzen root die keine UID oder GID haben |+<code>find / -nouser -or -nogroup</code>| Sucht nach Dateien und Ordner im ganzen root die keine UID oder GID haben | 
 +|<code>find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n</code> |Durchsucht von dort wo man steh den gesamten \\ Rechner und listet die Orte mit den meisten Dateien auf. Perfekt \\ für Inode Engpässe | 
 +|<code>du -hs * | sort -h</code>|Dateien nach größe sortiert anzeigen| 
 + 
 +Mit der Erweiterung ''pv'' für ''dd'' kannst beim Kopieren von Datenträgern auch eine Fortschrittsanzeige generieren. Beispiel: 
  
 + dd if=/dev/mmcblk0 | pv -s 16G | dd of=/mnt/PI-image-202308-bullseye.img
 + 1,91GiB 0:03:02 [5,46MiB/s] [===========>                         ] 11% ETA 0:22:18
  
  
Zeile 43: Zeile 55:
 | ifconfig br0:1 10.55.1.100 netmask 255.255.255.0 up| Einer Netzwerkkarte eine zweite IP-Adresse zuweisen | | ifconfig br0:1 10.55.1.100 netmask 255.255.255.0 up| Einer Netzwerkkarte eine zweite IP-Adresse zuweisen |
 | route add default gw 192.168.178.1| Default-Gateway bestimmen | | route add default gw 192.168.178.1| Default-Gateway bestimmen |
-| <code> nmap -p 22 172.16.10.* --open | grep Interesting </code>| nmap nur offene ports anzeigen |+| <code> nmap -p 22 "172.16.10.*--open | grep Interesting </code>| nmap nur offene ports anzeigen 
 +| <code> netstat -tunlp </code> | Benutze Ports + Application | 
 +| <code> nmap  -sn "172.16.10.*" </code>| Ping Scan des gesamten Netzes | 
 +| <code> nmap  -sn 172.16.10./24 |grep "(172.16.10" </code>| Ping Scan des gesamten Netzes (schönere Ansicht)|
 | tar -czf /p-openvz-templates/ubuntu-8.0-standard_8.10_amd64.tar.gz .| Ein TAR.GZ erstellen | | tar -czf /p-openvz-templates/ubuntu-8.0-standard_8.10_amd64.tar.gz .| Ein TAR.GZ erstellen |
 | ethtool -s eth0 speed 1000 duplex full autoneq on| speed der Netzwerkkarte ändern | | ethtool -s eth0 speed 1000 duplex full autoneq on| speed der Netzwerkkarte ändern |
Zeile 49: Zeile 64:
 | ssh -L 8291:10.8.70.10:8291 user@172.30.1.10| SSH-Tunnel für z.B. Mikrotik auf localhost mappen | | ssh -L 8291:10.8.70.10:8291 user@172.30.1.10| SSH-Tunnel für z.B. Mikrotik auf localhost mappen |
 | <code> less /proc/cpuinfo |grep -i "physical id" |uniq -c </code>| physikalisch vorandenen CPUs eruieren | | <code> less /proc/cpuinfo |grep -i "physical id" |uniq -c </code>| physikalisch vorandenen CPUs eruieren |
 +| <code>nwipe /dev/XXX </code>  |Vernichtet alle Daten am angegebenen Datenträger |
  
 +===== Kommentierte Zeilen (#) mit CAT nicht anzeigen ===== 
 +Immer wieder ärgert man sich man macht ein ''cat'' und kriegt 500 Zeilen, dabei möchte man die ganzen Kommentare ja eh nicht sehen. Hier die Lösung. Beispiel: 
 +<code> 
 +cat /etc/squid/squid.conf | egrep -v "(^#.*|^$)" 
 +</code>
  
 ===== Ärger mit Prozessen und Diensten ===== ===== Ärger mit Prozessen und Diensten =====
  
  
-^ Befehl^ Beschreibung | +^ Befehl                                       ^ Beschreibung                                                             ^ 
-| jobs| Prozesse anzeigen die im Hintregrund sind | +| jobs                                         | Prozesse anzeigen die im Hintregrund sind                                
-| STRG + Z| Prozess anhalten und in den Hintergrund schieben | +| STRG + Z                                     | Prozess anhalten und in den Hintergrund schieben                         
-| fg <jobnummer>| Bringt den Befehl mit der angegebenen Jobnummer in den Vordergrund | +| fg <jobnummer>                               | Bringt den Befehl mit der angegebenen Jobnummer in den Vordergrund       
-| bg <jobnummer>| Bringt den Befehl mit der angegebenen Jobnummer in den Hintergrund | +| bg <jobnummer>                               | Bringt den Befehl mit der angegebenen Jobnummer in den Hintergrund       
-| <Befehl> &| Startet den Befehl in den Hintergrund | +| <Befehl>                                  | Startet den Befehl in den Hintergrund                                    
-| nohup <Befehl>| Lässt den Prozess bei SSH-Abmeldung weiterlaufen | +| nohup <Befehl>                               | Lässt den Prozess bei SSH-Abmeldung weiterlaufen                         
-| fuser -uv /mnt/sda2| Hier sieht man warum sich ein Device (z.B. CDrom) nicht aushängen lässt | +| fuser -uv /mnt/sda2                          | Hier sieht man warum sich ein Device (z.B. CDrom) nicht aushängen lässt  
-| fuser -k {device/Datei}| killen der Sperre | +| fuser -k {device/Datei}                      | killen der Sperre                                                        
-| sudo ifconfig enp5s0:1 192.168.123.11/24 up| weitere IPadresse hinzufügen | +| sudo ifconfig enp5s0:1 192.168.123.11/24 up  | weitere IPadresse hinzufügen                                             
 +| <code>ps aux | egrep "Z|defunct" | grep -v 'grep'</code>  | Zombie Prozesse anzeigen                                                 | 
 +| pstree -p -s 45267                           | Elternprozess des Zombies anzeigen wenn PID des Zombie 45267 ist         |
  
  
Zeile 72: Zeile 93:
  
 ^ Befehl^ Beschreibung | ^ Befehl^ Beschreibung |
-| <code> echo 'Acquire::http { Proxy "http://10.70.99.28:3142"; };' | sudo tee /etc/apt/apt.conf.d/01proxy </code>| Setzt den Server "apt-cacher" als Proxy für das Paketmanagement | +| <code> echo 'Acquire::http { Proxy "http://10.69.99.10:3142"; };' | tee /etc/apt/apt.conf.d/01proxy </code>| Setzt den Server "apt-cacher" als Proxy für das Paketmanagement | 
-| <code> echo 'Acquire::http { Proxy "http://apt-cacher.osit.cc:3142"; };' | sudo tee /etc/apt/apt.conf.d/01proxy </code>| Setzt den Server "apt-cacher" als Proxy für das Paketmanagement | +| <code> echo 'Acquire::http { Proxy "http://apt-cacher.osit.cc:3142"; };' | tee /etc/apt/apt.conf.d/01proxy </code>| Setzt den Server "apt-cacher" als Proxy für das Paketmanagement | 
-| dpkg --get-selections '*' > Paketliste.txt| Erstellen eines APT-Abbildes, zur Übertragung der gleichen Pakete auf einem anderen Rechner | +<code>dpkg --get-selections '*' > Paketliste.txt</code>| Erstellen eines APT-Abbildes, zur Übertragung der gleichen Pakete auf einem anderen Rechner | 
-| dpkg --set-selections < Paketliste.txt| Setzen der Liste auf dem Zielrechner | +<code>dpkg --set-selections < Paketliste.txt</code> [[https://wiki.ubuntuusers.de/Paketverwaltung/Tipps/#bersicht-der-installierten-Pakete|INFO Synaptic]]| Setzen der Liste auf dem Zielrechner ''apt-get install dctrl-tools'' und anschließendem ''sync-available'' damit ''--set-selections'' auch funktioniert. 
-| apt-get dselect-upgrade| Die zuvor gesetzte Liste installieren |+| apt-get dselect-upgrade [[https://wiki.ubuntuusers.de/Paketverwaltung/Tipps/#bersicht-der-installierten-Pakete|INFO Synaptic]]| Die zuvor gesetzte Liste installieren |
 | grep -R "blabla" *| Von dort wo man sich befindet rekrusiv alle Dateien nach "blabla" durchsuchen | | grep -R "blabla" *| Von dort wo man sich befindet rekrusiv alle Dateien nach "blabla" durchsuchen |
 | aptitude search '~i linux-image'| Sucht nach allen installierten Linuxkernels auf Debian basierenden Systemen | | aptitude search '~i linux-image'| Sucht nach allen installierten Linuxkernels auf Debian basierenden Systemen |
Zeile 82: Zeile 103:
 | ldapsearch -D "cn=directory manager" -w geheim -h localhost -b "dc=osit,dc=cc"| unter CentOS (kolab) ldapsearch durchführen | | ldapsearch -D "cn=directory manager" -w geheim -h localhost -b "dc=osit,dc=cc"| unter CentOS (kolab) ldapsearch durchführen |
 | ldapsearch -h ldapserver.local -Z -x -D "cn=Manager,dc=osit,dc=cc" -W| unter Gentoo mit TLS | | ldapsearch -h ldapserver.local -Z -x -D "cn=Manager,dc=osit,dc=cc" -W| unter Gentoo mit TLS |
 +| pigz -d -z XferLOG.0 | Zlib Archiv entpacken z.B. Backuppc|
 +| lsblk -o +fstype | Partition + PHY Zugehörigkeit + Filesystem |
  
 +LDAP-Search in UCS mit TLS
 + ldapsearch -H ldaps://dc1.tux.lan:7636 -x -D "uid=benno,cn=users,dc=tux,dc=lan" -W
  
 +==== Nicht mehr verwendete Kernel löschen ====
 +
 +<code>
 +apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")
 +apt autoremove --purge
 +</code>
 ===== IPV6 DNSserver ===== ===== IPV6 DNSserver =====
  
Zeile 92: Zeile 123:
 | Tunnelbroker| 2001:470:20::2 | | Tunnelbroker| 2001:470:20::2 |
  
-===== Clonezilla =====+===== Secure DNS ===== 
 +  * https://www.privacy-handbuch.de/handbuch_93d.htm 
 +  * https://ffmuc.net/wiki/doku.php?id=knb:dohdot 
 + 
 +Fortinet DNS \\ 
 +208.91.112.53 \\ 
 +208.91.112.52 \\ 
 + 
 +FFMUC DNS \\ 
 +5.1.66.255 \\ 
 +185.150.99.255 \\ 
 +===== Clonezilla legacyboot only =====
  
  
Zeile 213: Zeile 255:
 Schlüssel von einem Schlüsselserver importieren: Schlüssel von einem Schlüsselserver importieren:
      
-  apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0C5A2783 +  apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0C5A2783 
 +  gpg --no-default-keyring --keyring /usr/share/keyrings/OpenSource-IT.gpg --keyserver hkp://keys.openpgp.org:80 --recv-keys 917DAE9831E3A6D6
  
 +Apt Schlüssel vom alten Schlüsselbund löschen:
 +  apt-key del "9338 0BED D99A EACD E882  BCC9 2FAB 19E7 CCB7 F415"
  
 +Heruntergeladenen öffentlichen GPG-Key in ein File importieren: 
 + gpg --no-default-keyring --keyring /usr/share/keyrings/benno.gpg --import benno.asc
  
 +Eigenes Debianrepository signieren:
 +<code>
 +gpg --import geheimer-Schlüssel.asc
 +cd Repository
 +apt-ftparchive packages . > Packages
 +apt-ftparchive release . > Release
 +gpg --output Release.gpg -ba Release
 +</code>
 +
 +Eine bestimmte Version eines Paketes installieren. Z.B. hier auf Proxmox ein Downgrade von "pve-qemu-kvm". Zuerst sehen wir nach welche Versionen verfügbar sind:
 +<code>
 +apt list --all-versions  pve-qemu-kvm                                                                        ✔  with root@pve  0.22   39%   2.25G  
 +
 +Listing... Done
 +pve-qemu-kvm/now 9.0.0-6 amd64 [installed,local]
 +pve-qemu-kvm/stable 8.1.5-6 amd64
 +pve-qemu-kvm/stable 8.1.5-5 amd64
 +pve-qemu-kvm/stable 8.1.5-4 amd64
 +pve-qemu-kvm/stable 8.1.5-3 amd64
 +pve-qemu-kvm/stable 8.1.5-2 amd64
 +pve-qemu-kvm/stable 8.1.5-1 amd64
 +pve-qemu-kvm/stable 8.1.2-6 amd64
 +pve-qemu-kvm/stable 8.1.2-5 amd64
 +pve-qemu-kvm/stable 8.1.2-4 amd64
 +pve-qemu-kvm/stable 8.1.2-3 amd64
 +pve-qemu-kvm/stable 8.1.2-2 amd64
 +pve-qemu-kvm/stable 8.1.2-1 amd64
 +pve-qemu-kvm/stable 8.0.2-7 amd64
 +pve-qemu-kvm/stable 8.0.2-6 amd64
 +pve-qemu-kvm/stable 8.0.2-5 amd64
 +pve-qemu-kvm/stable 8.0.2-4 amd64
 +pve-qemu-kvm/stable 8.0.2-3 amd64
 +pve-qemu-kvm/stable 8.0.2-2 amd64
 +</code>
 +Und das Downgrade ausführen: 
 + apt install pve-qemu-kvm=8.1.5-6
 +
 +===== Verfügbare Pakete eines bestimmten Debian/Ubuntu Repositories auflisten =====
 +
 +Verwendete Repos anzeigen: 
 + ls /var/lib/apt/lists
 +
 +Verfügbare Pakete anzeigen: 
 + grep -h -P -o "^Package: \K.*" /var/lib/apt/lists/apt.iteas.at_iteas_dists_bookworm* | sort -u
 +
 +Verwendete Repos anzeigen: (Kurzform)
 + apt-cache policy | grep -oE "o=[^,]*"
 +
 +Installierte Pakete eines bestimmten Repos anzeigen: (o=iteas bookworm)
 + apt list '~i ~Oiteas'
 +
 +Siehe auch "man apt patterns".
 ===== Datenbanken und deren Befehle ===== ===== Datenbanken und deren Befehle =====
  
Zeile 225: Zeile 324:
 Um sich mit einer Datenbank auf einem entfernten Server zu verbinden und die vorhandenen Datenbanken anzuzeigen, gibt man folgendes ein: Um sich mit einer Datenbank auf einem entfernten Server zu verbinden und die vorhandenen Datenbanken anzuzeigen, gibt man folgendes ein:
   psql -h entfernter_Server -U Benutzer -W -l   psql -h entfernter_Server -U Benutzer -W -l
 +  
 +Lokale PSQL Verbindung
 + sudo su - postgres -c 'psql'
 +
 +DB auflisten: ''\l''
  
  
Zeile 248: Zeile 352:
   mysql> show databases;   mysql> show databases;
  
 +Datenbank löschen: 
 +  mysql> DROP DATABASE databasename;
  
 === Backup und Recovery von einer MYSQL-Datenbank === === Backup und Recovery von einer MYSQL-Datenbank ===
Zeile 271: Zeile 376:
      
   mysql -u root -p movies < moviesDB-backup.sql   mysql -u root -p movies < moviesDB-backup.sql
 +  mysqladmin -u root -p flush-privileges
  
 Wichtig hierbei ist das die Datenbank die man zurückspielen möchte bereits im System existiert. Wichtig hierbei ist das die Datenbank die man zurückspielen möchte bereits im System existiert.
Zeile 278: Zeile 384:
   mysql -u amarok -D amarok -h <HOSTNAME> -p   mysql -u amarok -D amarok -h <HOSTNAME> -p
  
- +=== MYSQL User für Backups und CheckMK Überwachung anlegen === 
 +<code> 
 +GRANT SELECT, SHOW DATABASES, LOCK TABLES, EVENT ON *.* TO 'backup'@'localhost' IDENTIFIED BY 'secret'; 
 +GRANT SELECT, SHOW DATABASES ON *.* TO 'backup'@'localhost'; 
 +GRANT REPLICATION CLIENT ON *.* TO 'backup'@'localhost'; 
 +FLUSH PRIVILEGES; 
 +</code>
 ===== Bash History unendlich mit sofortigen schreiben ===== ===== Bash History unendlich mit sofortigen schreiben =====
  
Zeile 305: Zeile 416:
   PROMPT_COMMAND="history -a; $PROMPT_COMMAND"   PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
  
-Note: every command is written immediately after it's run, so if you accidentally paste a password you cannot just "kill -9 %%to avoid the history write, you'll need to remove it manually.+Note: every command is written immediately after it's run, so if you accidentally paste a password you cannot just 
 +<code> 
 +kill -9 %% 
 +</code> 
 +to avoid the history write, you'll need to remove it manually.
  
 Also note that each bash session will load the full history file in memory, but even if your history file grows to 10MB (which will take a long, long time) you won't notice much of an effect on your bash startup time. Also note that each bash session will load the full history file in memory, but even if your history file grows to 10MB (which will take a long, long time) you won't notice much of an effect on your bash startup time.
Zeile 324: Zeile 439:
  
 Danach natürlich ein "update-grub2" nicht vergessen. Danach natürlich ein "update-grub2" nicht vergessen.
 +
 +===== Festplatten vernichten und bereit für den Mülleimer =====
 +Hierzu eignet sich das Tool **nwipe** sehr gut. Es wird auch von DBAN Linux verwendet. Um zum Beispiel die Daten der Festplatte ''/dev/sdq'' zu vernichten inkl. 3 maliges Überschreiben bedient man sich diesem Befehle:
 +<code>
 +nwipe -m dodshort --nogui --autonuke <device>
 +</code>
 +Mit autonuke bitte vorsichtig sein. Gibt man kein Device an werden alle angeschlossenen Datenträger automatisch gelöscht, auch USB. Um das zu vermeiden, kann man USB-Datenträger auch excluden:
 +<code>
 +nwipe -m dodshort --nogui --nousb --autonuke <device>
 +</code>
 +Im Default wird auch schon "dodshort" verwendet. Benötigt man eine höhere Sicherheitsrichtlinie, kann man sich auch anderen Methoden bedienen:
 +<code>
 +-m, --method=METHOD     The wiping method. See man page for more details.
 +                          (default: dodshort)
 +                          dod522022m / dod       - 7 pass DOD 5220.22-M method
 +                          dodshort / dod3pass    - 3 pass DOD method
 +                          gutmann                - Peter Gutmann's Algorithm
 +                          ops2                   - RCMP TSSIT OPS-II
 +                          random / prng / stream - PRNG Stream
 +                          zero / quick           - Overwrite with zeros
 +                          one                    - Overwrite with ones (0xFF)
 +                          verify_zero            - Verifies disk is zero filled
 +                          verify_one             - Verifies disk is 0xFF filled
 +</code>
 +Für noch mehr Info verwende ''nwipe --help''.
 +\\
 +Nwipe eignet sich sehr gut wenn man den Löschbefehl auf einem Screen absetzten möchte. Ohne Autonuke gibt es ne GUI. Ist alles abgeschlossen, darf man die HDD getrost in den Müll werfen.
 +
 +===== SSH Hostkey und Maschinen-ID erneuern =====
 +<code>
 +rm -f /etc/machine-id /var/lib/dbus/machine-id
 +dbus-uuidgen --ensure=/etc/machine-id
 +dbus-uuidgen --ensure
 +
 +cd /etc/ssh
 +rm ssh_host_*
 +ssh-keygen -A
 +</code>
 +
 +===== Datenrettung =====
 +
 +==== Foremost ====
 +Foremost stellt verschiedene Dateitypen her. Weitere neue such Typen (Suchmuster) kann man manuell hinzufügen.
 +
 +Foremost installieren:
 + apt install foremost
 +
 +<WRAP center round important 60%>
 +Gefundene Dateien werden in dem Verzeichnis gespeichert aus welchem das Programm gestartet wurde.
 +Man muss daher zuerst auf die Festplatte oder Freigabe wechseln wo man die wiederhergestellten Bilder speichern möchte.
 +Das Zielverzeichnis muss leer sein.
 +</WRAP>
 +
 +Suchlauf starten:
 + foremost -t all -v dd_image_oder_/dev/sdx
 +
 +==== TSK Recover ====
 +Das Forensik-Toolkit Sleuthkit (die Spürhund-Schnüffel-Tools) installieren:
 + apt install sleuthkit
 +
 +Zunächst am besten ein Image des zu untersuchenden Laufwerks erstellen:
 + dd if=/dev/sdX of=sdX_image status=progress bs=1M
 +
 +Danach den Offset (den Beginn der verschiedenen Partitionen) ermitteln:
 + mmls sdX_image
 +
 +Man erhält hier eine Ausgabe der Partitionen.
 +
 +Die eigentliche Wiederherstellung startet man dann mittels:
 + tsk_recover -ev -o 8192 sdX_image /Ausgabepfad/
 +
 +Parameterbeschreibung:
 +''[-ev] 'e''' alle Dateien wiederherstellen, '''v''' (verbose) einen Verlauf anzeigen.
 +''[-o 8192]'' ist die Offsetangabe, welche man entsprechend der Partitionen selbst anpassen muss.
 +''[/Ausgabepfad/]'' bestimmt wo die restaurierten Daten gesichert werden. Der Ausgabepfad sollte logischerweise nicht auf das zu untersuchende/zu rettende Dateisystem verweisen.
 +
 +Quelle: https://ctaas.de/
dinge_die_einem_das_leben_erleichtern.1491603616.txt.gz · Zuletzt geändert: von admin