[LINUX] Utilisez bash-completion pour taper de longues commandes sans regarder man ou help

1. Utilisez-vous la fonction de saisie semi-automatique?

De nombreux shells et invites de commande, y compris ** bash **, fournissent ** la complétion ** (complétion). C'est une fonctionnalité qui fonctionne sur Windows, et la plupart des gens l'utiliseront.

Exemple de complétion de nom de fichier par la fonction de complétion d'entrée


$ ls
sample.txt  test1.txt  test2.txt  test3.txt
$ cat s[TAB]Entrée clé
$ cat sample.txt ★ Appuyez sur la touche TAB pour compléter le nom de fichier correspondant

** Et depuis environ RHEL6 (2010s-), il peut être utilisé non seulement pour les noms de fichiers et de répertoires, mais aussi pour l'entrée d'options de commande. ** </ font>

1-1. Conditions préalables

  • Linux et MacOS

1-2. TL;DR

  • J'ai utilisé la fonction de saisie semi-automatique, mais je ne savais pas qu'elle pouvait être utilisée pour l'entrée d'options des commandes Linux. Embarrassant ... </ font>

2. Problème de longueur d'option systmctl

J'utilise la série RHEL7 depuis quelques années, mais j'utilise la série RHEL5 / RHEL6 depuis longtemps. Le problème avec RHEL7 est que vous ne pouvez pas utiliser la commande service ou la commande chkconfig (certaines peuvent être utilisées avec des fonctions compatibles).

Puisqu'il s'agit d'une commande souvent utilisée dans la construction et le fonctionnement du système, elle a tendance à être "Qu'est-ce que chkconfig --list, systemctl ...".

** La fonction de complétion d'entrée de l'option de commande est utile dans de tels cas. ** **

Vous pouvez afficher une liste d'options en tapant la "touche TAB" après systemctl comme indiqué ci-dessous.

$ sudo systemctl [TAB]Entrée clé ★ TAB après avoir inséré 1 espace après 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

Si la liste est affichée, c'est celle-ci. Entrez ensuite list-unit-files. L'achèvement de la saisie de "touche TAB" est effectif même lors de la saisie de l'option.

$ sudo systemctl list-unit-files ★list-unit-La complétion TAB fonctionne même au milieu des fichiers

** Maintenant, je n'ai plus peur de systemctl! Hmm! ** **

3. Qu'est-ce que l'achèvement bash?

Bash-completion complète les options de commande plutôt que de compléter les noms de fichiers et de répertoires. Si vous tapez complete -p et que beaucoup de lignes sont affichées, vous pouvez vous attendre à ce qu'il soit disponible.

3-1. État de chaque distribution

Selon le type et la version de la distribution Linux, il se peut qu'elle ne soit pas incluse dans le référentiel standard.

  • ** Série RHEL6: ** Dépôt EPEL
  • ** Série RHEL7 ou version ultérieure: ** Référentiel standard
  • ** Ubuntu 18.04 LTS: ** Dépôt standard

Série RHEL8


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

Série RHEL7


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

Série RHEL6


$ 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

C'est un peu vieux, donc c'est subtile si c'est applicable maintenant, mais voici les informations MacOS.

3-2. Installation sur le système d'exploitation RHEL6

Pour RHEL 6, CentOS 6 et Oracle Linux 6, bash-completion doit être installé à partir du référentiel EPEL. La procédure sera décrite.

  1. Assurez-vous que le référentiel EPEL est activé. Il peut être utilisé si la ligne existe et est activé comme suit.
$ yum repolist all | grep -i epel
epel                         Extra Packages for Enterprise Linux enabled: 12,586
  1. Dans les cas autres que ceux ci-dessus, activez le référentiel EPEL en fonction de la situation.

** Lorsqu'il y a une ligne mais qu'elle est désactivée **

$ sudo yum-config-mangaer --enable epel

** Lorsqu'il n'y a pas de ligne elle-même **

$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm -y
  1. Lorsqu'il est affiché dans "Packages disponibles" comme indiqué ci-dessous, il n'est pas installé, mais il existe dans le référentiel.
