[LINUX] Verwenden Sie die Bash-Vervollständigung, um lange Befehle einzugeben, ohne den Menschen oder die Hilfe anzusehen

1. Verwenden Sie die Funktion zur Vervollständigung der Eingabe?

Viele Shells und Befehlsaufforderungen, einschließlich ** bash **, bieten ** Vervollständigung ** (Vervollständigung). Diese Funktion funktioniert unter Windows und wird von den meisten Benutzern verwendet.

Beispiel für die Vervollständigung des Dateinamens durch die Funktion zur Vervollständigung der Eingabe


$ ls
sample.txt  test1.txt  test2.txt  test3.txt
$ cat s[TAB]Tasteneingabe
$ cat sample.txt ★ Drücken Sie die TAB-Taste, um den übereinstimmenden Dateinamen zu vervollständigen

** Ab etwa RHEL6 (2010s-) kann es nicht nur für Dateinamen und Verzeichnisnamen, sondern auch für die Eingabe von Befehlsoptionen verwendet werden. ** </ font>

1-1. Voraussetzungen

  • Linux und MacOS

1-2. TL;DR

  • Ich habe die Eingabevervollständigungsfunktion verwendet, aber ich wusste nicht, dass sie für die Optionseingabe von Linux-Befehlen verwendet werden kann. Peinlich ... </ font>

2. Problem mit der Länge der systmctl-Option

Ich benutze die RHEL7-Serie seit einigen Jahren, aber ich benutze die RHEL5 / RHEL6-Serie schon lange. Das Verwirrende an RHEL7 ist, dass Sie den Befehl service oder den Befehl chkconfig nicht verwenden können (einige können mit kompatiblen Funktionen verwendet werden).

Da es sich um einen Befehl handelt, der häufig beim Aufbau und Betrieb von Systemen verwendet wird, handelt es sich in der Regel um "Was war" chkconfig --list "mit" systemctl "...".

** Die Funktion zur Vervollständigung der Eingabe der Befehlsoption ist in solchen Fällen hilfreich. ** ** **

Sie können eine Liste von Optionen anzeigen, indem Sie die "TAB-Taste" nach "systemctl" eingeben, wie unten gezeigt.

$ sudo systemctl [TAB]Tastatureingabe ★ TAB nach dem Einfügen von 1 Leerzeichen nach systemctl
add-requires           hybrid-sleep           reload-or-restart
add-wants              is-active              reload-or-try-restart
cancel                 is-enabled             rescue
cat                    is-failed              reset-failed
condreload             isolate                restart
condrestart            is-system-running      set-default
condstop               kexec                  set-environment
daemon-reexec          kill                   set-property
daemon-reload          link                   show
default                list-dependencies      show-environment
delete                 list-jobs              snapshot
disable                list-sockets           start
edit                   list-timers            status
emergency              list-unit-files        stop
enable                 list-units             suspend
exit                   mask                   switch-root
force-reload           poweroff               try-restart
get-default            preset                 unmask
halt                   reboot                 unset-environment
help                   reenable
hibernate              reload

Wenn die Liste angezeigt wird, ist dies diejenige. Geben Sie dann list-unit-files ein. Die Eingabe der "TAB-Taste" ist auch während der Eingabe der Option wirksam.

$ sudo systemctl list-unit-files ★list-unit-Die TAB-Vervollständigung funktioniert auch in der Mitte von Dateien

** Jetzt habe ich keine Angst vor "systemctl"! Hmm! ** ** **

3. Was ist Bash-Vervollständigung?

Bash-Vervollständigung ergänzt Befehlsoptionen, anstatt Datei- und Verzeichnisnamen zu vervollständigen. Wenn Sie "complete -p" eingeben und viele Zeilen angezeigt werden, können Sie davon ausgehen, dass es verfügbar ist.

3-1. Status jeder Distribution

Je nach Typ und Version der Linux-Distribution ist sie möglicherweise nicht im Standard-Repository enthalten.

  • ** RHEL6-Serie: ** EPEL-Repository
  • ** RHEL7-Serie oder höher: ** Standard-Repository
  • ** Ubuntu 18.04 LTS: ** Standard Repository

RHEL8-Serie


$ rpm -q bash-completion
bash-completion-2.7-5.el8.noarch

