Harkitse joitain yleisiä * nix -järjestelmiä (sanovat Debian, CentOS, Arch ja Kali).

Olen aina käytetty find; En muista GNU-haun avulla, mutta -esimerkistä olen nähnyt, että oletin, että GNU-löydön syntaksin voi olla yksinkertaisempi (vaikka saattaa sallia vähemmän toimintoja).

Minulla on kaksi kysymystä:

  1. Onko find oletus ”etsi tai toimi” -apuohjelma tavallisissa järjestelmissä, vai tulevatko järjestelmät molempien find ja GNU find?

  2. Oliko GNU find tarkoitti olevan yksinkertaisempi kuin find ?

Kommentit

  • olet aina käyttänyt GNU-etsintää linuxissa, ellet ' on find -palvelun suuri käyttäjä busyboxissa tai androidissa 😉 Muissa kuin linux-järjestelmissä GNU-haku on yleensä nimeltään gfind.
  • Kokeile find --version😉
  • Järjestelmät, joihin ' viitat, ovat GNU-järjestelmiä, useimmille GNU / Linux, vaikka Debian on saatavana muille muutamille muille ytimille hyvin. Joten ' ei ole yllättävää, että find -toteutus näissä järjestelmissä on GNU find.

vastaus

GNU-apuohjelmat toteuttavat usein POSIX-standardin ja laajentavat sitä sitten myös lisätoiminnoilla mukavuuden lisäämiseksi (ja sen kääntöpuolena laski siirrettävyyttä Unices-laitteiden välillä). Siirrettävyys on se, miksi näet joskus tällä sivustolla vastauksia tai kommentteja, jotka ovat erittäin varovaisia huomauttamaan, kun oletetaan GNU-apuohjelma tai jokin muu erityinen apuohjelman toteutus.

Jos käytät Linuxia järjestelmässä hyvin todennäköisesti käyttäisit find GNU-toteutusta, eikä sinulla todennäköisesti olisi toista find asennettu. Muissa kuin Linux-järjestelmissä sinulla on natiivi find ja mahdollisuus asentaa myös GNU find (joka asennetaan useimmiten nimi gfind tai harvemmin gnufind).

Kuten useimmissa GNU-apuohjelmissa, GNU find toteuttaa ja laajentaa standardin find määrittelyä . Siksi se ei ole ”yksinkertaisempi”, vaan on epäilemättä monimutkaisempi, jotta se olisi mukavampaa, ja sen kanssa olisi jonkin verran helpompaa tehdä tiettyjä monimutkaisia tehtäviä kuin tiukasti standardin mukaisen find .

Laajennetut find -toteutukset toteuttavat usein esimerkiksi -maxdepth ja -mindepth predikaatit, joita standardi ei mainitse, ja erityisesti GNU find -sisällöllä on myös -printf tulostaa löydetyt polkut käyttämällä erilaisia muotoilumahdollisuuksia (vakiomallisessa find ei ole -printf), ja predikaatit suoritetaan säännöllisten lausekkeiden yhteensopivuus polkujen nimissä, samoin kuin joukko muita epätyypillisiä predikaatteja, joista joitain löytyy myös muilta find -toteutuksilta (mahdollisesti aina niin vähän erilaisilla semantiikoilla, kuten -execdir whi ch toimii hieman eri tavalla riippuen siitä, mitä find käytetään 1 ).

-delete predikaatti on epätyypillinen, mutta GNU find ja find joissakin muissa kuin Linux-järjestelmissä. GNU find ”s -delete valittaa, jos käytät sitä tyhjän hakemiston poistamiseen, mutta vastaava vaihtoehto esim. OpenBSD” s find ei (kumpikaan ei poista tyhjää hakemistoa).

Useimmat Linux-järjestelmät käyttävät jakelusta riippumatta samoja coreutils- ja findutils-työkalusarjoja (kuten busybox on tietysti olemassa). Jos haluat käyttää täysin erilaista työkalutoteutusta, sinun on siirryttävä johonkin avoimen lähdekoodin BSD-järjestelmistä tai macOS-, Solaris-, AIX- tai muuhun kaupalliseen Unixiin.


1 GNU find valmistaa ./ polkuihin, kun -execdir käytetään jotkut muut toteutukset eivät t.

Kommentit

  • Ja -print0 ja -direxec ja -delete, ja … ;-). GNU-työkaluissa käytettävissä olevat tyhjät erotinvaihtoehdot ovat erityisen käteviä.
  • @StephenKitt Mutta harvoin tarvitaan 🙂
  • oikein, paitsi kun kirjoitetaan muita kuin POSIX-vastauksia tähän ;-). (Tai komentosarjoja, joiden on toimittava missä tahansa .)
  • GNU-dokumentaation pääongelma on, että se yrittää antaa ihmisten käyttää epätyypillisiä aliaksia POSIX-menetelmiin ja aiheuttaa siten liittyvät komentosarjat toimittajan lukituksen luomiseen.
  • @StephenKitt -print0 on saatavana myös * bsd: ssä ja solarisissa; mutta solaris xargs -0 ei toimi ', joten gxargs -0 (osoitteesta /usr/bin/sfw) tulisi käyttää sen sijaan.

Vastaa

Mitä ihmiset usein viittaavat koska Linuxia kutsutaan paremmin nimellä GNU / Linux: Linux plus GNU. Siksi käyttämäsi työkalut ovat todennäköisesti GNU.

  • Linux: ydin, sitä käytetään GNU / Linuxissa, Androidissa ja monissa muissa järjestelmissä.
  • GNU: an käyttöjärjestelmä, jota käytetään usein Linux-ytimen kanssa, mutta jota voidaan käyttää myös BSD: n, Hurdin, Cygwinin kanssa (DLL Microsoftin Windowsille, se teeskentelee olevan ydin), WSL: lle (Windows-alijärjestelmä Linuxille: GNU ilman Linuxia, Microsoftin Windows), HPUX, Solaris, Dec Athena ja monet muut.

Siksi käytät todennäköisesti GNU-hakua.

GNU on projekti uudelleen kirjoita, koko Unixin ilmainen (ilmainen kuin vapaudessa, ei kuten hinnassa) versio , mukaan lukien työkalut, kuten find, GNU-projekti ei välitä POSIX-yhteensopivuudesta: Se noudattaa missä on järkevää, mutta tekee myös parannuksia.

Oletat myös, että on vain yksi muu find on väärä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *