Häufig verwendete Linux-Befehle

Wir haben die Befehle und Tastenkombinationen zusammengefasst, die unter Linux häufig verwendet werden.

Die Zielgruppe sind Ingenieure, die nicht gut in Terminals sind. Ich habe es für Anfänger geschrieben, aber es gibt einige technische Schreibstile. Es kann unerwartete Entdeckungen geben, selbst für diejenigen, die es jeden Tag benutzen.

Die Haltung dieses Artikels

Aufführen

Hauptgegenstände Was ist vorzustellen?
Einführung ~ Erleichtern Sie die Befehlseingabe Tab-Vervollständigung,Bash-Verknüpfung
Überprüfen Sie das Verzeichnis pwd, ls, tree
Hierarchische Verschiebungs- und Dateivorgänge cd, mkdir, touch, mv, cp, rm, tar
Textverarbeitung(Filterbefehl) cat, wc, head, tail, sort, uniq, grep, sed, awk, xargs, less, >, >>(umleiten)
Rund um die Installation apt, yum, sudo, su, echo, which, wheris, source, ., chmod, chown, systemctl
Rund um das Betriebssystem date, df, du, free, top, ps, kill, pkill, pgrep, netstat
Andere find, history, diff, jobs, fg, bg, &(Hintergrundausführung), &&, $()(Befehl ersetzen), <()(Prozess ersetzen), $?, for
Derjenige, der beschlossen hat, nicht zu schreiben vi, make, curl, rsync, ssh-keygen, npm, git
Bonus nice, sl

Einführung ~ Erleichtern Sie die Befehlseingabe

Die manuelle Eingabe aller Befehle ist mühsam. Machen wir es uns einfacher, indem wir Tab-Vervollständigungen und Bash-Verknüpfungen verwenden. -> https://www.atmarkit.co.jp/ait/articles/1603/09/news019.html

Zumindest denke ich, dass es besser ist, den Befehls- und Dateinamen durch Drücken der Tabulatortaste zu vervollständigen. Es gibt verschiedene Bash-Verknüpfungen, aber persönlich

Die Nutzungshäufigkeit ist hoch. Dies sind Verknüpfungen, die von einer Bibliothek namens readline bereitgestellt werden. # Strg + C kann unterschiedlich sein Es kann mit vielen Befehlszeilen-Tools verwendet werden, nicht nur mit Bash. Es ist also nützlich, sich daran zu erinnern. (Zum Beispiel können Sie es mit Python oder MySQL verwenden)


Überprüfen Sie das Verzeichnis

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
pwd Zeigt den absoluten Pfad des aktuellen Verzeichnisses an print working directory
ls Dateien und Verzeichnisse anzeigen list
tree Verzeichnisstruktur anzeigen directory tree

・ ** pwd **

# pwd:Zeigt den absoluten Pfad des aktuellen Ordners an
arene@~/qiita $ pwd
/home/arene/qiita

・ ** ls **

# ls:Zeigen Sie Dateien und Verzeichnisse im aktuellen Ordner an
$ ls
dir1  file1.txt  file2.txt  file3.txt

# ls -al:
#  * -a:Zeige versteckte Dateien(Ursprung: all)
#  * -l:Detaillierte Informationen anzeigen(Ursprung: list?)
#  *Verwenden Sie es auf jeden Fall, wenn Sie alles wollen
#  *Ls, wenn Sie große Dateien haben-Mit alh leicht zu sehen
#    -h: M(Mega)、G(Giga)Damit die Größe besser sichtbar ist(Ursprung:human readable)
#  *Genehmigung(R oder w, das am linken Ende erscheint)Und Besitzer(Arene Arene)Wird häufig angezeigt, wenn während der Installation ein Fehler auftritt
#    ->Wenn Sie jeden chmod ändern möchten,benutze chown
#  *ll in ls-al und ls-Ich sehe oft Umgebungen, die sich genauso verhalten wie l(Das Schlüsselwort ist Alias(alias).. Siehe den Link unten)
$ ls -al
total 0
drwxr-xr-x 1 arene arene 4096 Nov 10 18:07 .
drwxrwxrwx 1 arene arene 4096 Nov 10 18:04 ..
-rw-r--r-- 1 arene arene    0 Nov 10 18:07 .hidden_file1.txt
-rw-r--r-- 1 arene arene    0 Nov 10 18:14 dir1
-rw-r--r-- 1 arene arene    4 Nov 10 18:04 file1.txt
-rw-r--r-- 1 arene arene    0 Nov 10 18:02 file2.txt
-rw-r--r-- 1 arene arene    0 Nov 10 18:02 file3.txt

# ls -ltr:Zeigen Sie unten neue Dateien an
#  * -t:Wird in Zeitstempelreihenfolge angezeigt(Ursprung: time)
#  * -r:Anzeige in umgekehrter Reihenfolge(Ursprung: reverse)
#  *Wird häufig verwendet, um die neueste Protokolldatei zu finden
#  *Die neueste Version befindet sich unten. Selbst wenn viele Dateien vorhanden sind, kann sie nicht abgeschnitten werden
#  *Umgekehrt, wenn Sie die älteste Datei sehen möchten, ls-lt
$ ls -ltr
total 0
-rw-r--r-- 1 arene arene  123 Oct 10 02:30 20191010.log
-rw-r--r-- 1 arene arene  123 Oct 11 02:30 20191011.log
-rw-r--r-- 1 arene arene  123 Oct 12 02:30 20191012.log
-rw-r--r-- 1 arene arene  123 Oct 13 02:30 20191013.log
-rw-r--r-- 1 arene arene  123 Oct 14 02:30 20191014.log
-rw-r--r-- 1 arene arene  123 Oct 15 02:30 20191015.log
-rw-r--r-- 1 arene arene  123 Oct 16 02:30 20191016.log
-rw-r--r-- 1 arene arene  123 Oct 17 02:30 20191017.log
-rw-r--r-- 1 arene arene  123 Oct 18 02:30 20191018.log
-rw-r--r-- 1 arene arene  123 Oct 19 02:30 20191019.log ← Die neueste Datei befindet sich unten
$

Nebenbei: Alias-Einstellungen für Ingenieure in der Welt


・ ** Baum ** * Separate Installation erforderlich

# tree:Verzeichnisstruktur anzeigen
#  * ls -Ähnliche Informationen finden Sie in R, aber es ist schwer zu sehen.
#  *Kann mit sudo apt install tree oder yum install tree installiert werden
#  *Eingeführt zur häufigen Verwendung in zukünftigen Erklärungen
$ tree
.
|-- dir1
|   |-- dir11
|   |   |-- file111.txt
|   |   `-- file112.txt
|   |-- file11.txt
|   |-- file12.txt
|   `-- file13.txt
|-- file1.txt
|-- file2.txt
`-- file3.txt

Hierarchische Verschiebungs- und Dateivorgänge

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
cd Hierarchische Bewegung(Ändern Sie das aktuelle Verzeichnis) change directory
mkdir Ein Verzeichnis erstellen make directory
touch Datei erstellen, Zeitstempel aktualisieren ??
mv Dateien und Verzeichnisse verschieben move
cp Dateien und Verzeichnisse verschieben copy
rm Datei löschen remove
tar Dateikomprimierung und -komprimierung(Teer-Format) tape archives(← Ich wusste es zum ersten Mal)

・ ** cd **

# cd path:Gehe zum Pfad
arene@~/qiita $ ls
dir1  file1.txt  file2.txt  file3.txt
arene@~/qiita $ cd dir1/
arene@~/qiita/dir1 $ pwd
/home/arene/qiita/dir1

# cd:Wechseln Sie in das Home-Verzeichnis des angemeldeten Benutzers
arene@~/qiita/dir1 $ cd
arene@~ $ pwd
/home/arene

# cd -:Wechseln Sie zum vorherigen Verzeichnis
#  *Nützlich beim Wechseln zwischen zwei voneinander getrennten Verzeichnissen
#  * pushd,Sie können mit dem Befehl popd etwas Ähnliches tun, aber ich bevorzuge diesen
arene@~/qiita/dir1 $ pwd
/home/arene/qiita/dir1
arene@~/qiita/dir1 $ cd
arene@~ $ pwd
/home/arene

arene@~ $ cd -
arene@~/qiita/dir1 $ pwd
/home/arene/qiita/dir1

arene@~/qiita/dir1 $ cd -
arene@~ $ pwd
/home/arene

# cd ~/path:Wechseln Sie zum Pfad unter dem Home-Verzeichnis des angemeldeten Benutzers
#  * ~Wird als Ausgangsverzeichnis des angemeldeten Benutzers gelesen(=Tilda-Bereitstellung)
#  * ~Wenn es xxx ist, wird es als Ausgangsverzeichnis des xxx-Benutzers gelesen.
arene@~/qiita/dir1 $ cd ~/bin/
arene@~/bin $ pwd
/home/arene/bin

・ ** mkdir **

# mkdir directory_name:Erstellen Sie ein Verzeichnis(Nur eine Ebene)
# mkdir -p path/to/directory:Erstellen Sie sofort ein tiefes Verzeichnis
$ ls  #Zuerst nichts

$ mkdir dir1  #Erstellen Sie ein Verzeichnis
$ ls
dir1

$ mkdir aaa/bbb/ccc #Sofort eine tiefe Hierarchie erstellen-p Option erforderlich
mkdir: cannot create directory ‘aaa/bbb/ccc’: No such file or directory
$ ls
dir1
$ mkdir -p aaa/bbb/ccc
$ tree
.
|-- aaa
|   `-- bbb
|       `-- ccc
`-- dir1

· ** berühren **

# touch file_name:Erstellen Sie eine neue Datei oder aktualisieren Sie den Zeittyp auf die aktuelle Zeit
#  *Ursprünglich ist es ein Befehl, den Zeitstempel einer Datei zu aktualisieren.
#Wenn die angegebene Datei nicht vorhanden ist, wird sie neu erstellt, sodass der Eindruck entsteht, dass es sich ausschließlich um einen Befehl zur Dateierstellung handelt
$ touch file1  #Erstelle neu
$ ls -l
-rw-r--r-- 1 arene arene 0 Nov 10 10:10 file1
$ touch file1  #Nach 5 Minuten erneut ausführen->Der Zeitstempel wird aktualisiert
$ ls -l
-rw-r--r-- 1 arene arene 0 Nov 10 10:15 file1

# touch --date="YYYYMMDD hh:mm:ss" file_name:Aktualisieren Sie den Zeitstempel der Datei jederzeit
#  *Wird selten verwendet, um den zeitlichen Betrieb zu überprüfen
#  *Verwandte Befehle
#    date -s "YYYYMMDD hh:mm:ss":Änderung der Betriebssystemzeit(-s bedeutet gesetzt)
#    (--Wahrscheinlich der Ursprung der Datumsoption)
$ touch --date "20101010 10:10:10" file1
$ ls -l
total 0
-rw-r--r-- 1 arene arene 0 Oct 10  2010 file1

#Anwendung:
#In Kombination mit der Erweiterung der Klammern können Sie problemlos eine große Anzahl von Testdateien erstellen.
#Bereitstellung der Klammer(Seriennummer ver): {num1..num2}Ist eine Funktion von bash, die auf Seriennummern von num1 bis num2 erweitert wird
#                       (Aufzählung ver ist der nächste Abschnitt(mv)Sehen)
$ touch file{1..3}.txt # -> touch file1.txt file2.txt file3.Auf txt erweitert
$ ls
file1  file2.txt  file3.txt

M ** mv **