RHEL7-Serie


$  rpm -q bash-completion
bash-completion-2.1-6.el7.noarch

RHEL6-Serie


$ rpm -q bash-completion
package bash-completion is not installed

Ubuntu18.04LTS


$ dpkg -l bash-completion
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  bash-completio 1:2.8-1ubunt all          programmable completion for the b

Es ist ein bisschen alt, daher ist es subtil, ob es jetzt anwendbar ist, aber hier sind MacOS-Informationen.

3-2. Installation unter RHEL6 OS

Für RHEL 6, CentOS 6 und Oracle Linux 6 muss die Bash-Vervollständigung aus dem EPEL-Repository installiert werden. Die Vorgehensweise wird beschrieben.

  1. Stellen Sie sicher, dass das EPEL-Repository aktiviert ist. Es kann verwendet werden, wenn die Leitung vorhanden ist und wie folgt aktiviert ist.
$ yum repolist all | grep -i epel
epel                         Extra Packages for Enterprise Linux enabled: 12,586
  1. Aktivieren Sie in anderen als den oben genannten Fällen das EPEL-Repository je nach Situation.

** Wenn eine Leitung vorhanden, aber deaktiviert ist **

$ sudo yum-config-mangaer --enable epel

** Wenn es selbst keine Leitung gibt **

$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm -y
  1. Wenn es wie unten gezeigt unter "Verfügbare Pakete" angezeigt wird, ist es nicht installiert, aber im Repository vorhanden.
$ sudo yum list bash-completion
Loaded plugins: refresh-packagekit, security, ulninfo
Available Packages
bash-completion.noarch                          1:1.3-7.el6                          epel
  1. Nachdem Sie dies bestätigt haben, installieren Sie Bash-Completion.
$ sudo yum install bash-completion -y
  1. Melden Sie sich ab / an, um die Bash-Vervollständigung zu aktivieren. Der Grund für das Abmelden ist das Lesen der Bash-Completion-Definitionsdatei unter "/ etc / profile.d / bash_completion.sh".

3-3. Bash-Completion-Definitionsdatei

Die Definitionsdatei für Bash-Vervollständigung befindet sich im folgenden Verzeichnis.

  • /etc/bash_completion.d/
  • /usr/share/bash-completion/completions/

Wenn Sie das Verzeichnis überprüfen, finden Sie eine große Anzahl von Definitionsdateien. Befehle mit dieser Datei können optionale Eingaben ausführen.

$ ls  /usr/share/bash-completion/completions/ | wc -l
454

$ ls /usr/share/bash-completion/completions/
addpart       fsck.minix      lvextend     raw                  timedatectl
blkdiscard    fsfreeze        lvm          readprofile          tuned-adm
blkid         fstrim          lvmdiskscan  rename               udevadm
blockdev      gapplication    lvreduce     renice               ul
bootctl       gdbus           lvremove     repquota             umount
busctl        getopt          lvrename     resizepart           unshare
bzip2         groupadd        lvresize     rev                  useradd
cal           groupdel        lvs          rpm                  userdel
cfdisk        groupmod        lvscan       rtcwake              usermod
★ Unten weggelassen

3-4 Verschiedene Beispiele für die Vervollständigung der Eingabe

Das vorherige "systemctl" -Beispiel ergänzte die Option "list-unit-files". Andere Optionen, die mit einem Bindestrich (-) oder einem Bindestrich ( -) beginnen, können ebenfalls abgeschlossen werden.

$ sudo systemctl -[TAB]Tasteneingabe
-a                     --ignore-dependencies  --quiet
--after                --kill-who             -r
--all                  -l                     --recursive
--before               --no-ask-password      --reverse
--defaults             --no-block             --root
-f                     --no-legend            --runtime
--fail                 --no-pager             -s
--failed               --no-reload            --signal
--force                --now                  --state
--full                 --no-wall              --system
--global               -p                     -t
-h                     -P                     --type
-H                     --privileged           --version
--help                 --property
--host                 -q

Die Anzeige dauert einige Zeit. Wenn Sie jedoch die "TAB-Taste" in der Mitte des Dienstnamens (Einheitendateiname) eingeben, können Sie eine Liste der übereinstimmenden Dienste anzeigen.

