this post was submitted on 13 Feb 2024
593 points (97.3% liked)
Technology
59593 readers
3837 users here now
This is a most excellent place for technology news and articles.
Our Rules
- Follow the lemmy.world rules.
- Only tech related content.
- Be excellent to each another!
- Mod approved content bots can post up to 10 articles per day.
- Threads asking for personal tech support may be deleted.
- Politics threads may be removed.
- No memes allowed as posts, OK to post as comments.
- Only approved bots from the list below, to ask if your bot can be added please contact us.
- Check for duplicates before posting, duplicates may be removed
Approved Bots
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
I'd just like to correct you on UNIX following the "do one thing, and do it good" philosophy. UNIX preaches that, but is doing everything else than following it. From cat to grep to cp and dd and many many many other redundant tools that exist in the system. All that said, I would like to point out it's a completely pointless philosophy which serves no purpose it once had.
In the age of text terminals and when your work was managing phone books and writing documents, that made sense. Today we have far too complex systems to just expect people to work by making a pipe with 5 tools lined up to achieve something a single click in menu can do.
...redundant with what? Sure, instead of
grep
you can usesed -e g/re/p
: First came ed which can do the same but requires the whole file to be loaded into memory so grep was written as a way to search through files ergonomically and quickly. Quite a bit later came sed to do more complex operations on files in a streaming manner: Sed is for streaming editing, ed is for interactive editing, they happen to share a common vocabulary but really are made for different things. grep knows exactly one word from that vocabulary and applies it to multiple files in a single command, something that's not really suitable for the editors.Can't think of anything that's redundant with cp, unless we leave the terminal. dd and cat might have some overlap but only if you combine cat with shell redirection. I'll freely admit that dd is a hell of a wart, though, it is so damn ancient it predates unix command line option conventions.
No. The way it usually works is that an end-user makes a click and things get handled by five different tools, completely behind the scenes. Power-users then can come along and customise that stuff as they wish.
That's the whole point, you are not suppose to use
grep
ifsed
works. You are not suppose to usecp
ifcat file > new.file
works. That's the "UNIX way", which is stupid ascp
brings a lot more features when it comes to files. Back when that "rule" was inventedcat
only printed files on screen or piped them through. Nothing more. Today you can do all kinds of things with it and to be honest am happy that there are multiple tools doing the same thing. Grep is fine for some things RipGrep and SilverSearcher for others. Am not going to handicap myself or wait for 16h forgrep
to finish digging inefficiently through files because someone said I had to do things "UNIX way".It's time we get rid of old ways and embrace modern computing, up to a point where people started building note taking applications in whole web browsers.
No. You
grep
if you are searching for something. Yoused
when you're editing a file in an automated manner. You usecp
if you copy a file.cat foo > bar
is not, in the very slightest, idiomatic, and never was:cat foo bar > baz
is and that's precisely whycat
is named like that, quoth the man page: "cat - concatenate files and print on the standard output".cp
can't do that. If you usecat
with a single argument then without redirection, as the equivalent of DOS'stype
.Don't think of "one thing, and one thing well" as "there must be no overlapping features", but "every program has a clearly-defined use case". If it can be used for something else, like single-argument cat, then that's fine, but that doesn't make cat the program to use when copying files.
And it means "there must be no overlapping features when combining random programs in arbitrary ways" even less: Your
cat foo > bar
uses two programs,cat
andsh
. If the combination between multiple programs was restricted to not have features available elsewhere then you wouldn't get any of the benefits of being able to combine programs, this explosion of possibilities and with that approaches is precisely the advantage of combination.Never heard of silversearcher, but ripgrep is a straight-up grep replacement. Grep is 50 years old, ripgrep takes 50 years of experience people had with using the original to design a program that fulfils grep's purpose even better. There's no council of greybeards saying "there already is a program like that you shall use, we can't have two programs doing the same thing", that's not Unix but python.
I tend to agree. I use nushell, haven't really gotten into ripgrep I probably just don't grep often enough to care. My editor is helix which breaks in may ways with the line that started with ed but keeps the core philosophy intact, nay, adheres better to it because it was bold enough to get rid of hysterical raisins. As ripgrep it's an iteration of the same core idea and principles of an old program, in the light of 50 years of experience people had using it.
You could also combine a text editor and maybe pandoc. Different notes? Different files, that's what the file system is for. Need to find something in your notes? grep.
You'll be hard-pressed to find an actual use-case for a simple note-taking app under unix because the combination of things everyone half-way acquainted with the system already does it. There's org mode, yes, but org mode isn't simple. Also emacs is a completely different operating system.
Well, "duplicate" functionality isn't counter, but generally it's not quite "duplicate" either.
cat doesn't do much, and technically in most cases where people use cat, they can skip the use of cat. cat and grep aren't at all redundant, but maybe you mean cat |grep , versus "grep file", but really the first form is not a design intent, it's that cat is a habit to "get content to screen" and "pipe to grep" is a habit to filter out whatever content was on screen.
cp and dd are not really the same. dd is meant to take specific blocks from one place and put them in a specific place in one other file. cp is about copying whole files only, and can do a bunch of files to one directory.
As to it being 'obsolete', well the thing is that UI design has been swinging back to "CLI-y" ways, because you only have so much real estate on screen for guided menu driven action, and a fairly open ended universe of things people want to do. When people use office, they usually just start typing what they want rather than trying to find it by navigating the ribbon.
Though the "one tool and do it well" usually doesn't happen in GUI land (closest I can think is NextStep had some of it, and vestigial bits of that are possible in macos, though never used), but it's still plenty valuable.
The UNIX philosophy isn't about having only one way to do things - it's about being able to use tools together. The deliberately simple interface is what makes it so powerful - almost any existing too can become part of a pipeline. It's adaptable.