# mv source/path destination/path:Dateien und Verzeichnisse verschieben
# mv filename_before filename_after:umbenennen
#  *Das Umbenennen und Verschieben von Dateien ist für die Betriebssystemverwaltung nahezu identisch
#  *Wenn die Bestätigung laut ist-Option f hinzufügen(f: force /Achten Sie auf fehlerhafte Bedienung!)
$ tree
.
|-- dir1
|-- dir2
`-- file1

$ mv file1 dir1  #Bewegung
$ tree
.
|-- dir1
|   `-- file1
`-- dir2

$ mv dir1/file1 dir1/file1.txt  #umbenennen
$ tree
.
|-- dir1
|   `-- file1.txt
`-- dir2

#Anwendung:
#Abhängig von der Verzeichnisstruktur kann es in Kombination mit der Erweiterung der Klammer kurz beschrieben werden.
#Bereitstellung der Klammer(Aufzählung ver): cmd {aaa,bbb,ccc}Die Bash-Funktion wurde auf cmd aaa bbb ccc erweitert
#* Setzen Sie ein Leerzeichen{aaa, bbb, ccc}Sei vorsichtig um nicht
$ tree
.
|-- dir1
|   `-- file1.txt
`-- dir2

$ mv dir{1,2}/file1.txt # mv dir1/file1.txt dir2/file1.Auf txt erweitert
$ tree
.
|-- dir1
`-- dir2
    `-- file1.txt

#Anwendung 2:
#cd nach mv!$Anschließend können Sie die Datei reibungslos an das Ziel verschieben
#  *In Bash!$Wird bis zum letzten Argument des zuletzt ausgeführten Befehls erweitert
#  * !$Ist!-1$Alias von.!-2$In diesem Fall wird es auf das letzte Argument des Befehls erweitert, der zuvor zweimal ausgeführt wurde.
#  * !Stellt die Erweiterung des Befehlsverlaufs dar.$Ist das gleiche Bild wie der reguläre Ausdruck, der das letzte Argument ist
#  * !Ich mag die Befehle des Systems nicht wirklich, weil sie schwarze Magie sind
#    mv -> cd !$Ich erinnerte mich daran, weil es sehr bequem zu bedienen ist.(Gleiches gilt für cp)
#  * mv -> ls -> cd !-2$Mir geht es auch gut
arene@~/qiita $ ls
dir1  file1
arene@~/qiita $ mv file1 dir1/a/b/c/d/e/f/g/
arene@~/qiita $ cd !$   # !$Ist das letzte Argument des vorherigen Befehls=a/b/c/d/e/f/g/
cd dir1/a/b/c/d/e/f/g/  # !Wenn Sie einen Systembefehl verwenden, wird das Erweiterungsergebnis in der Standardausgabe angezeigt.
arene@~/qiita/dir1/a/b/c/d/e/f/g $ ls
file1

Detaillierte Informationen zur Verlaufserweiterung: https://mseeeen.msen.jp/bash-history-expansion/


・ ** cp **

# cp -r source/path destination/path:Kopie von Dateien und Verzeichnissen
#  * -r:Rekursiv unter Verzeichnis kopieren(Ursprung: recursive)
#  * -f:Zwangskopie ohne Bestätigung(Ursprung: force)  <-Achten Sie auf fehlerhafte Bedienung!
#  * -p:Behalten Sie die Berechtigungen vor und nach dem Kopieren bei(Ursprung: permission)
#  *Ich füge immer r hinzu(Es tut nicht weh, wenn es eine andere gibt, und es ist mühsam, je nach Verzeichnis oder Datei unterschiedliche Optionen zu verwenden.)
#  *f ist eine Gruppe, die sich im Grunde nicht verbindet, weil sie möglicherweise einen fehlerhaften Betrieb am Wasserrand stoppt
#  *Achten Sie auf das Vorhandensein oder Fehlen von p in Situationen, in denen Berechtigungen wichtig sind(Eine Gruppe, die normalerweise von Hand trägt)
#  *Ich benutze auch oft den ähnlichen Befehl scp.
#Sie können Dateien und Verzeichnisse über das Netzwerk kopieren(Das Format ist das gleiche wie bei der Alternative)
$ tree
.
|-- dir1
|   `-- file1
`-- dir2

$ cp dir1/file1 dir2  #Kopieren Sie die Datei in einen anderen Ordner
$ tree
.
|-- dir1
|   `-- file1
`-- dir2
    `-- file1

