Ubuntu Suomen keskustelualueet
Muut alueet => Yleistä keskustelua => Aiheen aloitti: SuperOscar - 19.03.25 - klo:08.16
-
Utelenpa hieman uusista komentoriviohjelmista – siis sellaisista joita ei POSIX määrittele.
Itselleni ovat kasvaneet vakio-ohjelmiksi ainakin seuraavat; asentelen ne aina uuteen koneeseen heti ensimmäiseksi.
- bat – periaatteessa syntaksivärityksen hallitseva ”cat”. Tosin oletusarvoisesti myös sivuttaa tekstin yms.
- eza – uudempi ja paremmin ylläpidetty haarautus exasta. Kummallakin voi korvata ls:n, jota nopeampi kumpikin on.
- fd – nopea hakuohjelma, kuten find mutta nopeampi ja itse asiassa noudattaa paremmin GNU-komentorivisyntaksia.
- fzf – vuorovaikutteinen hakuohjelma, jota voi käyttää myös tiedostonvalintavalikkona.
- gdu – periaatteessa vuorovaikutteinen du eli näyttää levyn tilankäytön. Aiemmin käytin ncdu:ta, joka on samanlainen, mutta Go’lla kirjoitettu gdu on huomattavasti nopeampi.
- ov – Go’lla kirjoitettu sivutin, joka on syrjäyttänyt minulla käytössä mostin (jota journalctl ei kelpuuttanut sivutukseen ilman taikatemppuja) ja lessin.
Olisiko listaan lisättävää? Aina kiinnostaa kokeilla jotakin uutta!
MUOKS: Panenpa vielä esimerkin siitä, mitä tarkoitan fzf:stä tiedostonvalintavalikkona. Tässä näytetään ensin luettelo kansion kaikista *.txt-tiedostoista, näytetään ne fzf:llä valittavaksi ja sitten käynnistetään micro-muokkain valitulle tiedostolle.
micro $(ls -l *.txt | fzf | awk '{ print $NF }')
-
rg eli ripgrep: https://github.com/BurntSushi/ripgrep/
-
rg eli ripgrep: https://github.com/BurntSushi/ripgrep/
Sen olinkin unohtanut, vaikka joskus olen käyttänyt! Erinomaista.
-
Tästä esimerkistä muuten – tämähän EI toimi, jos tiedostonimessä on esimerkiksi välilyöntejä.
micro $(ls -l *.txt | fzf | awk '{ print $NF }')
Korjaus voisi olla esimerkiksi:
micro "$(ls -l *.txt | fzf | cut -c43-)"
…mikä toimii ainakin Zsh:ssa ja käyttää hyväksi tietoa, että yleensä ls -l -tulosteessa sarakkeesta 43 alkaa tiedostonimi. Sekin tosin voi muistaakseni pettää, jos käytössä on SELinux (Fedora, openSUSE Tumbleweed). Toisaalta tämä oli vain esimerkki ;D
-
Kuin tilauksesta postilaatikosta männä viikolla tupsahtanut uusin Linux Magazine (May 2025) jatkaa samasta aiheesta ja luettelee koko joukon ”nykyaikaisia vaihtoehtoja”.
Pari poimintaa jo säikeessä mainittujen lisäksi:
- cd-komennon tilalle zoxide
- df:n tilalle duf
- diffin tilalle delta
- historyn tilalle mcfly
Näistä olen kokeillut zoxidea ja mcfly’ta. Ne eivät lopulta minulle osoittautuneet kauhean tuottaviksi omiin Zsh-viritelmiini verrattuina, joten eivät jääneet käyttöön.
Lehden listassa oli outo puute: ezaa/exaa ei mainittu lainkaan, ainoastaan tree, lsd ja broot. Näistä brootia kokeilin joskus, mutten pitänyt.
Lisäksi aivan käsittämätön virhe on esittää, että Kitty olisi Bashin ”nykyaikainen vastine”!!! Toinen on komentotulkki, toinen pääte. Ne ovat aivan eri lajin eläimiä.
-
- cd-komennon tilalle zoxide
Ehkä tyhmä kysymys mutta miksi?
-
- cd-komennon tilalle zoxide
Ehkä tyhmä kysymys mutta miksi?
Zoxiden GitHub-sivulla (https://github.com/ajeetdsouza/zoxide) on lyhyt käyttöopas ja esittelyvideo. Sieltä selviää hyödyt perinteiseen cd-komentoon verrattuna, eli mm. helppo siirtyminen pitkissä poluissa, joita käytetään usein.
-
- cd-komennon tilalle zoxide
Tuotakin olen joskus kokeillut, mutta se ei sopinut minulle – osin koska minulla on tämmöinen Zsh-funktio tekemässä omaa elämääni helpommaksi:
either-history-dmenu () {
local -a lineselect
local selection
[[ -n $(whence fzf) ]] || {
zle -M 'asenna fzf'
return 1
}
lineselect=(fzf)
if [[ $BUFFER == cd\ * || $LBUFFER == *\ \~ ]]
then
selection=$(dirs | $lineselect)
if [[ -n $selection ]]
then
selection=$(print -- $selection | cut -f 1)
[[ $LBUFFER == *\ \~ ]] && LBUFFER+=$selection || LBUFFER+=\~$selection
fi
else
if [[ -z $LBUFFER ]]
then
LBUFFER="$(fc -lnr 1 | $lineselect)"
else
LBUFFER="$(fc -lnr 1 | grep -E $LBUFFER | $lineselect)"
fi
fi
}
Lisäksi asetetaan pari valintaa Zsh:ssa:
setopt auto_pushd
setopt pushd_ignore_dups
setopt pushd_silent
Tuon jälkeen voin kirjoittaa esimerkiksi kerran ”cd ~/jotakin/jossakin/kaukana”, minkä jälkeen paikka menee pushd-pinoon. Sitten cd + PgUp, niin saan fzf:ään luettelon, josta voin valita nuolinäppäimillä liikkua aikaisemmissa kansioissa ja sitten Enterillä valita, mihin haluan:
4 ~
3 /usr/share/applications
2 /etc/X11
1 /usr/local/sbin
0 /var/lib/plocate
5/5
>
Tosin kuten joku ehkä funktiosta osaa lukea, nykyisellään funktio vain palauttaa komentoriville komennon, joka pitää vielä Enterillä vahvistaa. Aikaisemmin valinta suoraan siirsi haluttuun paikkaan, mutta silloin en voinut enää muokata paikkaa tarvittaessa.
-
- cd-komennon tilalle zoxide
Tuotakin olen joskus kokeillut, mutta se ei sopinut minulle – osin koska minulla on tämmöinen Zsh-funktio tekemässä omaa elämääni helpommaksi:
Niin sinähän itse tuota zoxide:ä ehdottelit en minä joten olisikin hieman hassua jos et sitä olisi kokeillut...
-
Niin sinähän itse tuota zoxide:ä ehdottelit en minä joten olisikin hieman hassua jos et sitä olisi kokeillut...
En varsinaisesti ”ehdottanut” vaan mainitsin, koska olin juuri nähnyt sitä suositeltavan Linux Journalissa. Vastaavia olivat McFly, duf ja delta, joista viimeisintä en ole vieläkään kokeillut!
-
Niin sinähän itse tuota zoxide:ä ehdottelit en minä joten olisikin hieman hassua jos et sitä olisi kokeillut...
En varsinaisesti ”ehdottanut” vaan mainitsin, koska olin juuri nähnyt sitä suositeltavan Linux Journalissa. Vastaavia olivat McFly, duf ja delta, joista viimeisintä en ole vieläkään kokeillut!
Niin siis viestissäsi olet lainannut itseäsi mutta olet siihen merkinnyt minut tuon asian kirjoittajaksi.
"Lainaus käyttäjältä: Whig - 06.05.25 - klo:12.24"
Vaikka kyseessä on sinun kirjoittamasi asia viestissä "« : 06.04.25 - klo:09.57 »" eikä suinkaan minun.
Edit:
Kiitos ylläpidolle lainauksen korjaamisesta, kun jostain syystä SuperOscar ei sitä itse halunnut tehdä.
-
Niin siis viestissäsi olet lainannut itseäsi mutta olet siihen merkinnyt minut tuon asian kirjoittajaksi.
Lainasin sinua lainaamassa minua! Yritin vastata kysymykseesi, joka tarkalleen ottaen kuului:
- cd-komennon tilalle zoxide
Ehkä tyhmä kysymys mutta miksi?
Tuntui järkevämmältä jättää kontekstiksi se mistä puhutaan kuin kysymys, johon vastasin.
-
Asiaan palatakseni, olen unohtanut mainita GNU Datamashin (https://www.gnu.org/software/datamash/)! En tosin tiedä, kuinka ”uusi” se on muille kuin minulle.
Datamashillä laskee nopeasti tekstitiedostoista (CSV-tiedostot mukaan lukien) erilaisia tilastollisia tunnuslukuja. Jos esimerkiksi on tämmöinen tekstitiedosto ”tuloksia.txt”:
Matti 10 10 10 11
Ville 20 21 22 23
Kalle 30 40 35 22
Pekka 20 30 10 5
Lasketaan kunkin sarakkeen summat:
$ datamash -W sum 2-5 < tuloksia.txt
80 101 77 61
Datamash sopii myös hupsuihin temppuihin. Tässä katsotaan /etc/group-tiedostosta käytetyt GIDit sadan numeron alueittain (0–99, 100–199, 200–299 jne.). Ensimmäinen sarake kertoo alueen aloittavan numeron, kaksi muuta pienimmän ja suurimman käytetyn. (400–499-alue tulee päinvastaiseen järjestykseen, koska openSUSE täyttää aluetta lopusta alkuun päin.)
$ datamash -st: bin:100 3 cut 3 < /etc/group | datamash -st: groupby 1 first 2 last 2
0:0:98
100:100:127
1000:1000:1000
1500:1500:1500
400:499:458
65500:65533:65534
Saman tekisi totta kai millä hyvänsä ohjelmointikielellä (sh, AWK, Python…), mutta Datamash on usein kätevin, jos valmiiksi tietää, mitä pitää tehdä.