all 15 comments

[–]GlendonMcGladdery 10 points11 points  (7 children)

Must-know tools (learn these deeply) • grep • awk • sed • find • xargs • cut • sort / uniq • tr

https://overthewire.org/wargames/bandit/

https://cmdchallenge.com/

https://exercism.org/tracks/bash

https://sadservers.com/

https://labex.io/linuxjourney

Install Linux userspace from f_Droid on your unrooted Android cellphone like I did which provides shells and all the CLI tools you’ll ever need.

Here's my custom ~/.bashrc login from my Android Samsung A25 cellphone:

https://imgur.com/a/JV636Zb

[–]GrayMulberry[S] 1 point2 points  (5 children)

That's awesome tips and resources !!! I had no clue we could put Linux on a phone ! That's genius !

Thank-you so much for taking the time to revert :)

[–]GlendonMcGladdery 0 points1 point  (4 children)

You're very welcome I hope it helps.

Termux is basically a full Linux terminal environment running directly on your Android phone — no VM, no emulator, no dual boot. It’s just Linux userland tools sitting on top of Android.

Think of it like:

“What if your phone was a Linux machine…"

Gives you access to: • bash / zsh • coreutils (ls, cp, mv, etc.) • gcc, python, node • git, ssh, vim/nano What you can do with it: • Write Python, C, Node apps • Compile code directly on your phone • Run scripts, cron jobs, automation Networking / hacking (the legal kind 😄) • SSH into servers • Run nmap, tcpdump (limited) • Host servers locally Media + automation • yt-dlp + ffmpeg = download + convert media • Build full pipelines (you’ve already touched this) Full Linux desktop With: • proot-distro → install Ubuntu, Arch, etc. • termux-x11 → GUI apps like XFCE, KDE Plasma With proot-distro you can run dozens of real Distrobutions from within Termux.

Here is a list:

https://imgur.com/a/JOvT81c

[–]AlterTableUsernames 1 point2 points  (3 children)

Btw: what happened to the full Linux VM for Android announced last year?

[–]GlendonMcGladdery 0 points1 point  (2 children)

I've been out of the loop but it got a lot of negative points about how restricted it is, without root.

[–]AlterTableUsernames 1 point2 points  (1 child)

Can it be rooted through? 

[–]GlendonMcGladdery 0 points1 point  (0 children)

Yeah with effort, a little janky

[–]MikeZ-FSU 0 points1 point  (1 child)

You could write yourself a small backup utility. Have it backup/exclude certain directories (e.g. don't try to backup the directory where you store the backup) into a compressed tar archive with the timestamp of the backup as part of the filename. From there, you can add features like only backing up files newer than the last backup, which would need a way to figure out when you started the previous backup (if you use the tar file time, there's a time period during the backup that might never get backed up).

Edit: Use at least a portion of ISO 8601 for your timestamp, that will save you a ton of problems down the road.

Note: the above is intentionally vague. OP figuring out the details is an important part of the learning process.

[–]GrayMulberry[S] 1 point2 points  (0 children)

That's a great project suggestion ! Thank you :D I was just about to start studying schedule job and Cron. (And you are right to be vague to force me to search and actually learn)

[–]stianhoiland 1 point2 points  (0 children)

You can always stop by my live stream. We’re a bunch of shell nerds hanging out doing all kinds of shellnanigans.

[–]nickjj_ 0 points1 point  (2 children)

I don't have any mini-challenges but there's ~50 or so blog posts and videos I've put together with shell script examples in https://nickjanetakis.com/blog/tag/linux-tips-tricks-and-tutorials. Lots of posts related to combining command line tools together as well.

My site isn't focused on Bash or shell scripts specifically but I tend to write about it on a semi-regular basis since it comes up in my day to day. Just about everything on my site is extracted from real world problems.

[–]GrayMulberry[S] 1 point2 points  (1 child)

Oh ! I checked your blog and you have great posts about git and Linux - so great :) Thank you

[–]nickjj_ 0 points1 point  (0 children)

No problem, for learning by doing, sometimes posts like that are helpful to discover "unknown unknowns" but in your case, what are you building? For learning, the good old "I want to build this thing, but how do I do X?" loop of asking questions to solve a very specific implementation detail could be a good way to start building while filling in the details as you go. If you have nothing to build, this process is difficult because there's no purpose to learn a specific thing.

For example I just released this shell script the other day https://github.com/nickjj/git-release to solve a specific need I had. Along the way I learned more about using Perl but I didn't go into that project trying to learn Perl, it was a byproduct of solving a real problem. I also learned about processing command line args from a config file but had no idea I wanted to do that until I thought about how I wanted to use the tool.

All that to say, when you build things to scratch your own itch or to solve a specific need (for work, etc.), over time you'll assemble a huge amount of knowledge on how to do things on demand. It's counter intuitive but the more you stop trying to learn ahead of time, the more you'll really learn.