$ cp dir1/file1 dir2/file2  #Kopieren Sie die Datei beim Umbenennen in einen anderen Ordner
$ tree
.
|-- dir1
|   `-- file1
`-- dir2
    |-- file1
    `-- file2

#Anwendung:
#In Kombination mit der Erweiterung der Klammern kann die Erstellung von Sicherungsdateien usw. kurz beschrieben werden
#Bereitstellung der Klammer(Aufzählung ver): cmd {aaa,bbb,ccc}Die Bash-Funktion wurde auf cmd aaa bbb ccc erweitert
$ ls
important_file
$ cp important_file{,.bak}  # cp important_file important_file.Erweitert, um zu backen
$ ls
important_file  important_file.bak

・ ** rm **

# rm -f file_name:Datei löschen
# rm -rf directory_name:Verzeichnis löschen
#  * -f:Zwangskopie ohne Bestätigung(Ursprung: force)
#  * -r:Rekursiv unter Verzeichnissen löschen(Ursprung: recursive)
#  *Wenn Sie es im Gegensatz zu Windows löschen, können Sie es nicht wiederherstellen. Seien Sie also vorsichtig
#  *Versehentlich "rm-rf /Löscht das gesamte System einschließlich des Betriebssystems
#Strg in Eile+Ich habe bei C angehalten, kann aber nicht richtig arbeiten, da die grundlegende Befehlsausführungsdatei gelöscht wurde.!
#    ...Es wird so sein.(Vor langer Zeit tat es die Person auf dem nächsten Platz)
#  *Rm im Shell-Skript-rf /${DIR_PATH}Ich schrieb${DIR_PATH}Ist ein leeres Zeichen
#    「rm -rf /Es kann üblich sein zu sagen.
#    (Stellen Sie im Shell-Skript ein, um einen solchen Unfall zu verhindern-Es ist besser, u hinzuzufügen(Siehe den Link unten))
$ ls  #Ausgangszustand
dir1  dir2  dir3  file1.txt  file2.txt  file3.txt

$ rm -f file1.txt  #Löschen Sie durch Angabe des Dateinamens
$ ls
dir1  dir2  dir3  file2.txt  file3.txt

$ rm -f *.txt  #Platzhalter(*)Löschen Sie alle txt-Dateien mit
$ ls
dir1  dir2  dir3

$ rm -f dir1  #Das Verzeichnis kann ohne die Option r nicht gelöscht werden
rm: cannot remove 'dir1': Is a directory

$ rm -rf dir1  #Löschen Sie durch Angabe des Verzeichnisnamens
$ ls
dir2  dir3

$ rm -rf dir*  #Platzhalter(*)Massenlöschung mit
$ ls
$ 

Nebenbei: setze -eu beim Schreiben eines Shell-Skripts


・ ** Teer **

# tar -czvf xxx.tgz file1 file2 dir1 :Kompression(file1 file2 dir1 archivierte komprimierte Datei xxx.Erstellen Sie tgz)
# tar -tzvf xxx.tgz:In komprimierten Dateien enthaltene Dateinamen anzeigen(=Bereitstellungstest)
# tar -xzvf xxx.tgz:Einsatz
#  *Teeroptionen sind sehr verwirrend
#    ...Ich denke jedoch, dass die oben genannten drei für die normale Arbeit ausreichen
#  * c(create), t(test), x(extract) +Denken Sie daran, zvf
#  *Archivierung und Komprimierung sind unterschiedliche Ereignisse.
#Im Archiv werden mehrere Dateien zu einer zusammengefasst. Die Komprimierung reduziert die Dateigröße.
$ ls  #Ausgangszustand
dir1  dir2  file1.txt  file2.txt

$ tar czvf something.tgz dir* file*  #Kompression
dir1/
dir2/
file1.txt
file2.txt
$ ls
dir1  dir2  file1.txt  file2.txt  something.tgz

$ rm -rf dir* file*  #Löschen Sie die Originaldatei einmal
$ ls
something.tgz

$ tar tzvf something.tgz  #Siehe nur den Inhalt
drwxr-xr-x arene/arene       0 2019-11-12 00:31 dir1/
drwxr-xr-x arene/arene       0 2019-11-12 00:30 dir2/
-rw-r--r-- arene/arene       0 2019-11-12 01:00 file1.txt
-rw-r--r-- arene/arene       0 2019-11-12 01:00 file2.txt
$ ls
something.tgz

$ tar xzvf something.tgz  #Einsatz
dir1/
dir1/file1.txt
dir2/
file1.txt
file2.txt
$ ls
dir1  dir2  file1.txt  file2.txt  something.tgz

#Beiseite:
#Obwohl Teer komprimiert und dekomprimiert werden kann, kann es einen Exit-Status ungleich Null zurückgeben.
# (ex.Wenn der Zeitstempel der Datei in der zukünftigen Zeit liegt)
#Nehmen Sie den Endstatus von tar mit einem Shell-Skript, setzen Sie-Seien Sie vorsichtig, wenn e

Textverarbeitung (Filterbefehl)

Der wahre Nervenkitzel von Linux, die Textverarbeitung. Bevor wir mit der Befehlsbeschreibung fortfahren, werfen wir einen Blick auf die Textverarbeitung.

Deshalb Textverarbeitung!

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
cat Kombinieren Sie Dateiinhalt und Ausgabe concatenate(Beitreten)
wc Zählen Sie die Anzahl der Wörter und Zeilen word count
head Geben Sie n Zeilen von Anfang an aus head(führen)
tail N Zeilen vom Ende ausgeben tail(Ende)
sort Nach Zeile sortieren sort
uniq Vermeiden Sie Doppelarbeit unique
grep Textsuche global regular expression print
sed String-Ersatz stream editor
awk Unix traditionelle Programmiersprache Initialen von 3 Entwicklern
xargs Konvertieren Sie die Standardeingabe in Befehlszeilenargumente execute arguments?
less Zeigen Sie die Standardeingabe wie einen Editor an less is more(Aufwärtskompatibilität mit dem Befehl more)
>, >>(umleiten) Schreiben Sie eine Standardeingabe in eine Datei

・ ** Katze **

# cat file1:Geben Sie den Inhalt von Datei1 in die Standardausgabe aus
# cat file1 file2:Geben Sie den Inhalt von Datei1 in die Standardausgabe aus->Geben Sie den Inhalt von Datei2 in die Standardausgabe aus
#  *Verwende 1:Zeigen Sie einige Zeilen mit schreibgeschützten Dateien an
#  *Verwenden Sie 2:Überprüfen Sie mehrere Protokolldateien gleichzeitig
#  *Wird häufig als Ausgangspunkt für die Filterung verwendet
$ cat .gitignore  #Speichern Sie eine einzelne Datei
.DS_Store
node_modules
/dist

$ ls
access.log  error1.log  error2.log
$ cat error*.log  # error1.log und error2.Überprüfen Sie die Protokolle zusammen
2019/09/14 22:40:33 [emerg] 9723#9723: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/default:45
2019/09/14 22:42:24 [notice] 9777#9777: signal process started
2019/09/14 22:49:23 [notice] 9975#9975: signal process started
2019/09/14 22:49:23 [error] 9975#9975: open() "/run/nginx.pid" failed (2: No such file or directory)
2019/09/14 22:56:00 [notice] 10309#10309: signal process started
2019/09/14 22:56:10 [notice] 10312#10312: signal process started
2019/09/14 22:56:10 [error] 10312#10312: open() "/run/nginx.pid" failed (2: No such file or directory)
2019/09/14 22:56:22 [notice] 10318#10318: signal process started
2019/09/14 22:56:22 [error] 10318#10318: open() "/run/nginx.pid" failed (2: No such file or directory)
2019/12/07 21:49:50 [notice] 1499#1499: signal process started
2019/12/07 21:49:50 [error] 1499#1499: open() "/run/nginx.pid" failed (2: No such file or directory)
2019/12/07 21:51:19 [emerg] 1777#1777: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/default:45

· ** Toilette **

# wc -l file1:Zählen Sie die Anzahl der Zeilen in Datei1(Anzahl der Zeilen+Der Dateiname wird angezeigt)
# cat file1 | wc -l:Zählen Sie die Anzahl der Zeilen in Datei1(Es wird nur die Anzahl der Zeilen angezeigt)
#  * -l:Zählen Sie die Anzahl der Zeilen(Ursprung: line)
#  * -w:Zählen Sie die Anzahl der Wörter(Ursprung: word)
#  * -c:Zählen Sie die Anzahl der Bytes(Ursprung: char? /Es scheint, dass es c ist, weil es eine Option war, die in der Zeit gemacht wurde, als es 1 Byte pro Zeichen war)
#  *Ehrlich-Ich habe nur l verwendet(Die Anzahl der Bytes oder ls ist ausreichend)
#  *Einfach und ehrlich-Ich habe nur l verwendet(Für die Anzahl der Bytes reicht ls aus)
#  *Bei der Verwendung aus einem Programm ist der Dateiname ein Hindernis, also cat| wc -Ich denke, es gibt viele Fälle, in denen ich verwendet werde
$ ls
access.log  error1.log  error2.log
$ wc -l error1.log  #Zeilenanzahl(1)
7 error1.log
$ wc -l error2.log  #Zeilenanzahl(2)
5 error2.log
$ wc -l error*.log  #Zählen Sie die Anzahl der Zeilen in mehreren Dateien, indem Sie einen Platzhalter angeben
   7 error1.log
   5 error2.log
  12 total
$ cat error*.log | wc -l  # error1.log und error2.Zählen Sie die Anzahl der Zeilen nach dem Kombinieren von Protokollen
12

#Anwendung:Zählen Sie einfach die Anzahl der Schritte
$ ls
dist    src    node_modules    package.json    public    tests
$ find src/ -type f | xargs cat | wc -l  #Zählen Sie die Gesamtzahl der Zeilen in allen Dateien unter src
271
#Kommentar
#  * find src/ -type f:Geben Sie eine Liste der Dateien unter src aus
#  * cmd1 | cmd2:Führen Sie cmd2 aus, indem Sie den von cmd1 ausgegebenen Inhalt als Standardeingabe als Standardeingabe empfangen
#  * cmd1 | xargs cmd2:Führen Sie cmd2 aus, indem Sie den von cmd1 ausgegebenen Inhalt als Standardausgabe als "Befehlszeilenargumente" empfangen.
#  * find | xargs cat:Kombinieren Sie alle Dateien unter src, die nach Suchen durchsucht und ausgegeben werden, mit der Standardausgabe
#  * find | xargs cat | wc -l:Zählen Sie die Anzahl der Zeilen aller Dateien unter src, die nach find durchsucht wurden
#  *Siehe auch find und xargs

· ** Kopf **

# head -n 3 file1:Geben Sie die ersten 3 Zeilen von Datei1 aus
#  *Ich benutze es nicht so oft wie ich sage, aber ich werde es einführen, weil es ein Befehl gepaart mit tail ist, den ich als nächstes einführen werde
#  *Verwende 1:Überprüfen Sie nur den Anfang schwerer Dateien
#  *Verwenden Sie 2:Holen Sie sich nur die Kopfzeile der Datei und verwenden Sie sie aus dem Programm
$ cat file1.txt
1 aaa AAA
2 bbb BBB
3 ccc CCC
4 ddd DDD
5 eee EEE
6 fff FFF
7 ggg GGG
8 hhh HHH
9 iii III
10 jjj JJJ
11 kkk KKK
12 lll LLL
13 mmm MMM

$ head -n 3 file1.txt
1 aaa AAA
2 bbb BBB
3 ccc CCC

・ ** Schwanz **

# tail -n 3 file1:Geben Sie die letzten 3 Zeilen von Datei1 aus
#  *Verwende 1:Sehen Sie nur das Ende der schweren Protokolldatei
#  *Apropos Schwanz, der nächste Schwanz-Hauptsächlich wie man f benutzt
$ cat file1.txt
1 aaa AAA
2 bbb BBB
3 ccc CCC
4 ddd DDD
5 eee EEE
6 fff FFF
7 ggg GGG
8 hhh HHH
9 iii III
10 jjj JJJ
11 kkk KKK
12 lll LLL
13 mmm MMM

$ tail -n 3 file1.txt
11 kkk KKK
12 lll LLL
13 mmm MMM


# tail -f error.log: error.Überwachen Sie das Protokoll und geben Sie aktualisierte Inhalte aus(Ursprung: feed?)
#  *Großer Erfolg bei der Protokollbestätigung(Da es sich um die Endausgabe handelt, wird das neueste Protokoll ausgegeben)
#  * tail -Es ist beliebt, Dateiaktualisierungen von f zu überwachen"Schwanz"Sagen(Ich habe es an verschiedenen Orten gehört)
#  *Beenden Sie die Protokolldatei und richten Sie ein Netz ein(Bei Bedarf auch mit grep eingrenzen)
#    ->Reproduzieren Sie den Defekt
#    ->Stellen Sie das Protokoll fest, das bei Auftreten eines Problems ausgegeben wurde
#Wie benutzt man.
$ tail -f error.log  #Protokollüberwachung
-> Ctrl+Fehler bis zum Stopp durch C..Warten Sie weiter auf Protokollaktualisierungen
-> error.Wenn das Protokoll aktualisiert wird, werden die aktualisierten Inhalte unverändert ausgegeben

$ tail -f error.log | grep 500  #Überwachen Sie nur Protokolle einschließlich 500
-> Ctrl+Fehler bis zum Stopp durch C..Warten Sie weiter auf Protokollaktualisierungen
-> error.Ausgabe, wenn das Protokoll mit 500 aktualisiert wird

・ ** sort, uniq **

# sort file1:Datei1 nach Zeile sortieren
# uniq file1:Entfernen Sie doppelte Zeilen in Datei1
# cat file1 | sort | uniq:Sortieren Sie Datei1, um doppelte Arbeit zu vermeiden
#  *Da sort und uniq ein Satz sind, werde ich sie zusammen vorstellen
#  * sort ->Die Reihenfolge von uniq ist wichtig(Siehe Beispiel unten)
#  *Die Originaldatei ändert sich nicht(Allgemeine Eigenschaften von Filterbefehlen)
#
#  *sort ist-Umgekehrte Sortierung nach r,-Zufällige Sortierung mit R, eine Vielzahl von Optionen
#  * ls -Sortieren Sie die Ausführungsergebnisse von l in der Reihenfolge der Dateigröße, z
#Sie können auch sortieren, indem Sie sich auf eine bestimmte Spalte konzentrieren(In diesem Fall ls-Sie können mit lS gehen)
#  *Aber ehrlich gesagt erinnere ich mich nicht
#  *Wenn Sie komplizierte Dinge tun möchten, die nicht auf das Sortieren beschränkt sind, sollten Sie eine normale Programmiersprache verwenden
#    (Ich denke, dass es ausreicht, es in einem einfachen Fall zu verwenden, beispielsweise um doppelte Zeilen aus der vorliegenden CSV-Datei zu entfernen)
$ cat not_sorted_and_not_unique.txt
1 aaa AAA
3 ccc CCC
2 bbb BBB
3 ccc CCC
2 bbb BBB
1 aaa AAA
3 ccc CCC

$ cat not_sorted_and_not_unique.txt | sort
1 aaa AAA
1 aaa AAA
2 bbb BBB
2 bbb BBB
3 ccc CCC
3 ccc CCC
3 ccc CCC

$ cat not_sorted_and_not_unique.txt | sort | uniq
1 aaa AAA
2 bbb BBB
3 ccc CCC

$ cat not_sorted_and_not_unique.txt | uniq | sort  # sort ->Wenn Sie uniq umkehren, erhalten Sie nicht das erwartete Ergebnis
1 aaa AAA
1 aaa AAA
2 bbb BBB
2 bbb BBB
3 ccc CCC
3 ccc CCC
3 ccc CCC

#Kleine Geschichte:Zufällige Generierung
$ echo {1..65535} | sed 's/ /\n/g' | sort -R | head -n 1
11828
#Kommentar
#  * echo {1..65535}: "1 2 3 4 5 (Unterlassung) 65535"Generieren Sie a(Stichwort:Bereitstellung der Klammer(Über))
#  * sed 's/ /\n/g':Ersetzen Sie Leerzeichen durch Zeilenumbrüche
#  * sort -R: Zufällige Sortierung nach Zeilen
#  * head -n 1: Nur die erste Zeile anzeigen
#  *Es dauert ungefähr 1 Sekunde und ist nicht praktisch
#  * sort -Ich war ein wenig glücklich, R zum ersten Mal zu kennen und schrieb es
#  *Ich denke jedoch, dass der Spaß an Filterbefehlen darin besteht, dass Sie Befehle auf diese Weise verbinden und je nach Einfallsreichtum verschiedene Dinge tun können.
#    (Es wurde so genannt, dass ich von seinem Charme besessen war"Shell Entertainer")

Für diejenigen, die mehr wissen möchten: Sortierbefehl, Grundlagen und Anwendungen und Traps


・ ** grep **

# grep ERROR *.log:Extrahieren Sie nur Zeilen mit ERROR aus Dateien mit dem Erweiterungsprotokoll
# cat error.log | grep ERROR: error.Extrahieren Sie nur Zeilen mit ERROR aus dem Protokoll
# cat error.log | grep -2 ERROR: error.Geben Sie die Zeile mit ERROR und die beiden Zeilen davor und danach aus dem Protokoll aus
# cat error.log | grep -e ERROR -e WARN: error.Extrahieren Sie Zeilen mit ERROR oder WARN aus dem Protokoll
# cat error.log | grep ERROR | grep -v 400: error.Extrahieren Sie die Zeilen mit ERROR aus dem Protokoll und zeigen Sie das Ergebnis des Ausschlusses der Zeilen mit 400 an
#  * -e:Geben Sie mehrere Schlüsselwörter mit UND-Bedingung an(Ursprung: ??Wahrscheinlich nicht, aber persönlich French et(=and)Ich interpretiere es als)
#  * -v:Beseitigen Sie Zeilen mit Schlüsselwörtern(Ursprung: verbose??)
#  *Großer Erfolg in der mittleren und späten Phase eines Liners aufgrund der hohen Nachfrage nach eingegrenztem Text
#  *Sie können auch reguläre Ausdrücke verwenden
#  *Persönlich Katze|Verwenden Sie nur das Grep-Format(Alle Filterbefehle sind hirntot und Katze|Fraktion zu cmd)
$ cat file1.txt
1 aaa AAA
2 bbb BBB
3 ccc CCC
4 ddd DDD
5 eee EEE
6 fff FFF
7 ggg GGG
8 hhh HHH
9 iii III
10 jjj JJJ
11 kkk KKK
12 lll LLL
13 mmm MMM

$ cat file1.txt | grep -e CCC -e JJJ
3 ccc CCC
10 jjj JJJ

$ cat file1.txt | grep -2 -e CCC -e JJJ
1 aaa AAA
2 bbb BBB
3 ccc CCC
4 ddd DDD
5 eee EEE
--
8 hhh HHH
9 iii III
10 jjj JJJ
11 kkk KKK
12 lll LLL

$ cat file1.txt | grep -2 -e CCC -e JJJ | grep -v -e AAA -e BBB -e KKK -e LLL
3 ccc CCC
4 ddd DDD
5 eee EEE
--
8 hhh HHH
9 iii III
10 jjj JJJ

・ ** sed **

# cat file1 | sed 's/BEFORE/AFTER/g':Ersetzen Sie BEFORE in Datei1 sofort durch AFTER
#  * s/BEFORE/AFTER/g:VORHER durch NACH ersetzen(Ursprung:Ersatz und global?)
#  * s/BEFORE/AFTER/:Ersetzen Sie das erste VORHER durch NACH
#  *sogar mit vi:%s/BEFORE/AFTER/Es ist bequem zu merken, weil Sie alle auf einmal durch g ersetzen können
#    (Anwendungsbeispiel: git rebase -i HEAD~5 ->vi öffnet sich-> :%s/pick/s/Fassen Sie die letzten 5 Commits mit g zusammen)
#  *Es kann nicht nur ein Stapel ersetzt, sondern auch gelöscht und teilweise ersetzt werden, und es können reguläre Ausdrücke verwendet werden.
#  *Die Originaldatei ändert sich nicht(-Es ist auch möglich, mit der Option i zu überschreiben)
#  *Das einzige, was ich schnell verwenden kann, ist das Ersetzen von Stapeln, aber das Bild, das Shell-Entertainer von sed und awk voll ausnutzen
$ cat typo.txt  #Falsch geschriebene Dateien
Hello Wolrd!
Wolrd Wide Web

$ cat typo.txt | sed 's/Wolrd/World/g'  #Rechtschreibfehler korrigieren
Hello World!
World Wide Web

$ cat typo.txt | sed 's/Wolrd/World/g' > typo_fixed.txt  #Speichern Sie das korrigierte Ergebnis in einer anderen Datei
$ cat typo_fixed.txt
Hello World!
World Wide Web

Für diejenigen, die mehr wissen wollen: Wie schreibe ich in diesem Fall mit sed?


・ ** awk **

# cmd1 | awk '{print $5}':Im Ausführungsergebnis von cmd1 wird nur die 5. Spalte durch Leerzeichen getrennt angezeigt
# cmd1 | awk -F ',' '{print $5}':Zeigen Sie im Ausführungsergebnis von cmd1 nur die 5. durch Kommas getrennte Spalte an
#  *King of One Liner(Persönliche Meinung)
#  *Sie können if, for und Variablen verwenden, und die Klassifizierung ist eher eine Programmiersprache als ein Befehl.
#  *Wenn Sie die n-te Spalte des Trennzeichens 〇〇 extrahieren möchten, ist dies eine verwirrende Sprache
#  *Im Kontext von awk"n-te Spalte"Nicht"n-tes Feld"Anruf
#  *Ich kann nicht schreiben, aber ich kann nur die Atmosphäre lesen
#    (In einem älteren Fall, auf den ich in der Vergangenheit gestoßen bin, habe ich TSVs in ihrem eigenen Format gesehen, die mit awk analysiert und in XML konvertiert wurden.)
#    (↑ Ich bin nicht in meiner aktuellen Position!)
#  *Es wird selten verwendet, daher kann es gut sein, es als Kultur zu lesen.
$ ls -l
total 0
drwxr-xr-x 1 arene arene 4096 Feb  4 22:40 abc
drwxr-xr-x 1 arene arene 4096 Feb  4 22:40 def
-rw-r--r-- 1 arene arene  134 Feb  4 22:50 file1.txt

arene@~/qiita/src $ ls -l | awk '{print $5}'  #Nur die 5. Spalte anzeigen

4096
4096
134

・ ** xargs **

# cmd1 | xargs cmd2:Empfangen Sie das Ausführungsergebnis von cmd1 als Befehlszeilenargument und führen Sie cmd2 aus
#  * cmd1 |Während cmd2 das Ausführungsergebnis von cmd1 als "Standardeingabe" empfängt und cmd2 ausführt
#    cmd1 |xargs cmd2 empfängt das Ausführungsergebnis von cmd1 als "Befehlszeilenargument" und führt cmd2 aus
#  *Mein persönlicher Lieblingsbefehl(Wenn Sie es gut verwenden, werden Sie sich schlauer fühlen)
#  *Ich bin daran gewöhnt, aber ich habe den Eindruck, dass es einige Anforderungen gibt, die ich ohne diesen einen Liner nicht erfüllen kann.
#  *Wird oft nach dem Fund verwendet(Stapeloperation für mehrere Dateien)
#  *Es ist ein fortgeschrittener Befehl, und ich konnte kein leicht verständliches und praktisches Beispiel finden.
$ ls -1
src
test
$ ls -1 | echo  #Das Echo akzeptiert keine Standardeingabe, daher wird nichts ausgegeben

$ ls -1 | xargs echo  #Kann angezeigt werden, indem es als Argument mit xargs übergeben wird
src test
$ ls -1 | xargs -n 1 echo  # -Wenn n 1 hinzugefügt wird, wird es Zeile für Zeile übergeben, sodass es Zeile für Zeile wiedergegeben wird.
src
test


#Anwendung:Batch-Umbenennung mehrerer Dateien
# find -type f dir_name | xargs -I{} mv {} {}.bak: dir_Für alle Dateien unter Namen.Bak hinzufügen
#  *In diesem Beispiel sollte es einfacher sein, den Befehl zum Umbenennen zu verwenden(Ich benutze es nicht persönlich, weil ich mit dem Umbenennen nicht vertraut bin)
#  *Wenn Sie die empfangene Zeichenfolge mehrmals verwenden möchten, z. B. mv oder cp-I{}Verwenden Sie Optionen
$ tree  #Ausgangszustand
.
|-- src
|   |-- main.js
|   `-- sub.js
`-- test
    |-- main.js
    `-- sub.js

