this post was submitted on 19 Mar 2024
96 points (94.4% liked)

Linux

48017 readers
865 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

What do you advice for shell usage?

  • Do you use bash? If not, which one do you use? zsh, fish? Why do you do it?
  • Do you write #!/bin/bash or #!/bin/sh? Do you write fish exclusive scripts?
  • Do you have two folders, one for proven commands and one for experimental?
  • Do you publish/ share those commands?
  • Do you sync the folder between your server and your workstation?
  • What should've people told you what to do/ use?
  • good practice?
  • general advice?
  • is it bad practice to create a handful of commands like podup and poddown that replace podman compose up -d and podman compose down or podlog as podman logs -f --tail 20 $1 or podenter for podman exec -it "$1" /bin/sh?

Background

I started bookmarking every somewhat useful website. Whenever I search for something for a second time, it'll popup as the first search result. I often search for the same linux commands as well. When I moved to atomic Fedora, I had to search for rpm-ostree (POV: it was a horrible command for me, as a new user, to remember) or sudo ostree admin pin 0. Usually, I bookmark the website and can get back to it. One day, I started putting everything into a .bashrc file. Sooner rather than later I discovered that I could simply add ~/bin to my $PATH variable and put many useful scripts or commands into it.

For the most part I simply used bash. I knew that you could somehow extend it but I never did. Recently, I switched to fish because it has tab completion. It is awesome and I should've had completion years ago. This is a game changer for me.

I hated that bash would write the whole path and I was annoyed by it. I added PS1="$ " to my ~/.bashrc file. When I need to know the path, I simply type pwd. Recently, I found starship which has themes and adds another line just for the path. It colorizes the output and highlights whenever I'm in a toolbox/distrobox. It is awesome.

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 7 points 7 months ago* (last edited 7 months ago) (3 children)
  • I use bash, because I never had the time to learn anything else.
  • Like @[email protected] said, I use the #!/usr/bin/env bash shebang.
  • Nope
  • Also nope
  • Nope. Shell scripts reside in Git repos on Gitlab/Gitea/Forgejo and are checked out using Ansible playbooks onto the servers as necessary.
  • For scripts? Python. Read this blog post by the great @[email protected]. For interactive use? bash is just fine for me, though I've customized it using Starship and created some aliases to have colored/pretty output where possible.
  • Use shellcheck before running your scripts in production, err on the side of caution, set -o pipefail. There are best practices guides for Bash, use those and you'll probably be fine.
  • Be prepared to shave yaks. Take breaks, touch grass, pet a dog. Use set -x inside your Bash script or bash -x scriptname on the CLI for debugging. Remember that you can always fallback to interactive CLI to test/prepare commands before you put them into your script. Think before you type. Test. Optimize only what needs optimization. Use long options for readability. And remember: Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows your address.
  • Nope, it's absolutely not bad practice to create aliases to save you some typing in interactive shell. You shouldn't use them inside your scripts though, because they might/will not be available in other environments.

I switched to fish because it has tab completion Yeah, so does Bash, just install it.

Oh, I also "curate" a list of Linux tools that I like, that are more modern alternatives to "traditional" Linux tools or that provide information I would otherwise not easily get. I'll post i

ToolsDebian-Packages available

  • mtr
  • iputils-tracepath
  • iproute2
  • zsh
  • httpie
  • aria2
  • icdiff
  • progress
  • diffoscope
  • atop
  • powertop
  • ntopng
  • ethtool
  • nethogs
  • vnstat
  • ss
  • glances
  • discus
  • dstat
  • logwatch
  • swatch
  • multitail
  • lynis
  • ncdu (du-clone), alias du="ncdu --color dark -rr -x --exclude .git --exclude node_modules"
  • nnn (fully-featured terminal file manager. It’s tiny, nearly 0-config and incredibly fast. https://github.com/jarun/nnn)
  • slurm
  • calcurse
  • newsbeuter
  • tig ("ncurses TUI for git. It’s great for reviewing and staging changes, viewing history and diffs.")
  • qalc -ttyrec
  • taskwarrior
  • ttytter
  • ranger
  • ipcalc
  • pandoc
  • moreutils
  • googler
  • weechat
  • pdftk
  • abcde
  • dtrx
  • tload
  • ttyload
  • cockpit
  • sar
  • ht (hte Hex Editor)
  • dhex
  • ack (grep-clone)
  • silversearcher-ag (grep-clone)
  • ripgrep ("recursively searches file trees for content in files matching a regular expression. It’s extremely fast, and respects ignore files and binary files by default.", https://github.com/BurntSushi/ripgrep)
  • exa (statt ls) https://the.exa.website/ ("replacement for ls with sensible defaults and added features like a tree view, git integration, and optional icons.")
  • fzf (CLI fuzzy finder), alias preview="fzf --preview 'bat --color "always" {}'"
  • fd (simple, fast and user-friendly alternative to 'find', https://github.com/sharkdp/fd) -entr (watch-clone)
  • csvkit (awk-clone)
  • ccze (log coloring)
  • surfraw -hexyl ("hex viewer that uses Unicode characters and colour", https://github.com/sharkdp/hexyl) -jq ("awk for JSON. It lets you transform and extract information from JSON documents", https://stedolan.github.io/jq/) -pass ("password manager that uses GPG to store the passwords", https://github.com/lunaryorn/mdcat)
  • restic ("backup tool that performs client side encryption, de-duplication and supports a variety of local and remote storage backends.", https://restic.net/)
  • mdp (Markdown Presentation on CLI) -grepcidr
  • qrencode
  • caca-utils (show images on the CLI)
  • fbi ( & fbgs) (show images in Framebuffer device)
  • fbcat (take screnshot on framebuffer device)
  • nmap
  • micro (CLI Text Editor, ab Debian 11, https://micro-editor.github.io)
  • masscan (https://github.com/robertdavidgraham/masscan)
  • socat (Nachfolger von netcat, https://www.heise.de/select/ix/2017/11/1509815804306324)
  • dc3dd (patched version of GNU dd with added features for computer forensics)
  • smem (memory reporting tool)
  • free (Show Linux server memory usage)
  • mpstat (Monitor multiprocessor usage on Linux, part of sysstat package)
  • pmap (Montor process memory usage on Linux, part of the procps)
  • monit (Process supervision)
  • oping & noping
  • saidar (Curses-basiertes Programm für die Anzeige von Live-Systemstatistiken)
  • reptyr (Tool for moving running programs between ptys)
  • gron (https://github.com/tomnomnom/gron, makes JSON greppable, kann HTTP-Requests absetzen)
  • jc (https://github.com/kellyjonbrazil/jc, CLI tool and python library that converts the output of popular command-line tools and file-types to JSON or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.)
  • bat (cat-clone), alias cat='bat' ("alternative to the common (mis)use of cat to print a file to the terminal. It supports syntax highlighting and - git integration.", https://github.com/sharkdp/bat)
  • ioping (https://github.com/koct9i/ioping, simple disk I/0 latency measuring tool, auch für disk seek rate/iops/avg)
  • vd (Visidata, multipurpose terminal utility for exploring, cleaning, restructuring and analysing tabular data. Current supported sources are TSV, CSV, fixed-width text, JSON, SQLite, HTTP, HTML, .xls, and .xlsx)
  • pdfgrep
  • duf https://github.com/muesli/duf (combined df and du, ncurses-based)
  • nala (apt-alternate, https://gitlab.com/volian/nala, https://christitus.com/stop-using-apt/)
  • iprange
  • tldr
  • rmlint
  • nvtop (https://github.com/Syllo/nvtop, GPUs process monitoring for AMD, Intel and NVIDIA)
  • lf (lf (as in “list files”) is a terminal file manager written in Go with a heavy inspiration from ranger file manager)

no Deb pkg avail

___
[–] [email protected] 4 points 7 months ago* (last edited 7 months ago)

Rest of the list:

Tools pt. 2

DNS tools:

Good stuff for pentesters and security researchers:

  • contained.af
  • cryptohack.org
  • 0x00sec.org
  • hack.me
  • chall.stypr.com
  • crackmes.one
  • hackxor.net
  • tryhackme.com
  • ctftime.org
  • ctflearn.com
  • picoctf.org
### .bashrc
### CUSTOM FUNCTIONS
# https://www.linuxjournal.com/content/boost-productivity-bash-tips-and-tricks
ftext () {
        grep -iIHrn --color=always "$1" . | less -R -r
}
duplicatefind (){
        find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | \
                xargs -I{} -n1 find -type f -size {}c -print0 | \
                xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
}
generateqr (){
        # printf "$@" | curl -F-=\<- qrenco.de
        printf "$@" | qrencode -t UTF8 -o -
}

[–] [email protected] 2 points 7 months ago (1 children)

My brian has too little ram to process the list of packages 😂 good to know the rest!

[–] [email protected] 2 points 7 months ago

Neither does mine, but, I keep it to test a new tool from time to time.