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-2. TL;DR
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! ** **
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.
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 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.
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.
$ yum repolist all | grep -i epel
epel Extra Packages for Enterprise Linux enabled: 12,586
** 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
$ sudo yum list bash-completion
Loaded plugins: refresh-packagekit, security, ulninfo
Available Packages
bash-completion.noarch 1:1.3-7.el6 epel
$ sudo yum install bash-completion -y
/ etc / profile.d / bash_completion.sh
.Le fichier de définition de bash-completion existe dans le répertoire suivant.
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
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/
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.
$ sudo yum list bash-completion-extras
Loaded plugins: langpacks, ulninfo
Available Packages
bash-completion-extras.noarch 1:2.1-11.el7 ol7_developer_EPEL
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
python
$ sudo yum install bash-completion-extras -y
$ 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