$ find test/ -type f  #Zeigen Sie die relativen Pfade der zu testenden Dateien mit find an
test/main.js
test/sub.js

$ find test/ -type f | xargs -I{} mv {} {}.test
  #Erweitert auf folgenden Inhalt(-I{}Und danach{}Wird durch den Eingabeinhalt ersetzt)
  # mv test/main.js test/main.js.bak
  # mv test/sub.js test/sub.js.bak
$ tree
.
|-- src
|   |-- main.js
|   `-- sub.js
`-- test
    |-- main.js.test
    `-- sub.js.test

$ find test/ -type f | sed 's/js.test/js/g' | xargs -I{} mv {}.test {} #Rückgängig machen
  # test/main.js.Test mit Sed Test/main.Durch js ersetzen und an mv übergeben
$ tree
.
|-- src
|   |-- main.js
|   `-- sub.js
`-- test
    |-- main.js
    `-- sub.js

· ** weniger **

# less file1:Datei anzeigen1(read only)
# cat file1 | cmd1 | cmd2 | less:Zeigen Sie das Ergebnis der Verarbeitung von Datei1 auf verschiedene Arten an
#  *Befehle, die vorerst verwendet werden, wenn Sie etwas sehen möchten, ohne es an das Terminal auszugeben
#  *Aufwärtskompatibilität ähnlicher Befehle mehr(less is more!)
#  *Lesen Sie nur so sicher und sicher(Ich möchte es nicht ändern, aber hören wir auf, es auf vi anzusehen)
#  *Einige Schlüsselbindungen von vi können verwendet werden
#    gg:Gehen Sie zur ersten Zeile
#    G:Gehen Sie zur letzten Zeile
#    /pattern:Suche in Datei mit Muster
#    q:schließen
#  *F zum Schwanz-Sie können das Gleiche wie f tun, und im Gegensatz zum Namen ist es ziemlich raffiniert
(Ein Beispiel finden Sie unter dem folgenden Link)

Für diejenigen, die mehr wissen wollen:


・ **>, >> (Weiterleiten) **

# cmd1 >> file1:Schreiben Sie das Ausführungsergebnis von cmd1 in Datei1(Nachtrag)
# cmd1 > file1:Schreiben Sie das Ausführungsergebnis von cmd1 in Datei1(Überschreiben)
$ cat file1.txt  #Vor der Umleitung
1 aaa AAA
2 bbb BBB
3 ccc CCC

$ echo "4 ddd DDD" >> file1.txt  #umleiten(Nachtrag)
$ cat file1.txt
1 aaa AAA
2 bbb BBB
3 ccc CCC
4 ddd DDD

$ echo "4 ddd DDD" > file1.txt  #umleiten(Überschreiben)
$ cat file1.txt
4 ddd DDD



# echo "echo login!" >> ~/.bashrc:Einstellungen am Ende von bashrc hinzufügen * Nicht wirklich treffen!
# * .bashrc ist eine Bash-Konfigurationsdatei
# * >>Nicht>Wenn Sie verwenden, wird es überschrieben und die Einstellungen werden gelöscht. Seien Sie also vorsichtig
# *Verwenden Sie Weiterleitungen, wenn Sie Konfigurationsdateien in Verfahrenshandbüchern und Skripten zur Automatisierung der Umgebungskonstruktion bearbeiten
#   (Beim manuellen Erstellen der Umgebung>>Wann>のうっかりミスが怖いため、普通にファイルを開いた方がいいWann思う)



# something.sh > log.txt: something.Ausführungsergebnis von sh(Standardausgabe)Protokollausgabe
# something.sh > log.txt 2>&1: something.Ausführungsergebnis von sh(Standardausgabe+Standardfehlerausgabe)Protokollausgabe
# something.sh >/dev/null 2>&1: something.Geben Sie das Ausführungsergebnis von sh nirgendwo aus
$ cat something.sh  #Ein Shell-Skript, das eine Nachricht an die Standardausgabe in der ersten Zeile und die Standardfehlerausgabe in der zweiten Zeile ausgibt.
#!/bin/bash
echo standard output
syntax-error!!!! # standard error

$ ./something.sh > log.txt  #Wenn Sie einfach umleiten, wird nur die Standardausgabe umgeleitet
./something.sh: line 3: syntax-error!!!!: command not found
$ cat log.txt
standard output

$ ./something.sh > log.txt 2>&1  # 2>&Addiere 1, um beide umzuleiten
$ cat log.txt
standard output
./something.sh: line 3: syntax-error!!!!: command not found

$ ./something.sh >/dev/null 2>&1  #Stellen Sie sicher, dass nichts herauskommt(Der sogenannte "Throw to Fat Null")
$
$ ./something.sh 2>&1 >/dev/null  #Wenn Sie es umkehren, wird es nicht funktionieren.
./something.sh: line 3: syntax-error!!!!: command not found
#Kommentar
#  * 1:Standardausgabe 2:Standardfehlerausgabe
#  * /dev/null:Papierkorb-ähnliche, abgrundtiefe, spezielle leere Datei, die vom Betriebssystem erstellt wurde
#  * > log.txt ist 1>log.Wie bei txt wird die Standardausgabe protokolliert
#  * > log.txt 2>&1 ist 2(Standardfehlerausgabe)1(Standardausgabe)Ziel(=Logdatei)Gegenüber
#  * 2>&1 > log.Der Grund, warum txt nicht funktioniert, ist, dass ↓ 2 nacheinander ausgeführt werden
#    (1) 2>&1:Standardfehlerausgabe, Standardausgabe(stdout)Wechseln zu
#    (2) > log.txt2:Direkte Standardausgabe in die Protokolldatei
#    =>Infolgedessen wird die Standardfehlerausgabe in die Standardausgabe und die Standardausgabe in die Protokolldatei ausgegeben.

Für diejenigen, die mehr wissen wollen: Erinnern wir uns daran. Bedeutung von command> / dev / null 2> & 1


Rund um die Installation

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
apt, yum Befehlsinstallation Advanced Package Tool, Yellowdog Updater Modified
sudo Befehl mit Root-Rechten ausführen superuser do(substitute user do)
su Benutzerwechsel substitute user
echo Anzeige der Zeichenkette echo
env Umgebungsvariablen anzeigen environment
which, whereis Suchen Sie den Speicherort des Befehls which, where is
source, . Reflexion der Einstellungen(Führen Sie den Dateiinhalt in der aktuellen Shell aus) source
chmod Ändern Sie die Datei- und Verzeichnisberechtigungen change mode
chown Ändern Sie den Eigentümer von Dateien und Verzeichnissen change owner
systemctl Service starten, stoppen usw. system control

