Hacker News new | past | comments | ask | show | jobs | submit login

I thought it came from JCL's DD (Data Definition) statement. Even the parameter syntax is somewhat reminiscent of JCL's DD, while being completely alien to normal Unix commands.



It is. It was making fun of the IBM command.


The dd-style syntax isn't actually that bad. of=X if=Y is possibly easier to remember than -o X -i Y, while still being less typing that --output X --input Y.

JCL itself has a lot of warts, no denying that. But the basic idea behind the DD statement is interesting. In Unix, file descriptors are just numbers; whereas, in classic MVS, instead of numeric file descriptors the API uses 1-8 character names (DDNAMEs). While in principle a Unix program can inherit any number of file descriptors, in practice very few programs inherit any more than 0-2, because remembering numbers has poor usability. In classic MVS, it is not uncommon for a program to inherit more than 3 file descriptors, because they are assigned names not numbers. ("File descriptors" and "inherit" are not quite the right terms, but trying to use Unix-like language to make it comprehensible to people.)

(And I say classic MVS, because contemporary z/OS is actually a conforming Unix implementation so it supports numeric file descriptors in the Unix API, as well as alphanumeric DDNAMEs in the classic MVS API.)


My favorite, related, piece of trivia about JCL is the IEFBR14 program: the no-op program that took a few attempts to get it right :-) [1]. Its entire purpose was motivated by JCL not having primary commands to do file management, which is only allowed as a "side effect" of executing a program

[1] https://en.wikipedia.org/wiki/IEFBR14#Implementation


>> JCL itself has a lot of warts, no denying that.

Unix Programmer: "Huh? Why did you comment out the entire program, except for that one function?"

Mainframe Programmer: What? No, those are JCL statement lines."

Unix Programmer: "..."


I'm not sure it is fair to call that a wart. Back when JCL was designed, C/C++ didn't exist yet, and nobody used "//" as a comment syntax. (C's predecessor BCPL introduced // comments, but it was designed in 1967, and OS/360 was already shipping to customers in 1966; C itself was designed in 1972, and initially it didn't have // comments; C++ borrowed them from BCPL in the 1980s, and then C borrowed them back from C++ after that.)

A more obvious example of a wart would be how it exposes low-level details of disk layout (e.g. space allocation in cylinders and tracks), which improved performance and simplified implementation back in the 1960s, but which nowadays is just useless complexity–modern disks have completely different physical layout, and you have to buy expensive mainframe-specific SAN controllers which know how to simulate the ECKD physical layout of legacy mainframe disks on top of modern industry standard disks/SSDs.


I agree that this is just a "wart" from the perspective of a modern programmer, faced for the first time with JCL (and mainframes in general).

I guess this happens less often otherwse there would be many more of this kind of joke.


I still think that unless you are very proficient on it, having to look at the manual every time you use dd is a good thing.


Which is funny on a different note because ibm had the deskstar hard drives better known as the deathstar drive


I'm pretty sure that was coined specifically in reference to the Deskstar 75GXP series, not Deskstar drives in general. The Deskstar brand name is actually still used by HGST for its NAS drives, which seem to be reasonably well-regarded for their intended applications.


I still pause to remember that I have to type 'if=' and 'of=' and 'bs=' instead of just remembering the order of arguments.


What always gets me is ssh, scp and sftp... having to specify oPort= for sftp compared to -p for ssh.


You can use -P.


Whoever made it -p in ssh & -P in scp can fuck right off.


The reason is that scp was designed as a secure replacement for rcp, which was designed as a remote version of cp. The flags -p and -r were inherited from cp by rcp (see https://linux.die.net/man/1/rcp), so for compatibility scp had to use the same flags.

As for ssh, I haven't looked at its history, but I suspect it's older than scp; the intuitive flag for "port" is -p, so that's what ssh used.


Good to know. I wonder if that's a recent improvement? Last time I was doing lots of sysadmin work was 2011.


I'd prefer ddrescue or just pv, just for the progress meter, and saner arguments.


`tldr`[0] can be helpful for quick references like this. I never worry about commands like `ssh` anymore because of this. This is the output for `dd`:

$ tldr dd

dd

Convert and copy a file.

- Make a bootable usb drive from an isohybrid file (such like archlinux-xxx .iso):

    dd if=file.iso of=/dev/usb_drive
- Clone a drive to another drive with 4MB block and ignore error:

    dd if=/dev/source_drive of=/dev/dest_drive bs=4m conv=noerror
- Generate a file of 100 random bytes by using kernel random driver:

    dd if=/dev/urandom of=random_file bs=100 count=1
- Benchmark the write performance of a disk:

    dd if=/dev/zero of=file_1GB bs=1024 count=1000000
[0]: https://github.com/tldr-pages/tldr


I've been using a similar command called 'cheat' [pip install cheat] which does more or less the same thing. I wonder which of the two is more comprehensive. How would I check this efficiently?




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: