*NIX enthusiast, Metal Head, MUDder, ex-WoW head, and Anon radio fan.

  • 0 Posts
  • 99 Comments
Joined 2 years ago
cake
Cake day: June 12th, 2023

help-circle
rss
  • I do not agree with the premise that there needs to be a negative repercussion to doing something before we look at examining the behavior.

    I guess I could do some serious gymnastics and reach for something like “when a text file is longer than your terminal scrollback and you cat it, you lose history that you may have been expecting to reference”.

    Many of the sort of examples I’m referencing involve spawning subshells needlessly, forking/execing when it’s not actually needed, opening file descriptors that otherwise wouldn’t have been opened. We’re in an interesting bit of the tech timeline here where modern computing power makes a lot of this non-impactful performance wise, but we also do cloud computing where we literally pay for CPU cycles and IOPS.

    I guess I’m just a fan of following best practices to the extent practical for your situation, and ensuring that the examples used to inform/teach others show them the proper way of doing things.

    No bad things happen when I pour a Hefe into a Pilsner glass either, but now the Germans are coming for me.


  • So most importantly I’d add -F to the LESS environment variable. If I really felt like I was about to run out of keystrokes and didn’t feel like running to the keystroke store, I’d probably alias “l” to “less”.

    That aside, you can use a hammer to push a screw into wood. You can use a screwdriver to beat a nail into a board. You can use a board to drive a dowel through a plank. The job gets done either way.

    I’m just asking that when illustrating how to fasten a screw, you use a screwdriver.

    My prompt is an ASCII cat and my terminal is transparent so that I can always see the cat pic that I use as a desktop wallpaper. Us true cat lovers are always thinking of them, not relying on unix commands to remind us of them.

    Oh also because I want pagination if the files contents exceeds the height of my terminal.





  • Once upon a time I would have been more particular about the “which issue”. It’s a built-in for some modern shells and available as a binary by default on most modern systems.

    You are correct though, if you want to write a 100% POSIX compliant shell script you’re better off using command, type or actually looping over the contents of $PATH and checking for the presence of your desires binary.

    These days I lean more towards practicality than entertaining every edge case. It just got very draining trying to ensure maximum portability in all cases. Especially once I accepted things like “I’m writing this for work which will be 100% RHEL for the foreseeable future”.

    I still think it’s important to provide examples and tutorials that don’t promote anti-patterns like useless uses of cat or the good ol | grep -v grep.



  • My dumbass can only come up with three:

    1. You are already root (ok, fine)
    2. You have made /dev/ writable by non-privileged users
    3. Your non-privileged user already owns the symlink /dev/nul. Which “ok, fine”, but also the point of command would have to be to functionally do nothing other than print out the error ln: failed to create symbolic link '/dev/nul': File exists

    I would love to understand the use case behind #2. I am also curious to see even 7 more cases, let alone your figurative million.

    In regards to #3 even if the behaviour of ln was to replace a symlink if it already existed, it’ll probably have to unlink() the existing symlink, which I’m pretty sure is gonna get you a permission denied error on any /dev filesystem with sane permissions.


  • Dear linux newbies of the fediverse:

    Please do not run cat for the sole purpose of copying a single files content to STDOUT

    Your system almost certainly has a pager on it (e.g. ‘less’, ‘more’, ‘most’). Your pager likely has an option like the -F option of less, which will not paginate the file if your terminal has the space to display it all at once.

    You do not need to involve cat to get a files contents into a variable. Any POSIX compliant shell will support MYVAR=$(</tmp/myfile)

    You do not need to involve cat to iterate over the lines of a file. You can do things like:

    while read myline
    do
        printf "found '%s'\n" "$myline"
    done </tmp/myfile
    

    If you want to concatenate multiple files, but do not care if they all exist, you might use /dev/null to suppress the “no such file” error from cat as such cat file1 file2 file3 2>/dev/null. Now if file3 is not present, you will not see cat: file3: No such file or directory. 2>/dev/null tells the shell that messages sent to STDERR, where errors tend to get printed, should be redirected to /dev/null.


    Please do not invoke a command only to see if it is available in the directories listed your PATH environment variable

    As an aside this is not the same as seeing if it’s installed.

    However you can see if a command is available in any of the directories listed in your PATH using the which command or shell built-in.

    You might want to do something like:

    #!/bin/bash
    
    which node &> /dev/null
    HAS_NODE="$?"
    
    # ... MORE CODE HERE ...
    
    if [[ $HAS_NODE ]]
    then
        # something you only do if node is present
        :
    else
        # do something else or print a friendly error
        :
    fi
    

    This way you don’t see the output of the “which” command when you run the script, but you do get it’s exit code. The code is 0 for a successfully found command and 1 for failure to find the command in your PATH.







  • Inane. Intentionally convoluted, or someone following the absolute worst tutorials without bothering to understand anything about what they’re reading.

    I have questions:

    • Why are your configurations world readable?
    • Why are you setting the executable bit on a .conf file?
    • Why change the files group alongside the owner when you’ve just given the owner rxw and you’re going to set it back?
    • If it was 644 before, why 774?
    • Why even change the mode if you’re going to change the ownership?
    • Why do you want roots vimrc instead of your users
    • Why do you hate sudoedit
    • Why go out of your way to make this appear more convoluted than it actually is?

    Even jokey comments can lead to people copying bad habits if it’s not clear they’re jokes.

    This was a joke right? I was baited by your trolling?




  • The amount of software available in the package manager, without adding external repositories, exceeds that I’ve seen in any other distro I’ve used. Even with epel, I feel like others fall short.

    The ability to modify the build time flags of software while still using the package manager is also huge. I hate when ffmpeg doesn’t have speex support because some upstream dev figured it was a corner use case.

    It’s me, I’m the target demographic. I’m the one asshole who wants to build ffmpeg with speex support, clamav without milter support and rxvt WITHOUT blink support.

    There are some pretty great userspace helpers too. Things to ensure your kernel is always built with the same options. Things to upgrade all your python or perl modules to the new interpreter version for you. Tools for rebuilding all the things based on a reverse dependency search.

    Slotted installs are handled in a sane, approachable, and manageable way.

    The filesystem layout is standards compliant.

    I recall someone on /r/Gentoo saying something like “Gentoo is linux crack, when you get a handle on it, nothing compares.”

    When I boot my laptop into fedora/arch/mint/etc (or really any non-bsd based distro), I feel like I’m using someone else’s laptop. There are a bunch of git repos under /usr/src for the software I wanted that wasn’t in the package manager. I need to manage their updates separately. Someone else has decided which options are in this very short list of GUIs. I’m using whatever cron daemon they chose, not the one I want. Why is there a flat text log file under /var/db/? Why won’t you just let me exist without any swap mounted? $PATH is just a fucking mess.