Vraag Terminal 'incognitomodus'?


Ik gebruik Terminal veel en soms voer ik opdrachten uit, wat geen dingen zijn waarvan ik niet wil dat anderen het zien, maar meer commando's die, als ik per ongeluk een pijl naar boven stuurde en per ongeluk uitvoerde, veel problemen zouden veroorzaken.

Dus ik vraag me af of er een soort van 'incognitomodus' van Terminal is waarmee ik, na het uitvoeren van een bepaald commando, kan stoppen met het opnemen van mijn geschiedenis en dan pas kan beginnen met opnemen nadat ik ofwel een begin met het opnemen van de opdracht opnieuw opnemen en de 'incognitomodus' afsluiten, of ik start gewoon de Terminal opnieuw op?

Omdat ik mezelf later vind en dingen van mij weghaal .bash_history, wanneer het veel gemakkelijker zou zijn als ik daar in de eerste plaats kon stoppen met opnemen, of in ieder geval kreeg om te proberen het op te nemen ergens waar het gewoon niet zou zijn toegestaan, en zou het gewoon niet opnemen.


225
2018-05-18 14:53


oorsprong


@Sparhawk: Wat?
Nou, dat ben je waarschijnlijk ook paranoïde dat uw geschiedenis door anderen zal worden gelezen? - Sparhawk
@Sparhawk: Nou, het is gedeeltelijk dat, en feestje, ik wil niet per ongeluk een mogelijk dodelijk onderhoudscommando uitvoeren als ik in de toekomst een pijl omhoog maak! : D
Gewoon om toe te voegen, je hoeft jezelf niet te rechtvaardigen: "wat geen dingen zijn die ik niet wil dat anderen zien". Dat zou ook voor mij een volkomen geldige reden zijn. (Vooral in deze tijd waarin iedereen probeert je schuldig te laten lijken omdat je 'dingen hebt om je te verstoppen') - ereOn
Als je twee tabbladen opent, doe je dingen in de eerste, doe dingen in de tweede, sluit dan de tweede VOOR de eerste, alleen de geschiedenis van de eerste lijkt te zijn geschreven naar .bash_history. (Ubuntu 15.04 geruïneerde Terminal, geluk dit is een live USB.) - Hitechcomputergeek


antwoorden:


Voer een opdracht uit zonder het in de geschiedenis te zetten:

Plaats eenvoudig een spatie voor het commando. Bash negeert opdrachten met een vooraf geplaatste spatie:

Voorbeeld: Ruimteecho "Some secret text"

Opmerking: dit werkt alleen als het HISTCONTROL variabele is ingesteld op ignorespace of ignoreboth.


Geschiedenis tijdelijk uitschakelen:

  • Rennen Ruimteset +o history of Ruimteshopt -uo history om geschiedenis uit te schakelen.
  • Rennen set -o history of shopt -so history om het opnieuw in te schakelen.

Geschiedenis voor de huidige sessie uitschakelen (onthoudt geen opdrachten van de sessie):

unset HISTFILE

Opmerking: je zult zien dat de commando's op drukken omhoog totdat je de terminal sluit.


Een opdracht uit de geschiedenis verwijderen:

Rennen Ruimtehistory | grep "part of your secret command"

Het toont een lijst met eerder uitgevoerde opdrachten, in dit formaat:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

Selecteer het itemnummer links van de opdracht. Je kunt het kopiëren met Ctrl+Verschuiving+C

Rennen Ruimtehistory -d <number> waar <number> is het invoernummer om het item te verwijderen.
Je kunt dat nummer plakken met Ctrl+Verschuiving+V


Andere interessante antwoorden:


260
2018-05-19 15:01



Als je gebruikt history -d om een ​​regel te verwijderen, verwijdert dit de inhoud van de regel, maar je kunt nooit verwijderen dat je liep history -d(tenzij je het voor het eerst gebruikt set +o history voor het hardlopen history -d) - AJFaraday
Het herinnerde me gewoon aan de super-injunction logica, dat is alles;) - AJFaraday
(OT) Wetsuitvoering is een juridisch document dat voorkomt dat mensen iets publiceren. Een superbevel houdt hen ook tegen het publiceren van het feit dat ze het vermogen om te publiceren werd ontzegd. Sommige logische argumenten vragen of ze kunnen publiceren dat ze de mogelijkheid hebben geweigerd om wat informatie te publiceren. Dan wordt het een cyclisch argument. - AJFaraday
@Helio Ik denk dat het voor gebruikers beter is om de "juiste" manier van kopiëren te weten - vooral als ze per ongeluk een tekst gaan selecteren. Ik weet niet zeker hoe ik de ruimte moet maken, misschien meer verduidelijken dat de ruimte er is? De [spatie] ziet er een beetje onhandig uit ... - Tim
De unset HISTFILE aanpak werkt ook met terugwerkende kracht voor alle opdrachten die niet zijn geschreven .bash_history nog. - kasperd


U kunt eenvoudig de geschiedenis van een specifieke eindsessie verwijderen door een opdracht toe te voegen history -cw na het werken. Sluit de terminal niet voordat u de opdracht geeft.


39
2018-05-18 15:04