$ sudo yum list bash-completion
Loaded plugins: refresh-packagekit, security, ulninfo
Available Packages
bash-completion.noarch                          1:1.3-7.el6                          epel
  1. Après confirmation, installez bash-completion.
$ sudo yum install bash-completion -y
  1. Déconnectez-vous / connectez-vous pour activer bash-completion. La raison de la déconnexion est de lire le fichier de définition bash-completion dans / etc / profile.d / bash_completion.sh.

3-3. Fichier de définition de saisie semi-automatique

Le fichier de définition de bash-completion existe dans le répertoire suivant.

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

Si vous vérifiez le répertoire, vous trouverez un grand nombre de fichiers de définition. Les commandes avec ce fichier pourront compléter l'entrée facultative.

$ 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
★ Omis ci-dessous

3-4. Divers exemples de saisie semi-automatique

L'exemple précédent de systemctl complétait l'option list-unit-files. D'autres options commençant par un tiret (-) ou un tiret ( -) peuvent également être complétées.

$ sudo systemctl -[TAB]Entrée clé
-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

L'affichage prendra un certain temps, mais si vous entrez la "touche TAB" au milieu du nom du service (nom du fichier de l'unité), vous pouvez afficher une liste des services correspondants.

$ sudo systemctl restart sshd[TAB]Entrée clé
sshd@                sshd.service
sshd-keygen.service  sshd.socket

** Pour ssh **

Dans ssh, les candidats de nom d'hôte peuvent être affichés à partir de ~ / .ssh / known_hosts, ~ / .ssh / config et / etc / hosts.

Après 1 espace[TAB]Clé


$ ssh [TAB]Entrée clé
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

Au milieu du nom d'hôte[TAB]Clé


$ ssh ol7[TAB]Entrée clé
ol7ksplice
ol7srv
ol7srv2
ol7srv3
ol7srv-vip.dbprivatenrt01s.work01nrtvcn.oraclevcn.com

-o Après l'option[TAB]Clé


$ ssh -o [TAB]Entrée clé
AddressFamily=                     IdentitiesOnly=
BatchMode=                         IdentityFile=
BindAddress=                       IPQoS=
ChallengeResponseAuthentication=   KbdInteractive

** Tout vient ici. Je veux essayer la "touche TAB" pour le moment. ** **

Vous pouvez voir ce que vous pouvez faire avec chaque commande en analysant le fichier de définition. Cependant, il est absurde de se souvenir car il y en a tellement.

Il convient de rappeler que la commande est censée spécifier des options comme celle-ci, mais elle n'est pas définie lorsque les fichiers et répertoires du répertoire courant sont affichés.

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

3-5. Modules supplémentaires

bash-completion a un module supplémentaire, bash-completion-extras. Cela nécessite un référentiel EPEL même pour la série RHEL7.

Actuellement, seul EPEL7 est disponible, pas EPEL6 et EPEL8. Cependant, même si le suffixe el7 est attaché, c'est noarch, donc si vous l'obtenez avec wget ou yumdownloader et l'installez sur la série RHEL6 / 8, vous pouvez l'utiliser.

  1. Le référentiel EPEL peut être activé par défaut dans le cloud. Vérifiez EPEL avec la commande suivante. Si vous voyez cela, vous pouvez l'installer immédiatement.
$ 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. Si le référentiel EPEL n'est pas installé, installez-le.

Série RHEL7


$ 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. Installez le package bash-completion-extras. C'est tout.

python


$ sudo yum install bash-completion-extras -y
  1. Si vous vérifiez le contenu du paquet, vous pouvez voir qu'il y a près de 300 modules, y compris mysql et 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
★ Omis ci-dessous

4. Résumé

  • ** bash-completion vous permet de compléter les options de commande **
  • ** La série RHEL6 doit être installée à partir d'EPEL **
  • ** RHEL7 / 8 et Ubuntu sont souvent installés par défaut. Au moins existe dans le référentiel standard **

Recommended Posts