Vraag Best practices en tips voor Linux-opdrachtregels?


Ik zou graag een discussie willen openen die de best practices en tips van uw Linux-opdrachtregel (CLI) zou verzamelen.

Ik heb naar een dergelijke discussie gezocht om de onderstaande opmerking te delen, maar heb er geen gevonden, vandaar deze post.

Ik hoop dat we hier allemaal van kunnen leren.

U bent van harte welkom om uw Bash-tips, grep, sed, AWK, / proc en alle andere gerelateerde Linux / Unix-systeemadministratie te delen, best practices voor het programmeren van shells ten behoeve van ons allemaal.


112
2018-03-02 21:23


oorsprong


Waarom alleen Linux? Veel tips kunnen nuttig zijn voor bijna alle smaken van Unix. - mouviciel
Deze vraag is misschien een beetje breed - er is genoeg om de best practices van Linux / Unix te gebruiken om hele boeken te vullen ... - Jonik
Ik ben het ermee eens dat Unix-tips die kunnen worden toegepast op Linux ook zeer welkom zijn, ik heb Linux geschreven omdat A. Dit is waar we hier mee samenwerken. B. omdat het de afgelopen jaren een grotere publieke bekendheid heeft gekregen dan Unix. - Maxim Veksler
Ik denk dat het een geweldig idee is om een ​​lijst samen te stellen met de nuttigste en interessantste opdrachten die mensen gebruiken.
Zijn deze van belang? refspecs.freestandards.org


antwoorden:


Gebruik scherm, een gratis terminalmultiplexer ontwikkeld door het GNU Project waarmee u meerdere terminals in één kunt hebben.

U kunt een sessie starten en uw terminals worden opgeslagen, zelfs als u geen verbinding meer hebt, zodat u ze later of thuis kunt hervatten.


111
2018-03-02 22:52



De meest voorkomende switches die ik gebruik zijn 'scherm -D-R' voor het loskoppelen en hervatten van mijn laatste schermsessie en 'scherm -x' om dezelfde schermsessie vanuit meerdere aanmeldingen te bekijken. Zorg ook voor een leuke .screenrc van dotfiles.org/.screenrc - Nick Devereaux
Een ander aardig ding over het scherm is dat je een terminal met andere mensen kunt delen wanneer je ergens aan wilt samenwerken, met behulp van scherm -x - gareth_bowles


SSH!
SSH is de opdracht van de god - ik denk dat het de meest waardevolle algemene opdracht is om te leren. De opties kunnen behoorlijk ontmoedigend zijn, maar het lijkt erop dat ik voortdurend nieuwe opdrachtregelopties voor SSH leer gebruiken die ik nooit had gedacht nodig te hebben. Ik heb ze op dit moment allemaal gebruikt.

Hoe meer je het gebruikt, hoe meer je erover leert. Je kunt het gebruiken om GEWELDIGE dingen te doen.

Opmerking: AL deze dingen kunnen op afstand worden gedaan zonder installatie op uw server, behalve dat de ssh-server actief is.

Monteer een bestandssysteem via internet 

zoek op internet naar SSHFS

Opdrachten doorsturen.

Het SVN + SSH-protocol is Subversion van een externe client naar een server waarop GEEN DEAMON wordt uitgevoerd! De SVN-opdracht start de server via de SSH-shell en geeft de informatie door de bestaande pijp heen en weer. Het rsync-programma doet hetzelfde, loopt tegen een server zonder rsync deamon door er zelf een op te starten via SSH. Het is gemakkelijk om je eigen bash-bestanden te schrijven om vergelijkbare tricks te doen.

Ketting om door firewalls te komen 

Ik gebruik dit de hele tijd om door mijn linux-server thuis naar mijn mac te springen.

Forward-poorten:
Het lijkt slechts matig nuttig totdat u zich realiseert dat u door uw firewall thuis kunt stuiteren en uw router thuis van uw werk kunt configureren alsof u dat vanuit uw thuisnetwerk doet).

Forward X-verzoeken: 

Dit is weer een geweldige. Met of zonder een X-server op uw externe systeem, kunt u een x-windows-programma uitvoeren en verschijnt het venster op uw lokale scherm. Gebruik gewoon de schakelaar -X, dat is alles!

Omdat u geen X-server op uw externe server hoeft te hebben, is de CPU-impact op uw server minimaal, u kunt een TINY Linux-server hebben die grote apps serveert naar uw krachtige spel-pc met Windows en cygwin / X.

Uiteraard werken VI en EMACS via SSH, maar als ik thuis ren, wil ik soms meer. Ik gebruik ssh -X om een ​​kopie van Eclipse op te starten! Als uw server krachtiger is dan uw laptop, heeft u de GUI daar op uw laptop zitten, maar de compilaties worden gedaan op uw server, dus maak u geen zorgen over het laden van het systeem.

Uitvoeren in batch-bestanden 