Hiermee wordt de geschiedenis niet verwijderd? - Helio
Hiermee wordt alleen de geschiedenis van die specifieke eindsessie verwijderd. - Moithil Biswas


shopt -uo history zou het het beste moeten doen.

Nuking the HISTFILE (et al) variabelen zullen je niet stoppen omhoog de geschiedenis die wordt geregistreerd, wordt deze niet naar de schijf geduwd. Dit kan al dan niet een positief iets voor je zijn, maar als je het zegt, denk ik dat je iets beters wilt. De. Wijzigen shopt geschiedenis instellen stopt het hele geschiedenismechanisme van triggeren.

U kunt inloggen opnieuw inschakelen met shopt -so history (de -s en -u zijn respectievelijk ingesteld en uitgeschakeld).

Merk op dat het commando zelf waarschijnlijk zal worden gelogd dus plaats het met een spatie om te voorkomen dat het aan de geschiedenis wordt toegevoegd voordat je de variabele wist.


28
2018-05-19 22:00





Een andere manier om de huidige shell te doden zonder in te loggen in het geschiedenisbestand is om:

kill -9 $$

Dit zorgt ervoor dat bash (en waarschijnlijk ook andere shells) het SIGKILL-signaal naar zichzelf stuurt, het ter plekke doodt en verhindert dat het iets naar de schijf schrijft.


17
2018-05-18 15:02



a.k.a. 'Schiet jezelf in het hoofd' :). Dit heeft het voordeel dat u niet hoeft te onthouden om iets te doen voordat u de opdrachten schrijft. - Guido
Ik gebruik zsh met incremental history write, dus ik betwijfel of dit in mijn geval zou werken - Wayne Werner


Als u de opdrachtgeschiedenis voor de huidige sessie tijdelijk wilt uitschakelen, kunt u tijdelijk de HISTFILE-omgevingsvariabele uitschakelen.

unset HISTFILE

terwijl de sessie actief is, hebt u toegang tot de geschiedenis zoals gebruikelijk, maar deze wordt niet op de schijf opgeslagen.

Om terug te keren in dezelfde sessie (alle wijzigingen worden geregistreerd)

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



En is er een eenvoudige manier in de huidige sessie om dit om te keren en door te zetten?
@ParanoidPanda Ik heb een opdracht toegevoegd voor terugzetting in de huidige sessie. - Bruni
@ParanoidPanda: Waarom heb je een commando nodig om in te stellen HISTFILE opnieuw op de huidige sessie? Als u de wijziging ongedaan maakt (zelfs nadat de geheime opdrachten zijn uitgevoerd), worden deze in de geschiedenis opgeslagen wanneer u afsluit. - Helio
@Helio: Oh, nee, ik bedoelde een commando dat dan opnieuw zou beginnen met opnemen, maar de commando's niet opslaan die ik niet wilde opslaan.
@ParanoidPanda, Helio lijkt hier gelijk in te hebben, want de geschiedenis wordt bewaard bij het afsluiten. Ik had dat niet overwogen. - Bruni


U kunt geschiedenisregels in de huidige shellsessie wijzigen. Als je door de geschiedenis loopt (bijvoorbeeld met omhoog of Ctrl+P) en verander een lijn zonder het uit te voeren, alleen de gewijzigde versie van de regel wordt opgeslagen. U kunt het op elke gewenste manier wijzigen; goede keuzes zijn onder meer het gebruik van Ctrl+U om de regel helemaal leeg te maken of te gebruiken Esc# zetten # commentaarteken aan het begin.

Om een ​​lijn achter te laten zonder deze uit te voeren, onthoud dat je niet raakt terugkeer (invoeren). Wat ik doe is terugkeren naar de nieuwste regel in de geschiedenis via Esc>.

(In plaats van Esc gevolgd door >, in de meeste terminals kun je vasthouden alt en druk op >; Hetzelfde geldt voor de Esc# suggestie hierboven.)

Notitie: U kunt op deze manier de toegang tot eerdere sessies niet permanent wijzigen. Die wijzigingen worden niet toegepast op de HISTFILE aan het einde van de sessie.


10
2018-05-20 03:24





Je zou ook .bash_history read-only kunnen maken. Ik zou eerst het bestand legen en dan doen:

 chattr +i .bash_history

6
2018-05-21 20:46





U kunt de gevoelige opdrachten in een schermsessie uitvoeren en de sessie vervolgens vernietigen als u klaar bent.

Als alternatief kunt u die schermsessie levend houden, maar losmaken en er alleen toegang toe krijgen als u daadwerkelijk naar een pijl wilt kunnen gaan met de anders gevaarlijke opdrachten.


5
2017-11-12 19:31





Persoonlijk gebruik ik mksh, en deze shell heeft standaard geen geschiedenisbestand. Dat betekent dat je een alternatieve shell zou kunnen lanceren zoals mksh of dash (dat overigens standaard wordt meegeleverd) om de opdracht uit te voeren waarvan u niet wilt dat gebruikers deze zien en eenmaal af te sluiten. bash geschiedenis zal alleen vastleggen dat je alternatieve shell lanceerde en dat is alles.


1
2018-04-06 10:50