Apt ** passend, lecker **

# apt install git:Git installieren(Debian-basiertes Betriebssystem wie Ubuntu)
# yum install git:Git installieren(Betriebssystem der Red Hat-Serie wie CentOS)
#  *Wird oft im sudo apt ~ -Format ausgeführt
#  *Wenn Sie es ausführen und eine Meldung wie "Berechtigung verweigert" oder "Unzureichende Berechtigung" angezeigt wird, wird sudo vorerst angezeigt(Verschiedenes)
#    (Oder chown,Stellen Sie die Berechtigungen mit chmod richtig ein)
$ sudo apt install git
(Viele Nachrichten kommen heraus, werden aber weggelassen)

Sud ** Sudo **

# sudo cmd1:Führen Sie cmd1 als Root-Benutzer aus
#  *Wird häufig unter Ubuntu verwendet(Ubuntu folgt aufgrund der Idee, dass Sie nicht als root arbeiten sollten)
#  *In CentOS werde ich beim nächsten su zum Root-Benutzer wechseln, daher benutze ich es nicht viel
#  *Für einige Benutzer ist dies möglicherweise nicht möglich
#    (Einschränkung der Benutzer, die in einer sicheren Umgebung sudo können)
$ sudo vi /etc/hosts  #Bearbeiten Sie die Konfigurationsdatei, die nur root ändern kann
[sudo] password for arene:
$

・ ** su **

# su user1:Wechseln Sie zu Benutzer1(Umgebungsvariablen erben die aktuellen)
# su - user1:Wechseln Sie zu Benutzer1(Verwerfen Sie die aktuelle Umgebungsvariable und verwenden Sie die Standardumgebungsvariable user1)
# su -:Wechseln Sie zum Root-Benutzer(Verwerfen Sie die aktuelle Umgebungsvariable und verwenden Sie die Standardumgebungsvariable des Root-Benutzers)
#  *Ich setze immer Bindestriche
#    (Absicht, unerwartete Fehler durch Erben von Umgebungsvariablen zu vermeiden)
#  *So auf CentOS-Orakel oder su-Ich habe früher Postgres benutzt
$ su -
Password:
#

・ ** Echo **

# echo abc:Ausgabezeichenfolge abc
# echo $PATH:Ausgabeumgebungsvariable PATH
#  *Verwende 1:Ausgabeverwendung und Fehlermeldung im Shell-Skript
#  *Verwenden Sie 2:Umgebungsvariablen überprüfen
#  *Wenn Sie einen Befehl ausführen und "Befehl nicht gefunden" erhalten, befindet er sich normalerweise nicht im PATH. Lassen Sie uns also zuerst den PATH durchgehen.
$ echo abc
abc
$ echo $LANG
UTF-8

Ergänzende Informationen: Was ist eine Umgebungsvariable beim Durchlaufen des Pfads


・ ** env **

# env | less:Überprüfen Sie die Umgebungsvariablen
#  *Sie können es nur mit env sehen, aber wenn es viele Umgebungsvariablen gibt, wird es abgeschnitten. Überprüfen Sie es daher mit weniger
#    ->Mit weniger offen/PFAD"PATH"Sie können mit suchen

・ ** welche, wo ist **

# which cmd:Zeigen Sie, wo sich das cmd selbst befindet
# whereis cmd:Eine kleine detaillierte Version davon
#  *Um ehrlich zu sein, benutze ich nur welche
#  *Ich habe mehrere Versionen von Node installiert, aber wo ist die aktuelle, die jetzt funktioniert??
#Ich möchte unnötige Befehle löschen, aber wo ist dieser Typ??
#Oder verwenden Sie es in solchen Fällen
$ which ls
/bin/ls

$ ls
access.log  error1.log  error2.log  src

$ /bin/ls
access.log  error1.log  error2.log  src

· ** Quelle, .**

# source ~/.bashrc: .Bashrc neu laden
# . ~/.bashrc:Gleich wie ↑(.Ist ein Alias für die Quelle)
#  *100 Fälle zum erneuten Laden nach dem Ändern der Shell-Konfigurationsdatei%(Selbstprüfung)
#  *Derzeit können Sie auch ein Shell-Skript ausführen
#
#  *source ist ein Befehl, der die durch das Argument in der "aktuellen Shell" angegebene Datei ausführt.
#  *Wenn ein Befehl oder ein Shell-Skript normal ausgeführt wird, wird der Prozess in "einer anderen neu generierten Shell" ausgeführt.
#    (Aktuelle Shell-Variablen sind jetzt sauber)
#  *Auf der anderen Seite, da Quellprozesse in der aktuellen Shell,
#Umgebungsvariablen und Aliaseinstellungen, die während der Verarbeitung geändert wurden, werden auch nach Abschluss der Ausführung vererbt.(=Die Einstellungen werden wiedergegeben)
$ env | grep MY_ENV  # before

$ echo "export MY_ENV=abc" >> ~/.bashrc  #Fügen Sie die entsprechenden Umgebungsvariablen hinzu
$ env | grep MY_ENV  #Noch nicht reflektiert

$ . ~/.bashrc  #Laden Sie bashrc mit source neu
$ env | grep MY_ENV  #Die in ↑ eingestellten Umgebungsvariablen werden wiedergegeben
MY_ENV=abc

Ch ** chmod **

# chmod 755 *.sh:Erteilen Sie der Datei sh die Ausführungsberechtigung
# chmod 644 *.js:Stellen Sie die js-Datei so ein, dass sie normal gelesen und geschrieben werden kann
#  *Die mysteriösen Zahlen machen auch Sinn, aber ehrlich gesagt benutze ich nur 644 und 755
#  *Sie können w oder r oder Buchstaben setzen, aber ich bin eine Zahlensekte
#  *Wenn Sie das Programm ausführen und "Berechtigung verweigert" erhalten, haben Sie normalerweise keine Ausführungsberechtigung, sodass Sie es in 755 ändern können.
#
#Erklären
#  *Das Anordnen von drei Zahlen wie 755 gibt die folgenden drei an
#    [Autorität des Eigentümers][Berechtigungen für den Besitz einer Gruppe][Privilegien für andere]
#  *Die Bedeutungen der Zahlen sind wie folgt
#     0:Keine Autorität
#     1:Ausführungsberechtigung
#     2:Schreibberechtigung
#     4:Leseberechtigung
#    (7=1+2+4 ist alles in Ordnung, 6=2+Lesen und schreiben Sie nur um 4 und so weiter)
#  *So ist 755"Der Besitzer kann alles, andere können nur lesen und schreiben"Rahmen
#644 ist"Besitzer können lesen und schreiben, andere können nur lesen"Rahmen
$ ls -l  # before
total 0
-rw-r--r-- 1 arene arene 0 Feb  8 23:26 abc

$ chmod 755 abc  #Ausführungsberechtigung erteilen
$ ls -l
total 0
-rwxr-xr-x 1 arene arene 0 Feb  8 23:26 abc

$ chmod 644 abc  #Ausführungsberechtigung beseitigen
$ ls -l
total 0
-rw-r--r-- 1 arene arene 0 Feb  8 23:26 abc



#Anwendung:Massenwechsel
# find dir1 -type f | grep sh$ | xargs chmod 755:Erteilen Sie allen shs unter dir1 die Ausführungsberechtigung
#  *Suchen Sie den relativen Pfad der Datei mit find->Verwenden Sie grep, um Dateien zu finden, die auf sh enden->Chmod die Datei, die Sie suchen
#  * find dir1 -type f -name "*.sh" |Gleiches gilt für xargs chmod 755

Für diejenigen, die mehr wissen möchten: Überprüfung und Änderung der Linux-Berechtigung (chmod) (für Super-Anfänger)


・ ** chown **

# chown user1:group1 file1:Eigentümer von Datei1 ändern(Benutzer1,Setzen Sie group auf group1)
# find dir1 | xargs chown user1:group1:Ändern Sie den Eigentümer aller Dateien unter dir1 auf einmal
#  *Überprüfen Sie, ob die Benutzerliste cat ist/etc/passwd
#    (Da es sich bei der ersten Hälfte um einen Benutzer mit verschiedenen hinzugefügten Middleware handelt, reicht es normalerweise aus, die letzten Zeilen zu betrachten)
#  *Überprüfen Sie die Gruppenliste mit Katze/etc/group (Das gleiche wie oben)
@@TODO:Konkretes Beispiel(Ich hatte keine Umgebung mit mehreren Benutzern)

・ ** systemctl **

#  *Ein Dienst ist ein Programm, das im Hintergrund ausgeführt wird, z. B. eine Firewall oder ein Webserver.
#    (Wird auch Dämon genannt)
#  *systemctl ist ein Befehl zum Starten und Stoppen von Diensten
#  *Diese Art von Befehl ist je nach Umgebung sehr unterschiedlich, aber ab 2020 ist die neue Umgebung systemctl
#  *Älteres Linux ist in den Befehl service und den Befehl chkconfig unterteilt
#  *Es scheint nicht auf dem Mac zu sein(Seit ich vor kurzem mein Debüt gemacht habe, habe ich keine Kenntnisse)
#  *Natürlich können Sie auch Ihr eigenes Programm im Dienst registrieren.

#Starten, stoppen, aktuellen Status überprüfen
#  *Beachten Sie, dass es beim Neustart des Betriebssystems beendet wird, wenn Sie es gerade starten.
#  *Der Dienstname kann mit der Tabulatortaste vervollständigt werden
systemctl status service1      #Überprüfen Sie den Status von service1(Überprüfen Sie, ob Sie leben oder tot sind)
systemctl start service1       #Starten Sie service1
systemctl stop service1        #Beenden Sie service1
systemctl restart service1     #Starten Sie service1 neu(Halt->Anlaufen)

#Einstellungen für den automatischen Start
#  * enabled:Startet automatisch, wenn das Betriebssystem gestartet wird
#  * disabled:Startet nicht automatisch, wenn das Betriebssystem gestartet wird
systemctl list-unit-files      #Liste der Dienstleistungen+Zeigen Sie an, ob automatisch gestartet werden soll
systemctl enable service1      #Lassen Sie service1 automatisch starten
systemctl disable service1     #Verhindern Sie, dass service1 automatisch gestartet wird
systemctl is-enabled service1  #Überprüfen Sie, ob service1 so eingestellt ist, dass es automatisch startet

Rund um das Betriebssystem

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
date Überprüfen Sie die Uhrzeit und stellen Sie sie ein date
df Überprüfen Sie den freien Speicherplatz disk free
du Überprüfen Sie die Größe des Verzeichnisses disk usuage
free Überprüfen Sie die Speicherverfügbarkeit free
top Überprüfen Sie die CPU- und Speicherauslastung ??
ps Überprüfen Sie die Prozessinformationen process status
kill Stoppen Sie den Prozess, indem Sie die PID angeben(Senden Sie ein Signal) kill
pkill Stoppen Sie alle Prozesse mit dem angegebenen Prozessnamen process kill?
pgrep Zeigen Sie die PID des Prozesses mit dem angegebenen Prozessnamen an pid grep
netstat Netzwerkstatus anzeigen network status

· ** Datum **

# date:Aktuelle Uhrzeit anzeigen
# date '+%Y%m%d %H:%M:%S': YYYYMMDD hh:mm:Zeigt die aktuelle Uhrzeit im SS-Format an
# date -s "YYYYMMDD hh:mm:ss":Ändern Sie die Betriebssystemzeit(Ursprung: set)
#  *Ich benutze es gelegentlich und wie ist das Format jedes Mal, wenn ich es benutze??Derjenige, der wird
#  * date -s "YYYYMMDD hh:mm:ss"(Änderung der Betriebssystemzeit)Und berühren-d "YYYYMMDD hh:mm:ss"(Ändern Sie den Zeitstempel der Datei)
#Ist das gleiche, also versuche ich mich daran zu erinnern und jedes Mal zu suchen.
$ date
Sun Feb  9 11:00:41 JST 2020