$ sudo systemctl restart sshd[TAB]Tasteneingabe
sshd@                sshd.service
sshd-keygen.service  sshd.socket

** Für ssh **

In ssh können Hostnamenkandidaten aus "~ / .ssh / unknown_hosts", "~ / .ssh / config" und "/ etc / hosts" angezeigt werden.

Nach 1 Leerzeichen[TAB]Schlüssel


$ ssh [TAB]Tasteneingabe
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.5.1.35 ol7srv.dbprivatenrt01s.work01nrtvcn.oraclevcn.com ol7srv

In der Mitte des Hostnamens[TAB]Schlüssel


$ ssh ol7[TAB]Tasteneingabe
ol7ksplice
ol7srv
ol7srv2
ol7srv3
ol7srv-vip.dbprivatenrt01s.work01nrtvcn.oraclevcn.com

-o Nach Option[TAB]Schlüssel


$ ssh -o [TAB]Tasteneingabe
AddressFamily=                     IdentitiesOnly=
BatchMode=                         IdentityFile=
BindAddress=                       IPQoS=
ChallengeResponseAuthentication=   KbdInteractive

** Alles kommt hierher. Ich möchte vorerst die "TAB-Taste" ausprobieren. ** ** **

Sie können sehen, was Sie mit jedem Befehl tun können, indem Sie die Definitionsdatei analysieren. Es ist jedoch Unsinn, sich daran zu erinnern, weil es so viele gibt.

Es ist zu beachten, dass der Befehl Optionen wie diese angeben soll, aber nicht definiert ist, wenn die Dateien und Verzeichnisse im aktuellen Verzeichnis angezeigt werden.

$ sudo yum-config-managar [TAB]Tasteneingabe
bash-completion-extras-2.1-11.el7.noarch.rpm
.bash_history
.bash_logout
.bash_profile
.bashrc
.cache/
.config/
.lesshst
sample.txt
.ssh/

3-5. Zusätzliche Module

Bash-Vervollständigung hat ein zusätzliches Modul, "Bash-Vervollständigung-Extras". Dies erfordert ein EPEL-Repository auch für die RHEL7-Serie.

Derzeit ist nur EPEL7 verfügbar, nicht EPEL6 und EPEL8. Selbst wenn das Suffix von el7 angehängt ist, ist es noarch. Wenn Sie es also mit wget oder yumdownloader erhalten und auf der RHEL6 / 8-Serie installieren, können Sie es verwenden.

  1. Das EPEL-Repository ist möglicherweise standardmäßig in der Cloud aktiviert. Überprüfen Sie EPEL mit dem folgenden Befehl. Wenn Sie dies sehen, können Sie es sofort installieren.
$ sudo yum list bash-completion-extras
Loaded plugins: langpacks, ulninfo
Available Packages
bash-completion-extras.noarch          1:2.1-11.el7           ol7_developer_EPEL
  1. Wenn das EPEL-Repository nicht installiert ist, installieren Sie es.

RHEL7-Serie


$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y

AmazonLinux2


$ sudo amazon-linux-extras install epel -y
  1. Installieren Sie das Bash-Completion-Extras-Paket. Das ist es.

python


$ sudo yum install bash-completion-extras -y
  1. Wenn Sie den Inhalt des Pakets überprüfen, sehen Sie, dass es fast 300 Module gibt, einschließlich MySQL und Postgresql.
$ rpm -ql bash-completion-extras |wc -l
271

$ rpm -ql bash-completion-extras
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/a2x
/usr/share/bash-completion/completions/aclocal
/usr/share/bash-completion/completions/add_members
/usr/share/bash-completion/completions/alias
/usr/share/bash-completion/completions/alternatives
/usr/share/bash-completion/completions/animate
/usr/share/bash-completion/completions/ant
/usr/share/bash-completion/completions/apropos
/usr/share/bash-completion/completions/arch
/usr/share/bash-completion/completions/arping
★ Unten weggelassen

4. Zusammenfassung

  • ** Bash-Vervollständigung ermöglicht es Ihnen, Befehlsoptionen zu vervollständigen **
  • ** Die RHEL6-Serie muss von EPEL installiert werden **
  • ** RHEL7 / 8 und Ubuntu werden häufig standardmäßig installiert. Existiert zumindest im Standard-Repository **

Recommended Posts