(wat betekent dat een lokaal batchbestand wordt uitgevoerd dat "dingen doet" op andere systemen):

Twee dingen combineren om deze cool te maken. Een daarvan is dat je wachtwoordprompts kunt elimineren door (veiliger) coderingssleutels te gebruiken. De tweede is dat u een opdracht op de SSH CLI kunt opgeven. Ik heb dit op een aantal interessante manieren gebruikt: zoals wanneer een compilatie mislukt op de externe server, zou ik het SSH op mijn computer hebben en een geluidsbestand afspelen).

Vergeet niet dat u de uitvoer van de opdracht op afstand kunt omleiden en deze in uw lokale batchbestand kunt gebruiken, zodat u ook lokaal een compile op uw server lokaal kunt volgen.

Ingebouwd voor Mac

Zowel de server als de client zijn ingebouwd in zowel mac als linux. In het geval van de Mac en Ubuntu is het inschakelen van een server net zo eenvoudig als het vinden van het juiste aankruisvakje.

Installeer cygwin of cygwin / X op een pc (cygwin / X stelt je in staat om je x-window-uitvoer van je Linux-machine naar je Windows-pc door te sturen - het installeert een X-server)

Belangrijk Tips / config-bestand

Gebruik nooit poort 22 op uw firewall. Je zult veel hackpogingen krijgen, het is het gewoon niet waard. Laat uw firewall gewoon een andere poort naar uw server doorsturen.

Er zijn uitgebreide configuratieopties waarmee u uw ssh-opdrachten aanzienlijk kunt vereenvoudigen. Hier is een voorbeeld van mij op het werk:

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

Wanneer ik "ssh home" (niets anders) typ, doet het alsof ik had getypt:

ssh -p 12345 bill@billshome.hopto.org

en stuur dan mijn lokale poort 1025 thuis door naar mijn systeem "mac". De reden hiervoor is dat ik nog een item in mijn bestand heb:

Host mac
    hostname localhost
    port=1025

zodat zodra ik een "ssh home" heb gedaan en nog steeds het venster open heb, ik "ssh mac" kan typen en de computer hier aan het werk zal proberen om verbinding te maken met zijn eigen poort 1025 die is doorgestuurd naar "mac: 22 "door de andere opdracht, dus het maakt via de firewall verbinding met mijn Mac thuis.

Bewerken - cool script!

Ik heb een oud script opgegraven waar ik dol op ben - ik moest terugkomen en het plaatsen voor iedereen hier die mogelijk geïnteresseerd is. Het script wordt "authMe" genoemd

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

Als je dit script in je thuismap hebt en er een host is waarmee je verbinding kunt maken (via ssh), dan kun je "./authMe hostName" typen.

Indien nodig zal het een public / private keypair voor u maken, dan zal het naar de andere machine worden gezonden en uw openbare sleutel kopiëren (de ssh-opdracht zal u om een ​​wachtwoord vragen ...)

Hierna zou de SSH-opdracht niet meer om uw wachtwoord moeten vragen als u zich aanmeldt bij dat externe systeem, maar het openbare / private sleutelpaar gebruiken.

Als uw externe computer niet altijd veilig is, kunt u overwegen een "wachtwoordzin" in te stellen wanneer daarom wordt gevraagd.

U kunt de ssh-server aan het andere uiteinde ook configureren om geen tekstwachtwoorden (alleen sleutels) toe te staan ​​voor extra beveiliging.


101



