GNU/Linux
schelp
Zoeken…
Invoering
De shell voert een programma uit als reactie op de prompt. Wanneer u een opdracht geeft, zoekt de shell naar het programma en voert het vervolgens uit. Wanneer u bijvoorbeeld de opdracht ls geeft, zoekt de shell naar het hulpprogramma / programma met de naam ls en voert deze vervolgens uit in de shell. De argumenten en de opties die u bij de hulpprogramma's verstrekt, kunnen van invloed zijn op het resultaat dat u krijgt. De shell is ook bekend als een CLI of opdrachtregelinterface.
Standaardshell wijzigen
De meeste moderne distributies worden geleverd met BASH ( B ourne A gain SH ell) vooraf geïnstalleerd en geconfigureerd als standaardshell.
Het commando (eigenlijk een uitvoerbaar binair bestand, een ELF) dat verantwoordelijk is voor het wijzigen van shells in Linux is chsh
( ch ange sh ell).
We kunnen eerst controleren welke shells al op onze machine zijn geïnstalleerd en geconfigureerd met behulp van de opdracht chsh -l
, die een vergelijkbaar resultaat zal geven:
[user@localhost ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
In sommige Linux-distributies is chsh -l
ongeldig. In dit geval is de lijst met alle beschikbare shells te vinden in het bestand / etc / shells. U kunt de inhoud van het bestand weergeven met cat
:
[user@localhost ~]$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
Nu kunnen we onze nieuwe standaardshell, bijvoorbeeld fish
, kiezen en deze configureren met behulp van chsh -s
,
[user@localhost ~]$ chsh -s /usr/bin/fish
Changing shell for user.
Password:
Shell changed.
Nu hoeft u alleen nog maar een uitlog-aanmeldcyclus uit te voeren en te genieten van onze nieuwe standaardshell.
Als je de standaardshell voor een andere gebruiker wilt wijzigen en je hebt beheerdersrechten op de machine, kun je dit bereiken door chsh
als root
. Aangenomen dat we de standaardshell van user_2
willen wijzigen in fish, gebruiken we dezelfde opdracht als hiervoor, maar met de toevoeging van de gebruikersnaam van de andere gebruiker, chsh -s /usr/bin/fish user_2
.
Om te controleren wat de huidige standaardshell is, kunnen we de omgevingsvariabele $SHELL
, die verwijst naar het pad naar onze standaardshell, dus na onze wijziging verwachten we een vergelijkbaar resultaat,
~ echo $SHELL
/usr/bin/fish
chsh
opties:
-s shell
Stelt shell in als de login-shell.
-l
, --list-shells
Druk de lijst met shells in / etc / shells af en sluit af.
-h
, --help
Druk een gebruikersbericht af en sluit af.
-v
, --version
Informatie over de versie afdrukken en afsluiten.
Basic Shell-hulpprogramma's
De Shell-prompt aanpassen
Standaardopdrachtprompt kan worden gewijzigd om er anders en kort uit te zien. In het geval dat de huidige map lang is, wordt de opdrachtprompt te groot. Het gebruik van PS1
wordt in deze gevallen nuttig. Een kort en op maat gemaakt commando mooi en elegant. In de onderstaande tabel is PS1
gebruikt met een aantal argumenten om verschillende vormen van shell-prompts weer te geven. Standaard opdrachtprompt ziet er ongeveer zo uit: user@host ~ $
in mijn geval ziet het er zo uit: bruce@gotham ~ $
. Het kan worden gewijzigd volgens de onderstaande tabel:
Commando | Nut |
---|---|
PS1 = '\ w $' | ~ $ shell-prompt als mapnaam. In dit geval is de rootmap Root. |
PS1 = '\ h $' | gotham $ shell-prompt als hostnaam |
PS1 = '\ u $' | bruce $ shell prompt als gebruikersnaam |
PS1 = '\ t $' | 22:37:31 $ shell-prompt in 24-uursnotatie |
PS1 = '@ $' | 10:37 PM shell-prompt in 12-uurs tijdnotatie |
PS1 = '! $ ' | 732 toont het geschiedenisnummer van de opdracht in plaats van de shell-prompt |
PS1 = 'kerel $' | dude $ zal de shell-prompt tonen zoals jij dat wilt |
Enkele basis shell-opdrachten
Commando | Nut |
---|---|
Ctrl-k | cut / kill |
Ctrl-y | yank / plakken |
Ctrl-a | brengt de cursor naar het begin van de regel |
Ctrl-e | verplaatst de cursor naar het einde van de regel |
Ctrl-d | verwijdert het teken achter / bij de cursor |
Ctrl-l | zal het scherm / de terminal wissen |
Ctrl-u | zal alles wissen tussen de prompt en de cursor |
Ctrl-_ | zal het laatste wat op de opdrachtregel wordt getypt ongedaan maken |
Ctrl-c | zal de taak / het proces op de voorgrond onderbreken / stoppen |
Ctrl-r | omgekeerd zoeken in de geschiedenis |
~/.bash_history | slaat de laatste 500 opdrachten / gebeurtenissen op die in de shell worden gebruikt |
history | toont de opdrachtgeschiedenis |
history | grep <key-word> | toont alle opdrachten in de geschiedenis met trefwoord <key-word> (handig in gevallen waarin u zich een deel van de in het verleden gebruikte opdracht herinnert) |
Maak uw eigen opdrachtalias
Als je het beu bent om lange opdrachten in bash te gebruiken, kun je je eigen opdrachtalias maken.
De beste manier om dit te doen is om een bestand met de naam .bash_aliases in uw thuismap te wijzigen (of te maken als dit niet bestaat). De algemene syntaxis is:
alias command_alias='actual_command'
waarbij actual_command
het commando is dat je hernoemt en command_alias
de nieuwe naam is die je het hebt gegeven. Bijvoorbeeld
alias install='sudo apt-get -y install'
wijst de nieuwe opdracht alias install
aan de daadwerkelijke opdracht sudo apt-get -y install
. Dit betekent dat wanneer u install in een terminal gebruikt, dit door bash wordt geïnterpreteerd als sudo apt-get -y install .
Zoek een bestand op uw systeem
Met bash kun je eenvoudig een bestand locate
met de opdracht locate
. Stel bijvoorbeeld dat u op zoek bent naar het bestand mykey.pem:
locate mykey.pem
Soms hebben bestanden vreemde namen, bijvoorbeeld een bestand zoals random7897_mykey_0fidw.pem
. Stel dat u dit bestand zoekt, maar u herinnert zich alleen de onderdelen mykey en pem. Je zou de locate
kunnen combineren met grep
met behulp van een pijp als deze:
locate pem | grep mykey
Dat zou alle resultaten opleveren die beide delen bevatten.
Merk op dat niet alle systemen het locate
geïnstalleerd, en veel die dit niet hebben ingeschakeld. locate
is snel en efficiënt omdat het uw systeem periodiek scant en de namen en locaties voor elk bestand in het cachegeheugen opslaat, maar als die gegevensverzameling niet is ingeschakeld, kan het u niets vertellen. U kunt updatedb
gebruiken om de scan van het bestandssysteem handmatig te starten om de informatie in de cache over bestanden op uw bestandssysteem bij te werken.
Beschikt u niet over een werkende locate
, kun je terugvallen op de find
nut:
find / -name mykey.pem -print
is ongeveer gelijk aan locate mykey.pem
maar moet uw bestandssysteem (en) elke keer scannen wanneer u het voor het betreffende bestand uitvoert, in plaats van gegevens in de cache te gebruiken. Dit is duidelijk langzamer en minder efficiënt, maar realtime. De find
programma kan veel meer doen dan vinden bestanden, maar een volledige beschrijving van de mogelijkheden is buiten het bestek van dit voorbeeld.