$ date '+%Y%m%d %H:%M:%S'
20200209 11:01:13

$ date -s "20200209 11:02:00"
Sun Feb  9 11:02:00 JST 2020

Für diejenigen, die mehr wissen möchten: Häufiges Datumsspezifikationsmuster des Datumsbefehls


・ ** df **

# df -h:Festplattennutzung/Freier Speicherplatz mit Einheiten anzeigen(Ursprung: human readable)
# df:Festplattennutzung/Freier Speicherplatz anzeigen
#  *Grundsätzlich-Siehe in h
#  *h rundet den Wert ab. Wenn Sie also den genauen Wert wissen möchten, drücken Sie ihn ohne Optionen
#  *Sie können auch sehen, was das Dateisystem ist und wo es gemountet ist
#  *↓ wird unter Ubuntu der WSL gesehen, es gibt also ein C-Laufwerk, es ist ein wenig seltsam
@@TODO:Ersetzen Sie durch das Ausführungsergebnis auf einfachem Ubuntu
$ df -h  # Use%Was%Benutzt du es? Wie viel verwendet wird, verwendet Avail, ist es kostenlos
Filesystem      Size  Used Avail Use% Mounted on
rootfs          230G  199G   31G  87% /
none            230G  199G   31G  87% /dev
none            230G  199G   31G  87% /run
none            230G  199G   31G  87% /run/lock
none            230G  199G   31G  87% /run/shm
none            230G  199G   31G  87% /run/user
cgroup          230G  199G   31G  87% /sys/fs/cgroup
C:\             230G  199G   31G  87% /mnt/c
E:\             223G  141G   83G  63% /mnt/e

$ df
Filesystem     1K-blocks      Used Available Use% Mounted on
rootfs         240312316 207873316  32439000  87% /
none           240312316 207873316  32439000  87% /dev
none           240312316 207873316  32439000  87% /run
none           240312316 207873316  32439000  87% /run/lock
none           240312316 207873316  32439000  87% /run/shm
none           240312316 207873316  32439000  87% /run/user
cgroup         240312316 207873316  32439000  87% /sys/fs/cgroup
C:\            240312316 207873316  32439000  87% /mnt/c
E:\            233322492 146962124  86360368  63% /mnt/e

・ ** du **

# du -h:Zeigen Sie die Kapazität jedes Verzeichnisses mit einer Einheit an(Ursprung: human readable)
# du:Zeigen Sie die Kapazität jedes Verzeichnisses an
#  *Ich kann die Größe des Verzeichnisses in ls nicht sehen
#  *Verwenden Sie du, wenn Sie die tatsächliche Größe anzeigen möchten
#  *Wenn es viele Unterverzeichnisse gibt und es schwer zu erkennen ist, grep oder weniger entsprechend
$ ls -lh  #Mit ls ist das Verzeichnis einheitlich 4.Bei 0K angezeigt, kenne ich die tatsächliche Größe nicht
total 0
drwxr-xr-x 1 arene arene 4.0K Oct 14 08:53 dist
-rw-r--r-- 1 arene arene    0 Jan  1 10:10 file1.txt
drwxr-xr-x 1 arene arene 4.0K Oct 14 09:11 src

$ du -h  #Wenn Sie sich df ansehen, können Sie die tatsächliche Größe sehen
0       ./dist/css
8.0K    ./dist/img
888K    ./dist/js
908K    ./dist
8.0K    ./src/assets
4.0K    ./src/components
4.0K    ./src/pages
16K     ./src
924K    .

· ** frei **

# free -h:Anzeigen der Speichernutzung mit Einheiten(Ursprung: human readable)
# free:Speichernutzung anzeigen
#  *Es scheint, dass die angezeigten Inhalte je nach Betriebssystem leicht unterschiedlich sind(Neuer Typ wird verfügbar)
#  *Obwohl ich es vorgestellt habe, bin ich nicht zuversichtlich, dass es in Ordnung ist, wenn Sie es so betrachten. ..
#    (Wenn frei und verfügbar bis zu einem gewissen Grad groß sind, gibt es kein Problem, Erkennung)
#  *Wenn Sie wissen, wie Sie feststellen können, ob Ihnen der Speicher ausgeht, hinterlassen Sie bitte einen Kommentar.
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.9G        6.8G        886M         17M        223M        980M
Swap:           24G        1.1G         22G
$ free
              total        used        free      shared  buff/cache   available
Mem:        8263508     7099428      934728       17720      229352     1030348
Swap:      25165824     1149132    24016692

· ** oben **

# top:Überprüfen Sie die CPU- und Speicherauslastung
#  *Standardmäßig werden Prozesse mit hoher CPU-Auslastung ausgeführt
#  * %CPU ist CPU-Auslastung. Sie können sehen, welcher Prozess überlastet ist.
#  *Ich sehe oft den Lastdurchschnitt oben rechts
#Hoher Lastzustand, wenn der Wert die Anzahl der CPU-Kerne überschreitet(Bei zwei Kernen ist 2 oder mehr eine hohe Last)
#Die Anzahl der Kerne in der CPU ist cat/proc/Kann mit cpuinfo bestätigt werden
#  *Selbst wenn der Lastdurchschnitt 3 mit 4 Kernen beträgt
#Es ist möglich, dass sich die Aufgaben auf Kern1 konzentrieren und sich nur Kern1 in einem Hochlastzustand befindet.
#Wenn der Lastdurchschnitt von ↑ kleiner als die Anzahl der Kerne ist, ist dies in Ordnung, aber nur eine Richtlinie
$ top
top - 12:06:17 up 87 days, 11:55,  0 users,  load average: 0.52, 0.58, 0.59
Tasks:  13 total,   1 running,  12 sleeping,   0 stopped,   0 zombie
%Cpu(s): 10.2 us,  8.0 sy,  0.0 ni, 81.7 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st
KiB Mem :  8263508 total,  1821072 free,  6213084 used,   229352 buff/cache
KiB Swap: 25165824 total, 23985072 free,  1180752 used.  1916692 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5310 arene     20   0   17620   2052   1516 R   1.0  0.0   0:00.18 top
    1 root      20   0    8896    172    136 S   0.0  0.0   0:00.21 init
   74 root      20   0   19464    504    448 S   0.0  0.0   0:00.01 sshd
 1862 root      20   0   57560    344    312 S   0.0  0.0   0:00.01 nginx
 1863 www-data  20   0   58204   1036    904 S   0.0  0.0   0:00.19 nginx
 1865 www-data  20   0   58204   1036    920 S   0.0  0.0   0:00.07 nginx
 1868 www-data  20   0   58204   1036    904 S   0.0  0.0   0:00.01 nginx
 1869 www-data  20   0   58204    948    856 S   0.0  0.0   0:00.00 nginx
 1920 root      20   0    8904    224    176 S   0.0  0.0   0:00.01 init
 1921 arene     20   0   17332   4032   3896 S   0.0  0.0   0:00.32 bash
 1996 root      20   0   20220   4204   4056 S   0.0  0.1   0:00.17 sshd
 2069 arene     20   0   20488   2092   1956 S   0.0  0.0   0:05.02 sshd
 2070 arene     20   0   18828   5628   5520 S   0.0  0.1   0:11.96 bash

Für diejenigen, die mehr wissen wollen: ・ Anzeigen des Straßendurchschnitts in der Multi-Core-Ära


Ps ** ps **

# ps -ef:Detaillierte Informationen zu allen Prozessen anzeigen(Ursprung: every, full)
#  *Verwende 1:Überprüfen Sie, ob ein Prozess aktiv ist(Der Webserver wird ausgeführt?)
#  *Verwenden Sie 2:PID eines Prozesses(Prozess ID)prüfen-> kill ${PID}
#  *Ich bin sicher, Sie können viele andere Dinge sehen, aber ich weiß nicht viel
#  *Aus historischen Gründen sind die Optionen in zwei Systeme unterteilt, was sehr kompliziert ist, aber ich-Verwenden Sie nur ef
$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2019 ?        00:00:00 /init ro
root        74     1  0  2019 ?        00:00:00 /usr/sbin/sshd
root      1862     1  0  2019 ?        00:00:00 nginx:
www-data  1863  1862  0  2019 ?        00:00:00 nginx:
www-data  1865  1862  0  2019 ?        00:00:00 nginx:
www-data  1868  1862  0  2019 ?        00:00:00 nginx:
www-data  1869  1862  0  2019 ?        00:00:00 nginx:
root      1920     1  0 Feb04 tty1     00:00:00 /init ro
arene     1921  1920  0 Feb04 tty1     00:00:00 -bash
root      1996    74  0 Feb04 ?        00:00:00 sshd: arene [priv]
arene     2069  1996  0 Feb04 ?        00:00:04 sshd: arene@pts/0
arene     2070  2069  0 Feb04 pts/0    00:00:11 -bash
arene     5090  2070  0 11:13 pts/0    00:00:00 ps -ef

・ ** töten **

# kill 123:Beenden Sie den Prozess mit der Prozess-ID 123(SIGTERM senden)
# kill -9 123:Beenden Sie einen Prozess mit der Prozess-ID 123 ohne Frage(9 ist die Signalnummer von SIGKILL)
# kill -KILL 123: -Gleich wie 9
#  *Wie der Name schon sagt, werden 99 Fälle verwendet, um den Prozess abzubrechen.%
#  *Um genau zu sein, ist es jedoch ein Befehl, der ein beliebiges Signal an einen bestimmten Prozess sendet.
#Standardmäßig SIGTERM(Ursprung: terminate)Sendet
#  *Ein Signal ist ein Signal, das das Betriebssystem an jeden Prozess sendet, um die Interrupt-Verarbeitung anzuweisen.
#    (Zum Beispiel Strg+SIGINT beim Beenden eines Befehls in C.(Ursprung: interrupt)Wurde gesendet.
#Da es sich um eine Interrupt-Verarbeitung handelt, kann sogar ein Programm, das sich unendlich wiederholt, beendet werden.)
#  * SIGKILL(9)Ist das stärkste Signal, und wenn Sie dieses senden, können Sie den Prozess beenden, ohne Fragen zu stellen.
#  *SIGKILL ist ziemlich rau, also ist es ein letzter Ausweg. Lassen Sie uns versuchen, ohne Markenzeichen zu töten.
#    (Mit SIGKILL ist sogar der Beendigungsprozess nicht zulässig und wird unterbrochen, sodass in seltenen Fällen beim nächsten Start Unannehmlichkeiten auftreten können.)
$ ps -ef | grep eternal_loop | grep -v grep  #Finden Sie die PID eines richtig geschriebenen Endlosschleifenprogramms heraus
arene     5500  2070  0 13:00 pts/0    00:00:00 ./eternal_loop

$ kill 5500  #Geben Sie pid an und töten Sie
[1]+  Terminated              ./eternal_loop
$ ps -ef | grep eternal_loop | grep -v grep  #Bestätigen Sie, dass es getötet wurde
$

Mehr Informationen: Grundlagen des Linux-Signals SIGNAL Man Page


・ ** pkill **

# pkill process_name_prefix: process_name_Beenden Sie alle Prozesse beginnend mit dem Präfix
# pkill -9 process_name_prefix: process_name_Beenden Sie alle Prozesse beginnend mit dem Präfix, ohne Fragen zu stellen
#  *Signale finden Sie im vorherigen Abschnitt(kill)Sehen
#  *Alle Treffer werden getötet, also ps vor der Ausführung-ef | grep process_name_mit Präfix
#Es ist besser, den Zielprozess zu überprüfen
$ ps -ef | grep eternal_loop | grep -v grep  #Es gibt viele Prozesse, die eine unbegrenzte Schleife bilden
arene     5558  2070  0 13:13 pts/0    00:00:00 ./eternal_loop
arene     5562  2070  0 13:13 pts/0    00:00:00 ./eternal_loop2
arene     5566  2070  0 13:13 pts/0    00:00:00 ./eternal_loop3
arene     5570  2070  0 13:13 pts/0    00:00:00 ./_bak_eternal_loop

