Kuinka estän dd-lähdön?

Minulla on bash-komentosarja, joka luo tiedoston tiedostoon dd. Ongelma on, että dd heittää suuren määrän lähtöä, joka menee sekaisin komentosarjoni tuloksen kanssa. Etsiminen ympärillä Olen löytänyt ratkaisun:

dd if=boot1h of="/dev/r$temp1" >& /dev/null 

Onko olemassa vaihtoehtoa, vai ohjaako se uudelleen /dev/null ainoa tapa?

Kommentit

  • Olen kadonnut viimeisestä lauseestasi ’, ” komentosarjan ei pitäisi pyytää oikeuksia ”. Tällä ei näytä olevan mitään tekemistä ’ uudelleenohjaaminen osoitteeseen /dev/null – sinä ’ uudelleen sudoing, koska dd tarvitsee kirjoitusoikeuden osoitteeseen /dev/r$temp1 (oletan). Sinun ’ on tehtävä se riippumatta siitä, miten tukahdutat dd ’ -lähtö; ulostulon uudelleenohjaaminen /dev/null ei tarvitse ’ edellyttää root
  • I ’ m idiootti. Toimintaa ei sallittu, koska / dev / r $ temp1 /. I

m todella pahoillani. ’ m muokkaan komentosarjaa, joka ’ ei ole minun ja en huomannut sitä ’ . Todella pahoillani.

  • joten ongelma on, että tavallinen käyttäjä ei voi kirjoittaa / dev / r $ temp1 tai dev / null
  • Don ’ älä huoli siitä; Muokatin sitä hieman hämmentävän osan poistamiseksi
  • Jos ’ et käytä mitään dd ’ lisäominaisuuksia, käytä sen sijaan cat, head tai tail.
  • Vastaa

    dd(1) -sivulta:

     status=noxfer suppress transfer statistics 

    näin:

    dd if=boot1h of="/dev/r$temp1" status=noxfer 

    Tämä tuottaa edelleen

    0+1 records in 0+1 records out 

    roskat, kun dd poistuu, joten uudelleenohjaus datasäiliöön on todellakin ainoa vaihtoehto.

    Kommentit

    • sitä pelkäsin ’.
    • Uskon, että status = noxfer voi liittyä SIGUSR1-signaaliin, joka normaalisti näyttää siirron tilasto. En kuitenkaan halua testata, onko totta ’ totta, mitä sanon.

    Vastaa

    Lisää status=none:

    dd if=boot1h of="/dev/r$temp1" status=none 

    Kohdasta dd (coreutils) 8.21 asiakirjaa :

     "status=LEVEL" Transfer information is normally output to stderr upon receipt of the "INFO" signal or when "dd" exits. Specifying LEVEL will adjust the amount of information printed, with the last LEVEL specified taking precedence. "none" Do not print any informational or warning messages to stderr. Error messages are output as normal. "noxfer" Do not print the final transfer rate and volume statistics that normally make up the last status line. "progress" Print the transfer rate and volume statistics on stderr, when processing each input block. Statistics are output on a single line at most once every second, but updates can be delayed when waiting on I/O.  

    Kommentit

    • @roaima – vain utelias, miksi muokkaan lainausta man-sivulta?
    • @don_crissti Tunsin kontekstin (puuttumisen) ottaessani lainausta man-sivulta tarkoittavan, että se vaati hieman erilaista sanamuotoa. Kun se on -sivulla , se ’ on hieno; täällä se näytti oudolta.
    • @roaima – okei – uteliaisuus tyytyväinen 🙂 – mutta huomaa, että linkit info page; tässä alkuperäisessä vastauksessa oli tarkka lainaus man page . Olisin kopioinut / liittänyt suoraan info -sivulta, jos man -sivu on epäselvä, mutta sinusta riippuen … Voi, btw, kiitos paljon muista kommenteistasi vastauksestani, joka liittyy lajitteluun viikonpäivittäin.
    • Ei näytä olevan ’ t saatavilla dd (coreutils) 8.13: dd: invalid status flag: `none' Try `dd --help' for more information.
    • IMO Tämän pitäisi olla hyväksytty vastaus

    Vastaus

    Tulevaa tarvetta varten:

    Dd-lähdön estäminen ohjaa stderr: n kokonaan uudelleen / dev / null:

    dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null 

    Tämä toimii hyvin, jos haluat esimerkiksi ajastaa prosessin käyttämällä bashissa olevaa aikakomentoa ja liittää tuloksen muuttujaan saamatta mitään dd: n tuottamaa tulosta.

    viite: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html

    Vastaa

    Jotain tämän pitäisi toimia myös BASH: n ja ZSH: n uusimpien versioiden kanssa:

    dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null 

    P.S. Tämä on vain esimerkki, jonka juoksin …

    Vastaa

    Millä tahansa Unix-sovelluksella tai -komennolla voit estää kaiken lähdön

    cmd >/dev/null 2>&1

    Ensimmäinen bitti ohjaa vakiolähdön (yksikön numero 1) kohtaan / dev / null. Mutta tarvitset toisen osan myös ohjaamaan virhelähdön (yksikön numero 2) samaan paikkaan kuin numero 1.

    UNIXissa STDIN = 0, STDOUT = 1 ja STDERR = 2


    Kommentit

    • Oikeastaan stderr on tiedostokuvaaja 2 . (Oletan, että ” STDERR = 3 ” on vain kirjoitusvirhe.)
    • Kaikkia lähtöjä ei ole toivottavaa estää . Jos tapahtuu virhe, haluaisimme nähdä virheilmoituksen.
    • cmd 2>logfile.txt näyttää olevan paremmin mukautettu

    Vastaa

    Jos ymmärrän oikein, mitä yrität tehdä, laitatko kyseisen sudo -komennon komentosarjaan ja odotatko komentosarja pyytää salasanasi, kun se suoritetaan siellä? Tällöin teet asioita vain monimutkaisella tavalla.

    Puhtaampi ratkaisu on kirjoittaa komentosarja tavalliseen tapaan (eli ilman sudo) ja aja se pääkäyttäjänä . Syynä tähän on, jos komentosarja tarvitsee pääkäyttäjän käyttöoikeuden, anna sille vain käyttöoikeus (miksi odottaa tiettyä komentoa?). Tarkista komentosarjassa, suoritetaanko se pääkäyttäjänä, tekemällä jotain tällaista:

    if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi 

    Kommentit

    • ei. Se ’ on juuri se, mitä en halua tehdä ’. En halua ’ halua komentosarjan suorittavan vain pääkäyttäjänä, koska en halua ’ halua dd: n näyttävän tuotoksen. Tarkistuksesi korjata, jos haluan, että komentosarja suoritetaan pääkäyttäjänä.
    • @dierre Joten miksi tarvitsit ensin sudo? Normaalien käyttäjien tulisi pystyä ohjaamaan asiat /dev/null ihan hyvin.
    • I ’ m Ubuntun ja sen avulla ’ Toimintojen antaminen minulle ei ole sallittua … uhm …
    • Olen ’ pahoillani. En huomannut ’ huomanneet, että luon jotain / dev / -kansioon. Käsikirjoitus ei ole minun, muokkain sitä. ’ Olen todella pahoillani.

    Vastaa

    voit ohjaa ulostulo tavalliseen tiedostoon eli

     dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log 

    Vastaa

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