[완료] dd에서 진행상황 보여주는 옵션이 없는 이유는?

sb778의 이미지

작업 걸어놓고 4시간 정도 기다리다가 문득 궁금해졌습니다.
왜 저렇게 만들었을까하는 물음입니다.
QnA 게시판에 올리는게 적절한지 모르겠네요.

planetarium의 이미지

man dd
해보시면 USR1 signal을 이용해 진행상황을 확인할수 있는 방법이 나옵니다.

sb778의 이미지

아, manpage에 이미 들어가있었군요. 그렇다면 필요성은 인지하고 있다는 것인데, 확인할 수 있는 방법이 이미 있으니 따로 집어넣을 필요가 없다는 생각이었을까요? 확인 방법은 압니다만 왜 옵션으로 추가하지 않았을까 하는 뻘생각이었습니다;;

익명 사용자의 이미지

상당수의 그 옛날 유닉스 명령어는 진행상황 같은 것은 출력 안합니다. dd뿐만 아니라 cp, rm 등등도 마찬가지죠.

sb778의 이미지

음... 명령어들이 태어날 때는 데이터 크기가 지금처럼 크지 않았기 때문이려나요? 그런데 cp와 rm에는 -v가 있지 않나요?

sb778의 이미지

음... 명령어들이 태어날 때는 데이터 크기가 지금처럼 크지 않았기 때문이려나요? 그런데 cp와 rm에는 -v가 있지 않나요?

ydhoney의 이미지

Art of Unix Programming(정보문화사) 49쪽, 무언의 법칙 중

Unix의 가장 오래되고 완고한 디자인 규칙 중 하나는 프로그램이 뭔가 긴요하게 할 말이 없으면 입을 다물고 있어야 한다는 것이다. 이 규칙에 잘 맞는 Unix프로그램은 불필요한 메시지로 소란을 피우거나 사용자를 귀찮게 하지 않고 할 일만을 조용히 처리할 것이다. 침묵은 금이다.

이러한 "침묵은 금이다" 라는 규칙은 원래 Unix가 비디오 디스플레이보다 먼저 태어났기 때문에 생겨났다. 1969년도에 사용되던 느려터진 프린팅 터미널에서는 불필요한 출력 때문에 사용자들의 시간을 흘려버리기 일쑤였다. 지금은 그런 불편함이 사라졌지만 간결함을 추구하는 훌륭한 규칙은 지금까지 남게 되었다.

잘 설계된 프로그램은 사용자의 관심과 주의를 소중하게 여겨서, 되도록 꼭 필요한 경우에만 시간을 끈다.

이후 누군가 댓글로 344쪽 내용을 타이핑해주는데..

ymir의 이미지

Silence Is Golden

We cannot leave the subject of interactive user interfaces without exploring one of the oldest and most persistent design tropes of Unix, the Rule of Silence. We observed in Chapter 1 that well-designed Unix programs with nothing interesting or surprising to say should shut up, and suggested there are good reasons for this that have long outlasted the slow teletypes on which Unix was born.

Here's one: Programs that babble don't tend to play well with other programs. If your CLI program emits status messages to standard output, then programs that try to interpret that output will be put to the trouble of interpreting or discarding those messages (even if nothing went wrong!). Better to send only real errors to standard error and not to emit unrequested data at all.

Here's another: The user's vertical screen space is precious. Every line of junk your program emits is one less line of context still available on the user's display.

Here's a third: Junk messages are a careless waste of the human user's bandwidth. They're one more source of distracting motion on a screen display that may be mediating for more important foreground tasks, such as communication with other humans.

Go ahead and give your GUIs progress bars for long operations. That's good style — it helps the user time-share his brain efficiently by cuing him that he can go off and read mail or do other things while waiting for completion. But don't clutter GUI interfaces with confirmation popups except when you have to guard operations that might lose or trash data — and even then, hide them when the parent window is minimized, and bury them unless the parent window has focus.[111] Your job as an interface designer is to assist the user, not to gratuitously get in his face.

In general, it's bad style to tell the user things he already knows ("Program is starting up...", or "Program is exiting" are two classic offenders). Your interface design as a whole should obey the Rule of Least Surprise, but the content of messages should obey a Rule of Most Surprise — be chatty only about things that deviate from what's normally expected.

This rule has even greater force for confirmation prompts. Constantly asking for confirmation where the answer is almost always “yes” conditions the user to press “yes” without thinking about it, a habit that can have very unfortunate consequences. Programs should request confirmation only when there is good reason to suspect that the answer might be “no no no!” A confirmation request that is not a surprise is a strong hint of bad design. Any confirmation prompts at all may be a sign that what your interface really needs is an undo command.

If you want chatty progress messages for debugging purposes, disable them by default with a verbosity switch. Before releasing for production, relegate as many of the normal messages as possible to being displayed only when the verbosity switch is on.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

sb778의 이미지

음... 사람 눈에는 보고싶은 것만 보인다고 하죠;; "Go ahead and give your GUIs progress bars for long operations. That's good style" 유닉스의 미니멀리즘은 아름답게 생각합니다.

sb778의 이미지

고민하던 내용을 정리해봅니다.

cp같은 경우에는 항목별로 처리되므로 각 항목을 보여줄 필요가 있다. 그래서 -v 옵션이 있다. 다스크 단위로 처리하는 dd와 상황이 다르다.

진행상황 출력으로 인해 속도가 느려지는 문제를 피한다는 부분은 출력되는 양이 많지 않고 네트워크 자원 소비량도 많이 않을 거라 생각했었는데, 매 스텝마다 진행상황을 체크하고 표출하려면 상당한 속도 저하가 있겠다는 생각이 든다. 가뜩이나 오래 걸리는 작업인데 스텝 수도 엄청 많을듯.

GUI는 dd의 태생 환경과는 거리가 멀고, 상식적으로 봐도 GUI로 진행상황을 표출하는 것은 dd에서 불필요하고 비효율적으로 보인다. 굳이 진행 상태바를 보고 싶다면 bar를 이용할 수도 있겠다. 하지만 그 오랜 작업시간동안 상태바를 지켜보고 있을 일은 없을테고, 필요한 순간에만 USR1 kill 시그널을 보내서 확인하는 것이 훨씬 효율적일 것이다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.