$ pkill eternal_loop  #Töte alles auf einmal mit pkill
[1]   Terminated              ./eternal_loop
[2]   Terminated              ./eternal_loop2
[3]-  Terminated              ./eternal_loop3

$ ps -ef | grep eternal_loop | grep -v grep  #Drei mit dem Präfix übereinstimmende Übereinstimmungen wurden getötet
arene     5570  2070  0 13:13 pts/0    00:00:00 ./_bak_eternal_loop

・ ** pgrep **

# pgrep process_name_prefix: process_name_Ausgabe-PID aller Prozesse beginnend mit dem Präfix
#  *Wird hauptsächlich verwendet, wenn Sie PID dynamisch extrahieren und mit einem Shell-Skript oder einem Liner verwenden möchten
#  * $()(Befehl ersetzen)Oft kombiniert mit oder xargs
$ ps -ef | grep eternal_loop | grep -v grep  #Viele Endlosschleifenprozesse
arene     5570  2070  0 13:13 pts/0    00:00:00 ./_bak_eternal_loop
arene     5590  2070  0 13:18 pts/0    00:00:00 ./eternal_loop
arene     5594  2070  0 13:18 pts/0    00:00:00 ./eternal_loop2
arene     5598  2070  0 13:18 pts/0    00:00:00 ./eternal_loop3

$ pgrep eternal_loop  #Prozess-ID extrahieren
5590
5594
5598
$ pgrep eternal_loop | xargs kill  #Töte den extrahierten Prozess
[5]   Terminated              ./eternal_loop
[6]-  Terminated              ./eternal_loop2
[7]+  Terminated              ./eternal_loop3

$ ps -ef | grep eternal_loop | grep -v grep  #Todesbestätigung
arene     5570  2070  0 13:13 pts/0    00:00:00 ./_bak_eternal_loop

・ ** netstat **

# netstat -anp| less:Überprüfen Sie den Netzwerkstatus
#  * -a:Alle Verbindungen anzeigen(Ursprung: all)
#  * -n:Zeigen Sie die IP-Adresse und die Portnummer ohne Namensauflösung an(Ursprung: number?)
#  * -p:Prozess-ID anzeigen(Ursprung: process)
#  *Sie können viele Dinge sehen, aber ich-Verwenden Sie nur anp
#  * LISTENING, ESTABLISHED, TIME_Es ist schön, den Status jedes Ports wie WAIT überprüfen zu können
@@TODO:Fügen Sie das Ausführungsergebnis in Ubuntu ein(Ich konnte es in meiner WSL-Umgebung nicht sehen)

Weitere Informationen: Beherrschen des Befehls "netstat" zum Überprüfen des Status der TCP / IP-Kommunikation


Andere

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
find Suchen Sie nach Dateien und Verzeichnissen(Pfadausgabe) find
history Siehe Befehlsverlauf history
diff Differenzbestätigung difference
jobs Überprüfen Sie die laufenden Jobs jobs
bg Verschieben Sie den angegebenen Job in den Hintergrund background
fg Verschieben Sie den angegebenen Job in den Vordergrund foreground
& Hintergrundausführung
&&,
$(), <() Befehl ersetzen, Prozess ersetzen
$? Überprüfen Sie den Endstatus des vorherigen Befehls
for Schleifenverarbeitung

· ** finden **

# find dir1 -type f:Zeigen Sie eine Liste der Dateien unter dir1 an
# find dir1 -type f -name "*.js":Zeigen Sie eine Liste der JS-Dateien unter dir1 an
# find dir1 -type d:Zeigen Sie eine Liste der Verzeichnisse unter dir1 an
#  *Mit zahlreichen Optionen können Sie bis zu n Ebenen suchen und nur Dateien durchsuchen, die älter als ein bestimmtes Datum und eine bestimmte Uhrzeit sind
#Sie können nach Dateien mit bestimmten Berechtigungen usw. suchen.
#  *Aber ich vergesse es, damit ich so schnell schreiben kann
#  *Im Gegensatz zu ls wird der Dateipfad ausgegeben. Suchen Sie also xxx| xargs rm -Geeignet für Batch-Betrieb wie HF
$ find src/ -type f
src/App.vue
src/assets/logo.png
src/components/HelloWorld.vue

$ find src/ -type f -name "*.png "
src/assets/logo.png

$ find src/ -type d
src/
src/assets
src/components