+1 zeer mooie en compacte post - Karsten
Een kleine opmerking over SSH via poort 22: op voorwaarde dat je een goed root-wachtwoord hebt en je gebruikers geen vreselijke wachtwoorden hebben, is alleen het uitvoeren van fail2ban (of iets dergelijks) genoeg om crack-pogingen tegen te houden. Ik vond het echt vervelend om SSH op een andere poort te houden. - David Wolever
Het kan soms irritant zijn, maar het aantal verbindingen was gewoon angstaanjagend. Ik weet dat ze er niet doorheen moeten komen, maar het is net alsof je iemand naar je huis laat lopen en elke minuut met je deurknop speelt - gewoon zenuwslopend.
Er is tegenwoordig een ingebouwde versie van je laatste opdracht in de meeste versies van SSH, het wordt genoemd ssh-copy-id, en het is zo simpel als ssh-copy-id user@someserver - JamesHannah
Een andere manier om je 'ssh mac'-truc uit te voeren, is door een ProxyCommand-richtlijn in je .ssh / config-bestand te gebruiken. Host mac ProxyCommand ssh -q home "nc% h% p" Hiermee wordt netcat (nc) op home uitgevoerd en wordt uw ssh-verbinding rechtstreeks doorgestuurd naar mac. Ik vind die gemakkelijker te koppelen (bijvoorbeeld als je verbinding met 'thuis' wilt maken om naar 'werkbastion' te gaan om naar 'werkwebserver' te gaan. - toppledwagon


Ik gebruik graag

cd -

om naar de vorige map te gaan. Erg nuttig!


73



Ik heb dit nooit geweten! Bedankt! In een verwante notitie doen pushd en popd iets vergelijkbaars, door een stapel dirs op te bouwen. Dit soort trucs helpen je bij het navigeren door een diepe luchtstructuur.
Dit is pure verlichting. - Manuel Ferreria


Ik heb onlangs het pv commando (pipe viewer) die op een kat lijkt maar met overdrachtdetails.

Dus in plaats van

$ gzip -c access.log > access.log.gz

Je kunt gebruiken

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

Dus in plaats van geen idee te hebben wanneer je operatie zal eindigen, nu weet je het!

Met dank aan Peteris Krumins 


69



$ gzip -c access.log> access.log.gz Waarom niet gewoon: $ gzip access.log
Oh dat werkt :) Ik nam het voorbeeld van Peteris 'website. - Nick Devereaux
Dat ziet eruit als oud tee(1). - Daniel C. Sobral
Zeer nuttig hulpprogramma, een die ik altijd vergeet :-( - Patrick


sudo !!

Voer het vorige commando opnieuw uit als root.

[Het huidige bovenste commando op de site http://www.commandlinefu.com, een site met een thema in de trant van deze vraag.]


53



Openbaarmaking - Ik voer commandlinefu.com uit - codeinthehole
Het zou deze kerel 16 karakters hebben bewaard: xkcd.com/149


druk op Ctrl-R en begin met het typen van een opdracht (of een deel ervan) - het doorzoekt de opdrachthistorie. Door nogmaals op Ctrl-R te drukken, spring je naar de volgende match, voer je de opdracht die op dat moment wordt weergegeven uit en met de pijl-rechts (ten minste) kun je deze eerst bewerken.

$ (reverse-i-search)`svn': svn status

Ik had Linux al 7 jaar gebruikt als mijn OS voordat ik dit leerde, maar nu ik het weet, is het best handig.


46



Bedankt. Ik heb de omgekeerde zoekopdracht gebruikt, maar heb niet kunnen achterhalen hoe naar de volgende wedstrijd te springen. - Adam
Ctrl-S springt naar de volgende match. Je moet het misschien doen stty -ixon eerst om de XON / XOFF flow-control betekenis uit te schakelen (dit maakt ook Ctrl-Q beschikbaar, standaard is het toegewezen om hetzelfde te zijn als Ctrl-V geciteerde insert, maar je kunt het in iets anders veranderen). Zien man stty en man readline voor meer informatie. De stty commando kan worden toegevoegd aan uw ~/.bashrc - Dennis Williamson


De opdrachtregel is grappig. Ik denk dat je alleen zo veel alleen kunt leren en de rest die je leert door per ongeluk iemand anders te volgen via een commandoregel.

Ik gebruikte de shell al jaren om met de hand nauwkeurig namen van mappen in te typen. Op een dag zag ik een vriend rotzooien op een systeem en hij bleef maar op de tabtoets drukken. Ik vroeg: "waarom raak je een tab?". Antwoord: het probeert de map of bestandsnaam in te vullen. Wie had het geraden: voltooiing van het tabblad! Typ een deel van het bestand of de map, druk op het tabblad en het zal proberen af ​​te maken wat je hebt getypt (het gedrag hangt echter af van welke shell).

Op een dag zei vriend dat hij me op de commandoregel gadesloeg en keek hij me iets als:

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

Wie had het geraden !? Hij wist het nooit popd / pushd. Ik denk dat we zelfs ...


45



Voor mij lijkt tab-aanvullen iets "voor de hand liggend", erg basic, maar ik wist ook nooit van popd / pushd. Grappig inderdaad. :) - Jonik
Zie ook dit antwoord om veel meer tabbladen in te vullen dan opdrachten, bestanden en mappen: stackoverflow.com/questions/603696//603919#603919 - Jonik
Dat is zo waar. Ik leerde over bash's backward-history-search (ctrl-r) door naar iemand te kijken. Later besefte ik dat het een readline-functie was en hetzelfde werkte in andere programma's waarin readline is opgenomen (mysql, gdb, python -i, clisp enz.). - sigjuice
Hoe kon je "de schaal" jarenlang gebruiken en niet weten wat het voltooien van tabbladen is? - prestomation
Als je te maken hebt met pushd / popd vergeet dan niet het commando te noemen dirs. Het laat zien wat er op de pushd / popd stack staat. - slm


Leer Vim.

Het is (misschien wel) de beste editor, maar zeker de beste editor die beschikbaar is op een blote Linux-server.


41



gvim is ook de beste bestandsbrowser op Windows;)
Dit is ook erg handig, want zodra je vim kent, kun je de meeste shells in de vi-modus zetten, en de navigatie wordt extreem gemakkelijk en snel - Patrick