4 ms·
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 norm
by cesarb 8y ago
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.
- ori_b 8y agoIt is. It was making fun of the IBM command.
- paulie_a 8y agoWhich is funny on a different note because ibm had the deskstar hard drives better known as the deathstar drive
- 0xcde4c3db 8y agoI'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.
- skissane 8y agoThe 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.)
- evacchi 8y agoMy 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 https://en.wikipedia.org/wiki/IEFBR14#Implementation
- YeGoblynQueenne 8y ago>> 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: "..."
- skissane 8y agoI'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.
- YeGoblynQueenne 8y agoI 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.
- marcosdumay 8y agoI 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.
- sverige 8y agoI still pause to remember that I have to type 'if=' and 'of=' and 'bs=' instead of just remembering the order of arguments.
- code_duck 8y agoWhat always gets me is ssh, scp and sftp... having to specify oPort= for sftp compared to -p for ssh.
- trinitry3 8y agoYou can use -P.
- kasey_junk 8y agoWhoever made it -p in ssh & -P in scp can fuck right off.
- cesarb 8y agoThe 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 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.
- code_duck 8y agoGood to know. I wonder if that's a recent improvement? Last time I was doing lots of sysadmin work was 2011.
- dmartinez 8y ago`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 https://github.com/tldr-pages/tldr