Für diejenigen, die mehr wissen möchten: [12 mit dem Befehl find zu merkende Verwendungen](https://orebibou.com/2015/03/find%E3%82%B3%E3%83%9E%E3%83%B3 % E3% 83% 89% E3% 81% A7% E8% A6% 9A% E3% 81% 88% E3% 81% A6% E3% 81% 8A% E3% 81% 8D% E3% 81% 9F% E3 % 81% 84% E4% BD% BF% E3% 81% 84% E6% 96% B912% E5% 80% 8B /)


· ** Geschichte **

# history | less:Überprüfen Sie den Befehlsverlauf
#  *Verwende 1:Ich habe eine unordentliche Umgebung aufgebaut und das Ergebnis ist gut gelaufen, aber was ist schließlich passiert??Herausfinden
#  *Verwenden Sie 2:Untersuchen Sie die Verwendung des mysteriösen Servers, der zum ersten Mal eintritt
#  *Verwenden Sie 3:Suchen Sie diesen Befehl, den Sie häufig verwenden, aber nicht erinnern können, weil er so lang ist
#  *Die Umgebungsvariable HISTSIZE kann die Anzahl der zu haltenden Verlaufsdaten angeben
#Der Standardwert ist normalerweise klein. Wenn Sie ihn also erhöhen, können Sie glücklich sein, wenn etwas passiert.
#  *Wenn Sie das Kennwort für die SSH- oder DB-Verbindung direkt eingeben, können Sie den Verlauf anzeigen und werden herausgezogen. Seien Sie also vorsichtig.
#  *Strg, wenn Sie den Befehl nur wiederverwenden möchten+R wird empfohlen.
#Das Hinzufügen von fzf erleichtert die Verwendung erheblich.
$ history | tail
 3325  find src/ -type f
 3326  find src/ -type d
 3327  find src/ -type f -name "*.png "
 3328  find src/ -type d | xargs ls
 3329  find src/ -type d | xargs ls-l
 3330  find src/ -type d | xargs ls -l
 3331  find src/ -type d | xargs -n 1 ls -l
 3332  find src/ -type d -ls
 3333  find src/ -type f -ls
 3334  history | tail

$ echo $HISTSIZE
10000

Diff ** diff **

# diff file1 file2:Zeigen Sie den Unterschied zwischen Datei1 und Datei2
# diff -r dir1 dir2:Zeigen Sie den Unterschied zwischen dir1 und dir2(Überprüfen Sie auch die Unterverzeichnisse)
#  *Es wird häufig verwendet, wenn Sie überprüfen möchten, ob es einen Unterschied in der Umgebungskonstruktion usw. gibt.
#  *Wenn Sie den Differenzinhalt fest vergleichen möchten, sollten Sie WinMerge oder Meld oder die Software für den Differenzvergleich verwenden.
$ ls
dist src
$ cp -pr src/ src2  #Kopieren Sie und sehen Sie den Unterschied=>Kein Unterschied(Natürlich)
$ diff -r src src2

$ echo "abc" >> src2/App.vue  #Machen Sie absichtlich einen Unterschied und sehen Sie den Unterschied
$ diff -r src src2
diff -r src/App.vue src2/App.vue
17a18
> abc



#Erweiterte Version:Vergleichen Sie die sortierten Ergebnisse
$ cat unsort1.txt  #Eine Datei, in der 1 bis 5 zufällig angeordnet sind
1
5
2
4
3

$ cat unsort2.txt  #Datei, in der 1 bis 5 zufällig angeordnet sind Teil 2
1
2
3
5
4

$ diff <(cat unsort1.txt | sort) <(cat unsort2.txt | sort)  #Kein Unterschied beim Vergleich der sortierten Ergebnisse
$
$ diff $(cat unsort1.txt | sort) $(cat unsort2.txt | sort)  #Ähnlich, aber Fehler beim Ersetzen des Befehls
diff: extra operand '3'
diff: Try 'diff --help' for more information.
#Kommentar
#  * <(cmd):Behandeln Sie das Ausführungsergebnis von cmd1 als Eingabe eines anderen Befehls(Prozess ersetzen)
#  * $(cmd):Erweitern Sie das Ausführungsergebnis von cmd1 als Zeichenfolge(Befehl ersetzen)
#  *Durch das Ersetzen von Prozessen können Sie die Ergebnisse des Sortierens von zwei Dateien in einem Liner vergleichen
#  *Wenn Sie den Prozessersatz nicht verwenden, wird er einmal in eine andere Datei ausgespuckt...Es ist ziemlich nervig, weil ich es tun werde
#  *Nützlich für CSV-Vergleiche usw.
#  * <()Wird als Datei behandelt, während$()Wird im Befehl als Zeichenfolge erweitert.
#Die Prozessersetzung eignet sich für Befehle, die eine Datei als Argument verwenden, z. B. diff.

・ ** Jobs, fg, bg **

# jobs:Zeigen Sie eine Liste der Jobs an, die im Hintergrund ausgeführt werden
# fg 1:Schalten Sie Job 1 auf Vordergrundausführung um
# bg 1:Schalten Sie Job 1 auf Hintergrundausführung um
#  *Wird verwendet, um ein Programm, das versehentlich im Hintergrund ausgeführt wurde, in den Vordergrund zurückzusetzen
#  *Der repräsentative Fall ist Strg mit vi+Wenn Sie Z drücken
#    (Strg beim Bearbeiten vi+Bei einigen Anfängern wird durch Drücken von Z der Job beendet und Sie wissen nicht, wo Sie sich befinden.
#Beruhigen Sie in einem solchen Fall die Arbeitsplätze->OK mit fg)
#  *Wenn Sie versehentlich das tun, was Sie normalerweise im Hintergrund tun sollten
#    Ctlr+Halt bei Z, Jobs->Sie können mit bg zur Hintergrundausführung wechseln
#    (...Aber immer Strg+Halten Sie bei C.&Ich habe es nicht verwendet, weil ich es erneut ausführen werde.)
$ ./eternal_loop1 &  #Ausführen eines Programms, das unbegrenzt im Hintergrund wiederholt wird
[1] 5906
$ ./eternal_loop2 &
[2] 5910
$ ps -ef | grep eternal_loop | grep -v grep
arene     5906  2070  0 18:29 pts/0    00:00:00 ./eternal_loop1
arene     5910  2070  0 18:29 pts/0    00:00:00 ./eternal_loop2

$ jobs  #Wenn Sie sich Jobs ansehen, sehen Sie, dass im Hintergrund zwei ausgeführt werden
[1]-  Running                 ./eternal_loop1 &
[2]+  Running                 ./eternal_loop2 &

$ fg 2  #Stellen Sie Job Nummer 2 in den Vordergrund
./eternal_loop2
^C  #Strg endet nicht in einer Endlosschleife+Beenden Sie mit C.

$ jobs  #Bestätigen Sie, dass Job Nummer 2 beendet wurde
[1]+  Running                 ./eternal_loop1 &
$ ps -ef | grep eternal_loop | grep -v grep
arene     5906  2070  0 18:29 pts/0    00:00:00 ./eternal_loop1

・ ** & (Hintergrundausführung) **

# cmd1:Führen Sie cmd1 im Vordergrund aus
# cmd1 &:Führen Sie cmd1 im Hintergrund aus
#  *Für schwere Stapelverarbeitung oder wenn Sie den Webserver vorübergehend ausführen möchten
#Bequem, um Befehle im Hintergrund auszuführen(Natürlich können Sie ein anderes Terminal starten.)
#  *Nächster&&Oder leiten Sie 2 um>&Leicht mit 1 zu verwechseln, aber anders
#  *Es bleibt nichts anderes übrig, als sich an das Symbolsystem hier zu gewöhnen
$ ./eternal_loop1 &  #Ausführen eines Programms, das unbegrenzt im Hintergrund wiederholt wird
[1] 6104

$ echo 123  #Da es im Hintergrund ausgeführt wurde, können andere Befehle verwendet werden.
123

&&, ||

# cmd1 && cmd2:Wenn cmd1 erfolgreich ist, führen Sie cmd2 aus(Wenn cmd1 fehlschlägt, endet es dort)
# cmd1 || cmd2:Wenn cmd1 fehlschlägt, führen Sie cmd2 aus(Wenn cmd1 erfolgreich ist, endet es dort)
#  *Verwende 1:Schreiben Sie eine kleine sequentielle Verarbeitung mit einem Liner
#  *Verwenden Sie 2: cmd1 || echo "error message"
#  *Ich sehe keine praktischen Beispiele, aber ich benutze sie ein wenig und sehe sie.
##Fälle, in denen beide erfolgreich sind
$ echo aaa && echo bbb
aaa
bbb
$ echo aaa || echo bbb
aaa

##Fälle, in denen beide fehlschlagen
$ echoooo aaa && echoooo bbb
echoooo: command not found
$ echoooo aaa || echoooo bbb
echoooo: command not found
echoooo: command not found

### - ** $ (), <() (Befehlsersetzung, Prozessersetzung) **
# echo ${var1}:Geben Sie den Inhalt der Variablen var1 aus(Variable Erweiterung)
# echo $(cmd1):Geben Sie das Ausführungsergebnis von cmd1 aus(Befehl ersetzen)
# echo `cmd1`:↑ fast das gleiche(Befehl ersetzen(Alte Notation))
# diff <(cmd1) <(cmd2):Geben Sie das Ausführungsergebnis von cmd1 und cmd2 aus(Prozess ersetzen)
#  * ${}Wann$()は混同しやすい。jsのtemplateリテラルWann同じ奴が変数置換
#  * $()Ist``Neue Notation.$(cmd1 $(cmd2))Das Merkmal ist, dass es einfach ist, wie zu nisten
#Oft kombiniert mit sich dynamisch ändernden Inhalten wie Datum oder pgrep.
#  * <()Ist ein Shell-Skript oder ein Einzeiler, wenn Sie eine temporäre Datei verwenden möchten.
#Katze und Diff,Kombinieren Sie dies mit Befehlen, die Dateiinhalte verwenden, z. B. mit einer Lesezeile.
$ cat lsByOption.sh  #Ich habe mir kein gutes Beispiel für einen Einzeiler ausgedacht, also habe ich ein schlampiges Shell-Skript vorbereitet.
#!/bin/bash
OPTION=$1
ls $(echo ${OPTION})  #Das erste Argument ist-Wenn l, ls-werde l

$ ls  #Führen Sie ls normal aus
lsByOption.sh  unsort1.txt  unsort2.txt

$ ./lsByOption.sh -l  # ls $(echo ${OPTION})Ist ls-werde l
total 0
-rwxr-xr-x 1 arene arene 45 Feb  9 19:44 lsByOption.sh
-rw-r--r-- 1 arene arene 10 Feb  9 19:29 unsort1.txt
-rw-r--r-- 1 arene arene 10 Feb  9 19:30 unsort2.txt

$ ./lsByOption.sh -al  # ls $(echo ${OPTION})Ist ls-werde al
total 0
drwxr-xr-x 1 arene arene 4096 Feb  9 19:44 .
drwxr-xr-x 1 arene arene 4096 Feb  9 19:28 ..
-rwxr-xr-x 1 arene arene   45 Feb  9 19:44 lsByOption.sh
-rw-r--r-- 1 arene arene   10 Feb  9 19:29 unsort1.txt
-rw-r--r-- 1 arene arene   10 Feb  9 19:30 unsort2.tx

Für diejenigen, die mehr wissen wollen:


・ ** $? ** **.

# echo $?:Zeigt den Endstatus des letzten Befehls an
#  *Wird verwendet, wenn abnormale Verarbeitung in ein Shell-Skript geschrieben wird?
#  *Ich habe es mit Schwung erwähnt, aber ich kann es nicht viel verwenden
$ echo 123  #OK Fall
123
$ echo $?
0

$ hdskds  #NG Fall
hdskds: command not found
$ echo $?
127

· ** zum **

# for i in {1..10} ; do cmd1; done:Wiederholen Sie cmd1 10 Mal
#  *Ich möchte es oft benutzen, aber wie habe ich es jedes Mal geschrieben, wenn ich es benutzt habe??Wird besorgt
#  *Ich habe es auf eine Linie gezwungen, um es zu einem Liner zu machen, aber wenn ich es richtig breche, wird es ↓
#    for i in {1..10} ;
#    do
#      cmd1;
#    done
#  * {1..10}:Bereitstellung der Klammer(Seriennummer ver):Erweitert auf 1 2 3 4 5 6 7 8 9 10
#  *stattdessen$(seq 10)Aber ok
$ for i in {1..10} ; do echo $i; done
1
2
3
4
5
6
7
8
9
10

Derjenige, der beschlossen hat, nicht zu schreiben

Ich benutze es oft, aber es ist wahrscheinlich außerhalb des Anwendungsbereichs, ich benutze es selten, aber ich weiß nicht wirklich viel Befehle, die ich aus Gründen wie ... Ich werde nur die Artikel auflisten.

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
vi Datei bearbeiten visual editor(visual interface
make Programm kompilieren make
curl Stellen Sie eine HTTP-Anfrage command url??
rsync Synchronisieren Sie Verzeichnisinhalte über das Netzwerk remote synchronizer
ssh-keygen Erstellen Sie private und öffentliche Schlüssel für ssh ssh key generator
npm Installieren Sie Knotenpakete usw. node package manager
git Benutze git(Verschiedenes) Dumm mit britischem Englisch-Slang<-Ich wusste es zum ersten Mal

Bonus

Ich benutze es überhaupt nicht, aber ich wollte es vorstellen, also habe ich es geschrieben. Es hat Spaß gemacht.

Befehlsname Was kann ich tun? Befehlsnameは何に由来している?
nice Passen Sie die Benutzerpriorität an
sl Zug kommt raus Gegenüber von ls

· ** nett **

# nice -n 20 cmd1:Führen Sie cmd1 mit Priorität 20 aus
#  *Jeder Linux-Benutzer hat eine Priorität von gutem Wert
#    -20(Höchste Priorität)~20(Niedrigste Priorität)
#  *Es kann verwendet werden, wenn Sie die Stapelverarbeitung mit hoher CPU-Auslastung in der Lückenzeit anderer Prozesse ausführen möchten.(Ich habe keine Erfahrung)
#  *Yutaka Takanos "Von der Wurzel/Ich habe aus dem Essaybuch "Message to" gelernt.
#Als Unix nach Japan kam, waren CPU-Ressourcen wertvoll
#Es scheint, dass der Root-Administrator den netten Wert erhöht hat, um dem schlechten Benutzer entgegenzuwirken, der eine schwere Verarbeitung durchführt.
#  *Ich weiß nicht, warum diese Episode ist, aber ich mag es wirklich
$ nice -n 20 ls
src dist

Referenz: [Nachricht von root an / (Amazon)](https://www.amazon.co.jp/root-%E3%83%AB%E3%83%BC%E3%83%88-%E3% 81% 8B% E3% 82% 89-% E3% 81% B8% E3% 81% AE% E3% 83% A1% E3% 83% 83% E3% 82% BB% E3% 83% BC% E3% 82 % B8% E2% 80% 95% E3% 82% B9% E3% 83% BC% E3% 83% 91% E3% 83% BC% E3% 83% A6% E3% 83% BC% E3% 82% B6 % E3% 83% BC% E3% 81% 8C% E8% A6% 8B% E3% 81% 9F% E3% 81% B2% E3% 81% A8% E3% 81% A8% E3% 82% B3% E3 % 83% B3% E3% 83% 94% E3% 83% A5% E3% 83% BC% E3% 82% BF / dp / 4756107869)


・ ** sl * Installation erforderlich **

Nach der Ausführung fährt der Zug zum Terminal. Wenn Sie Tippfehler machen, beruhigen wir uns, indem wir den Zug beobachten. (Es ist schön, viel Humor zu haben, wenn man Strg + C sorgfältig deaktiviert)

image.png

Für diejenigen, die mehr wissen wollen: Nutzlos bei der Arbeit! Linux Neta Command Collection


Schließlich

Befehlszeilenbedienung macht Spaß. Interessant ist auch die Geschichte rund um das Linux (Unix) -System. Wir hoffen, dass dieser Artikel Ihnen hilft, Ihre Interessen zu entdecken und zu erweitern.

Recommended Posts

Häufig verwendete Linux-Befehle
Häufig verwendete Linux-Befehle
Häufig verwendete Linux-Befehle
Häufig verwendete Linux-Befehle [Persönliches Memo]
[Linux] Häufig verwendete Linux-Befehle (Dateibetrieb)
Häufig verwendete Linux-Befehle (für Anfänger)
Liste der häufig verwendeten Linux-Befehle
[Linux] Häufig verwendete Linux-Befehle (Ordneroperation)
pyenv Häufig verwendete Befehle
Häufig verwendeter Befehl tmux
Häufig verwendeter Pip-Befehl
[Linux] Überprüfung häufig verwendeter Basisbefehle 2
[Linux] Überprüfung häufig verwendeter Basisbefehle
Linux-Befehle
Häufig verwendete Befehle in virtualenv
[Linux-Befehl] Ein Memorandum häufig verwendeter Befehle
Linux-Befehl
8 häufig verwendete Befehle in Python Django
[Anaconda3] Zusammenfassung häufig verwendeter Befehle
Netzwerk-Linux-Befehle
Verbalisieren Sie Linux-Befehle
Linux-Benutzerbefehle
Grundlegende LINUX-Befehle
Verschiedene Linux-Befehle
Zusammenfassung der häufig verwendeten Befehle von Django (Anfänger)
Zusammenfassung der häufig verwendeten Befehle in matplotlib
[Linux] Liste der in der Praxis verwendeten Linux-Befehle
[Linux] Gruppenbezogene Befehle
Linux-Befehle zum Erinnern
Zusammenfassung häufig verwendeter Befehle (mit kleinem Kommentar)
Eine Sammlung häufig verwendeter Befehle in der Serververwaltung
Zeigen Sie eine Liste häufig verwendeter Befehle in Zsh an
[Für Anfänger] Django Häufig verwendete Befehle und Referenzsammlung
Linux-Befehle und Frustration studieren
Häufig verwendete Unterpakete von SciPy
Python verwendete häufig Codefragmente
Grundkenntnisse in Linux und Grundbefehle
Behandeln Sie Daten in Linux-Bash-Befehlen
Klassifizieren Sie häufig verwendete Datei- / Ordner-Dialoge
[Linux Mint 20] Verschiedene WiFi-Bestätigungsbefehle
Praktische Tastenkombination für Linux-Befehle! !! !!
Linux
[Linux] Datei- und Verzeichnisoperationsbefehle
In GAE / P häufig verwendete Befehle
Versuchen Sie, Linux-Befehle zu kompilieren (Cross-Compilation-Praxis)
Zeichencode-bezogene Linux-Befehle
Über Linux-Befehle Super Basic Edition
Hinweis: Linux-Konzepte und Mindestbefehle
Verwenden Sie Linux-Befehle auf Android-Geräten