Ask HN: Can I see your cheatsheet?
So that said, could I please see your cheatsheet?
I'll go first: https://github.com/fastily/cheatsheet
So that said, could I please see your cheatsheet?
I'll go first: https://github.com/fastily/cheatsheet
* GNU grep and ripgrep (https://learnbyexample.github.io/learn_gnugrep_ripgrep/)
* GNU sed (https://learnbyexample.github.io/learn_gnused/)
* GNU awk (https://learnbyexample.github.io/learn_gnuawk/)
* Ruby one-liners cookbook (https://learnbyexample.github.io/learn_ruby_oneliners/)
* Perl one-liners cookbook (https://learnbyexample.github.io/learn_perl_oneliners/)
* Command line text processing with GNU Coreutils (https://learnbyexample.github.io/cli_text_processing_coreuti...)
* Command line text processing with Rust tools (https://learnbyexample.github.io/cli_text_processing_rust/) — work-in-progress
* Computing from the Command Line (https://learnbyexample.github.io/cli-computing/) — work-in-progress
These books you've written are great for a bit of first principles insight and then quickly building up to functional usage. I will have no hesitation in referring colleagues to them!
Do you have a patreon or something similar? Do you accept pull requests for collaboration?
Thanks for creating such great free material!
https://ia903404.us.archive.org/0/items/pdfy-MgN0H1joIoDVoIC...
Curious about what kind of issues you had with `awk`. Perhaps https://awk.js.org/ could help?
>Do you have a patreon or something similar?
I pay my bills by selling PDF/EPUB versions of these books. Purchase links are mentioned in the 'Buy' page. You can also visit https://learnbyexample.gumroad.com/ or https://leanpub.com/u/learnbyexample
>Do you accept pull requests for collaboration?
Not currently. You can file issues on GitHub (links are mentioned in the preface chapter) for typos/bugs/suggestions/etc.
Markdown source for these books are also available on GitHub.
I will consider buying the books and spread the word :) Thanks again!
C-x C-e in the CLI (not sure if it’s zsh only) will open your command line in your $EDITOR - useful to get code highlighting and write multi line commands if that’s the blocker. The problem is iterating.
OR
Pipe your awk input to a file and then use this thing I wrote to build up your awk program. I use it most often with `jq`.
Just curious to hear from someone who's been around the block with this.
My books are around 100 pages and I've seen a few readers mentioning that they just print it themselves.
(edit: reading this i sound like a jerk. wasn’t trying to be one.) However, these are books not cheat sheets. Cheat sheets are about glance ability and one page ness.
If you’re going to do this then have an escape hatch for commands you don’t want memorised https://github.com/craigjperry2/dotfiles/blob/aa77ddcbde63bf...
$ find . -iname 'package.json' -exec jq .version {} \; # get npm module version numbers for all packages
now when you search history you can do so with plain text: $ history | grep 'npm module version'
you could of course take this further by 'tagging' commands if you wish and then grep for that tag later to return longer cheatsheets# Edit
I sometimes add comments to commands via `# This‘ll do this and that` so that I can find the command by those keywords in the bash history.
Hope there's a project out there that helps parse, rank, or do something with a file like this. There must be interesting information.
Is there something you are doing so the different sessions don't clobber each other?
Its sad how I install all those things, forget about them the next day and cd/ls/vi like a caveman.
The problem is much deeper than you think, OP...
Sounds like I should be focusing on "one new workflow thing a week" and make it a daily habit to practice, or something.
I seem to be using "zoxide" (ie "z prj") to jump to one of my projects after opening a terminal, and mostly stay on that folder for a few days.
Some other things I'll do in Finder, etc.
1. 10,000 isn't 'huuuuge' for long lived workstations, but 100k ought to be good for a while (bash, but not zsh, allows disabling truncation entirely with SAVEHIST=-1)
2. if using bash, make sure that this init stuff is sourced by both login and non-login shells (from ~/.bash_profile vs ~/.bashrc respectively)
3. specifying a non-default HISTFILE near your SAVEHIST (as shown in that zshrc link) can go a long way toward avoiding an improperly-configured shell truncating your huge history log, eg point 2
- Find all files modified in the last 90 minutes
find . -type f -mmin -90
- Find all files and do something to each one
find . -type f -mmin -90 | xargs ls -l
- Find all files modified before 2 days ago
find . -type f -mtime +2
- Removing files older than 7 days
find . -type f -mtime +7 -name '*.gz' -exec rm {} \;
- Find all files modified after last 2 days
find . -type f -mtime -2
- Find all files modified at the last 2 day mark
find . -type f -mtime 2zsh's built-in globbing features can be used instead.
- Find all files modified in the last 90 minutes
print -l **/*(mm-90)
- Find all files and do something to each one
print -l **/*(mm-90) | xargs ls -l
- Find all files modified before 2 days ago
print -l **/*(m+2)
- Removing files older than 7 days
zargs -- **/*(m+7) -- rm
- Find all files modified after last 2 days
print -l **/*(m-2)
- Find all files modified at the last 2 day mark
print -l **/*(m2)
In most of the above examples "print -l" is used to print the results to the terminal, but you can instead use whatever command you want (as in the "rm" example above).Many more examples and tips can be seen here: [1]
find . -type f -name '*foo' | perl -ne 'print;chomp;unlink'
And it has the same -0 switch as xargs to pair with find's -print0.Not helpful in this case since you have other options, but maybe helpful for things like bulk touch, chmod, etc.
zargs -- **/*(m+7) -- rm
I updated my answer above accordingly. fd --newer 90min
fd --newer 90min -x ls -l {}
fd --older 2d
fd -g '*.txt' --older 7d -x rm {}
fd --newer 2d
fd --newer 3d --older 1dSecondly, you may want to add -n 200 to your xargs so if you have very, very many files bash doesn't complain.
So:
Find all files and do something to each one
find . -type f -mmin -90 -print0 | xargs -0 -n 1024 ls -l(the -mount stops it traversing into mounted shares)
grep -iHn 'foo' **/*.txt(.)
Though I'm not sure how to prevent zsh from descending in to other filesystems, as you can with find.doc () { curl "https://cheat.sh/$1" | less }
Cheat Sheet Help : https://cht.sh/:help
Cheat Sheet List of topics : https://cht.sh/:list
Being able to use curl as a client as well is so powerful as well. Whenever you are using ssh on some vps you can still get cheatsheets for all your commands.
One thing I try to do is to keep my keyboard shortcuts consistent between programs/systems. That way the chance of my instinct of pressing `<CTRL>+a` to move the cursor to the start of the line will be correct more often.
Another thing I try to do when a project has a set of complex commands that are needed, is to add them as a rule in its Makefile, that way they're available for my colleagues as well.
• The start and stop times of the command
• The working directory where the command was run
• The hostname of the machine
• A unique per-host session ID, so history from several sessions is not confused
• The exit status of the command
This the working directory of the command has been especially useful for me to get the context of what I did, not only the command itself.H() { history | egrep -v '^ *[[:digit:]]+ +H +' | grep "$@" | sort -rk 2 | uniq -f 1 | sort; }
If you don't have it installed it can easily be queried with curl from the command line like: `curl cheat.sh/sed`. The payload is colorized and gives a lot of examples of usage of the command. You can also query "cht.sh" to use fewer characters. There is actually a lot more advanced usage of the tool/service if you check out the README.
Apologies if this isn't what you're looking for.
But my cheat sheet is google, I usually find what I want in no time.
Useful information disappears from the internet all the time.
If I find something useful I record it myself so I can easily find it again instead of wasting my time searching for something that may no longer exist.
If something is really useful it will stick around, maybe some site goes down but there will be others with the same information.
find . -type f -empty -print -delete
find . -type d -empty -print -delete
Move photos/videos to folder, based on their creation date
exiftool -d /home/user/Photos/%Y-%m-%d "-directory<CreateDate" ./VID*.{mp4,jpg}
(or leave the extension out, and all files with EXIF data will be included)
system:
ctrl+space=switch keyboard input language
iterm2:
cmd+; = autocomplete
fn+cmd+< = scroll to top of buffer
fn+cmd+> = scroll to bottom of buffer
fn+cmd+^ = pgup buffer
fn+cmd+v = pgdown buffer
fn+< = beginning of line
fn+> = end of line
shift+cmd+[ = previous tab
shift+cmd+] = next tab
cmd+K = delete til end of line
cmd+enter = full-screen on/off
cmd+shift+e = show command timeline!!!
chrome:
opt+cmd+J = devtools
cmd+] = devtools tab right
cmd+[ = devtools tab left
opt+space = start/stop toggl
fn+cmd+< = move tab left
fn+cmd+> = move tab right
fn+cmd+^ = move tab to start
fn+cmd+v = move tab to end
sublime:
ctrl+` = open python console
cmd+shift+P = open command palette
cmd+P = search open files
ctrl+opt+C = open in browser with View in Browser package (create tmpfile if dirty)
cmd+shift+[ = Move to left pane
cmd+shift+] = Move to right pane
ctrl+0 = move to sidebar
cmd+k+b = show/hide sidebar
cmd+k+u = uppercase
cmd+k+l = lowercase
ctrl+shift+v = multiple cursor down
ctrl+shift+^ = multiple cursor up
shift+tab = back up tab indentation (at beginning of line)
cmd+[ = dedent (when highlighted)
cmd+[ = indent (when highlighted)
cmd+shift+. = show dotfiles in open file view
cmd+shit+g (when opening file) = navigate to path for file selection
# edit package override files in /User/user/Library/Application Support/Sublime Text 3/Packages/User/
VS Code:
option+^ = drag line up
option+v = drag line down
ctrl+` = open terminal
cmd+p, :#<enter> = go to line
ctrl+enter = open alongside
cmd+b = open/close side panel
cmd+option+shift+> = move tab right
cmd+option+shift+< = move tab left
cmd+option+F = toggle fullscreen
cmd+shift+l = highlight all selected
cmd+shift+o = type fn name to jump to in open file
cmd+option+shift+c = copy path of active filename
Asana:
cmd+shift+M: monospace highlighted text[1]: https://github.com/meribold/dotfiles/blob/e4dc5ee09d9e656346...
[2]: https://github.com/meribold/dotfiles/blob/e4dc5ee09d9e656346...
Beware: I started this long before I became a fan of markdown, so the syntax of the whole file could seem as pretty weird, but it works for me. I mainly do `rg <pattern> ~/commands.txt` in shell or `/<pattern>` in vim when I need to find something in there.
There are also definitely too much commands dumped into the `Etc` section. I should reorganize this some day.
[ -d "${DIR}" ] || (mkdir -p "${DIR}")
No need to check when using "-p". alias mkdir='mkdir -p'
Thank youAlso hosted on gitbooks: https://openai.gitbook.io/code-cheatsheets/
I'm assuming you commit an Obsidian vault directly. Do you sweep for secrets before you commit? Your layout resembles my own, but I often dump keys / secrets into my vault "temporarily" and forget about removing them later.
I have had the current problem of its so massive that finding the specific sheet can take too long. I tried Obsidian, but still look for great fast search
The one I'm probably the most proud of is that one-liner to produce GIFs:
$ ffmpeg -i ./source.mp4 -ss 00:24:52.4 -to 00:24:57.0 -filter_complex "[0:v] fps=12,scale=width=480:height=-1:flags=lanczos,subtitles=source.mp4:si=0:force_style='FontName=Arial Black,Bold=-1,FontSize=26',split [a][b];[a] palettegen=64 [p];[b][p] paletteuse" ./meme.gif
Source: https://kevin.deldycke.com/2006/11/video-commands/I also maintain cheatsheets for some dev stuff: https://github.com/darekkay/config-files/tree/master/cheat-s...
And then there's my Flexbox cheatsheet: https://darekkay.com/flexbox-cheatsheet/
ffmpeg -ss 01:59:00.000 -i "interlaced.ts" -ss 00:00:12.000 -t 26 -max_muxing_queue_size 1024 -c:a libopus -b:a 96k -c:v libx264 -crf 20 -vf "yadif=1" -profile:v baseline -level 3.0 -pix_fmt yuv420p -movflags +faststart -y clip.mp4
Make clip compatible with WhatsApp: ffmpeg -i in.mp4 -map 0:v:0 -map 0:a:0 -map_metadata -1 -map_chapters -1 -c:v libx264 -preset slow -tune film -crf 32 -c:a aac -b:a 128k -profile:v baseline -level 3.0 -pix_fmt yuv420p -movflags +faststart out.mp4
Copying in various terminals: PuTTY: select
tmux: Shift + select
cmd: select + Enter in quick edit mode
Windows Terminal: select + Right Click Merge video files with ffmpeg
- Make a file listing all the videos in sequence. E.g.
file 'video01.ts'
file 'video02.ts'
file 'video03.ts'
...
- Generate the file list for files in the current directory.
(for %i in (*.ts) do @echo file '%i') > filelist.txt
- ffmpeg command to combine videos
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4If I ever get round to editting/refining these I plan to do it on https://devhints.io - https://devhints.io/xpath and https://devhints.io/bash are so nice.
Process substitution:
bash: diff <(echo hello) <(echo world)
fish: diff (echo hello | psub) (echo world | psub)
Rsync directories:
rsync -a -v --dry-run other:dir/ dir/
Syncs the contents of dir (`/` needed)
Script exit handler:
bash:
function finish {
# exit handling code
}
trap finish EXIT # EXIT is special and works on normal exit as well as interruptsI then write another small bash script that use consolemd and surge(probably will move to github page at some point) to generate a simple webpage with simple markdown JavaScript library to serve it up along with all the files generated by consolemd so i can use curl in terminal and have it colorfully displayed.
The cheatsheet site is here https://ch.ebfe.pw/.
And you can try it in terminal: curl https://ch.ebfe.pw/intel/splunk
And my code can be found here if you are interested:
I know that POD (Plain Old Documentation from Perl) and asciidoc are supported, likely many more.
- List dirs and file count, to find dir with high file count.
for i in /home/*; do echo $i; find $i | wc -l; done
for i in /*; do echo $i; find $i | wc -l; done
- Report space usage of the top level subdirectories.
du -h --max-depth=2
- Report space summary only, no directory output.
du -s -h
- Find out which device a directory is in.
df /tmp
df /home
- Print of tree of directories
tree .
- Disk
fdisk -l, list disk partitions
lsblk, show a tree of disks, partitions, and lvm volumes
lsblk -d, show physical devices
lsblk -io KNAME,TYPE,SIZE,MODEL, name/type/size/model ls -1 | while read line; do echo $line; done1. `history | grep somecommand` to see a command I used previously. (I have my history set to a bonkers high number.) 2. `curl cht.sh/somecommand` to see a crowdsourced cheatsheet for a command. See: https://cht.sh/grep 3. DuckDuckGo often has good cheat sheets, e.g. https://duckduckgo.com/?q=tmux+cheat
I also use fish, which has nice history-based autocomplete
> navi allows you to browse through cheatsheets (that you may write yourself or download from maintainers) and execute commands. Suggested values for arguments are dynamically displayed in a list.
It also lets you use cheatsheets from tldr and cheat.sh from it (besides your own cheatsheets). I've started to mostly just maintain my own, copying what I find most useful from those repositories, though.
(Mac Desktop): I use xbar [0] with a custom script to create a menubar nested dropdown of all of my cheatsheets. Selecting opens in typora [0] for reading/editing markdown.
(CLI): I use cheat [0] which consumes the same markdown cheatsheet content
[0]: https://xbarapp.com
[1]: https://typora.io
[2]: https://github.com/cheat/cheatWould not ever post any of it because these are mostly specific command lines.
Then with VSCode if I need to remind myself of something I search for command I might use and get my whole history with contexts. Then I copy paste/change and keep all that history there.
Never ever I will spend time organizing it into cheat-sheet because it will be waste of time anything that I put into cheat-sheet that I won't use in next 6-12 months will be just cluttering space on such cheat-sheet.
The least you need to know about GitHub pages https://tomcam.github.io/least-github-pages/
Soup to nuts psql tutorial https://tomcam.github.io/postgres/
https://www.raycast.com/ https://www.raycast.com/extensions/snippets/
I also liked the idea here to prefix all your scripts https://news.ycombinator.com/item?id=31846902 and would personally recommend using fish or zsh with the improvements from ohmyzsh for autocomplete and hints.
Combined with https://www.alfredapp.com/help/features/clipboard/ you get great productivity, especially when working on sys admin terminal kind of stuff
Bonus: it's all stored in a git repo
I do kinda live on the command line, ymmv
See; https://news.ycombinator.com/item?id=31009313760 (78 days ago -- 245 comments)
https://wiki.samat.org/CheatSheet/OpenSSL
https://web.archive.org/web/20150705174450/http://www.w3scho...
alias private='shopt -uo history'
alias unprivate='shopt -so history'
alias gl="git log --all --decorate --oneline --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
alias gitlog='git log --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit --date=relative --branches'
alias sha256sum="shasum -a 256"
alias sha512sum="shasum -a 512"
alias flushDNSMac="sudo killall -HUP mDNSResponder"
alias myip="dig +short myip.opendns.com @resolver1.opendns.com"
alias m1="arch -arm64"
alias x86="arch -x86_64"
alias ibrew='arch -x86_64 /usr/local/bin/brew'
alias upgrade="ibrew upgrade && m1 brew upgrade && mas upgrade"
alias docker-clean='docker ps -aq | xargs -P $(nproc) -n1 docker rm -f ; docker rmi -f $(docker images --filter "dangling=true" -q --no-trunc)'
alias autoscalerstatus="kubectl describe -n kube-system configmap cluster-autoscaler-status"
alias evictedpods="kubectl get pods --all-namespaces --field-selector=status.phase=Failed"
2qr() {
qrencode "$1" -t ANSI256 -o -
}
curl_status() {
if [ -n "${1}" ]; then
curl -L -o /dev/null --silent --head --write-out '%{http_code}\n' "$1"
fi
}
webp_convert() {
local file="$1"
cwebp -q 100 "$file" -o "${file%.\*}.webp"
}
To minify everything (using https://github.com/tdewolff/minify) find ./dist/ -type f \( \
-name "*.html" \
-o -name '*.js' \
-o -name '*.css' \
-o -name '*.svg' \
-o -name "*.xml" \
-o -name "*.json" \
-o -name "*.htm" \
\) \
-and ! -name "*.min\*" -print0 |
xargs -0 -n1 -P4 -I '{}' sh -c 'minify -o "{}" "{}"'cheat sheets, notes, learnings all go here.
Super simple!
Here is example:
> cheat zip
# To create zip file:
zip archive.zip file1 directory/
# To create zip file from directory:
zip -r archive.zip directory/
# To create zip file with password:
zip -P password archive.zip file1
# To join a split zip file (.zip, .z01, .z02, etc):
zip -FF splitZipfile.zip --out joined.zip
# To list, test and extract zip archives, see unzip:
cheat unzip
--> This is actually a real problem on forums --> just to remind a stranger on a forum to commment on something. --> I´m working on a concept / tool to make it simple.
--> Would you like to talk about that? Ron.
* Some zsh tips
** Zero-pad (preserve zeroes) a variable
Either
*** typeset -Z2 FOO
*** printf %02 $FOO
** Do arithmetic
*** examples
**** addition
(( count = $count + 1 ))
** Loop through a directory of long filenames with spaces
while read -r line
do
echo "'$line'"
done < <(print -l *(/))
** Shell return codes for piped commands
echo foo | grep bar | tr z a | cat
echo ${PIPESTATUS[@]}
0 1 0 0
** Pass file contents as an argument
*** foo "$(<bar)"
*** The above is more idiomatic than: foo "$(cat bar)"
** Sort files numerically
*** files=(*); command ${(n)files}
** Get the last argument passed to a zsh script
*** $@[-1] or $@[$#]
*** you could also use $argv if $@ seems too weird
** exec an alias
*** alias exec='exec '
*** an alias ending in space causes further alias expansion for the next arg
** Start zsh without inhereting any environment variables or sourcing zsh init files
*** env -i zsh -f
** Which shell are you in
*** echo $0
*** Check ZSH_VERSION:
if [ -n "${BASH_VERSION+s}" ]; then
echo 'this is bash'
elif [ "${ZSH_VERSION+s}" ]; then
echo 'this is zsh'
fi
** Find files/dirs between certain dates
*** First:
zmodload zsh/stat
autoload age
*** For files
**** print -l *(.e#age 2015/01/01 2016/01/01#)
*** For directories
**** print -l *(/e#age 2015/01/01 2016/01/01#)
** make ^R work in zsh
bindkey -M viins "^R" history-incremental-search-backward
** Search for lots of files
Will not run in to argument number limits
zargs -- **/bar -- grep foo
** Remove leading and trailing spaces in a variable
First, make sure to "setopt EXENDED_GLOB" in your script!
Then:
*** Remove leading spaces
${FOO## #}
*** Remove trailing spaces
${FOO%% #}
** Edit a variable using your EDITOR
vared FOO
** Find files in directory depth of one
print -l */foo
** List all files except for 'foobar'
print -l *~foobar
** List all plain files except for 'foobar'
print -l *~foobar(.)
** List all files starting with 'foo' except for 'foobar'
print -l foo*~foobar
** List all files starting with "tex" but not starting with "text"
print -l tex*~*text*
** List all files which are not symbolic links
print -l *(^@)
** Load zsh modules
*** zmodload zsh/attrIf on command line, I am typically following an installation guide or something so no need for a cheat sheet.
If scripting, I refer to past scripts or use a search engine.
tldr <command>
is great. It's a cheatsheet for every command and one of the first things I advise newbies to install.I usually just man the command and / my way either to the Examples section, or search for whatever other question I may have.
But I'm on OpenBSD, where man pages are worth the time you spend reading them.
Other than that, although I always intend to add useful stuff to my ~/txt/scratch, in the end it's either Ctrl-R or history | grep.
Searching history or keeping your own notes work but this is easier for me. Everyone finds a work flow they like. It might not be the tool for you.
https://en.cppreference.com/mwiki/index.php?title=cpp/langua...
It’s like a group-maintained collection of cheatsheets. The git sync is buggy but I’ve made it work.
ln -s /the/target the_link (can never remember order)
for f in *.mp4; do mv "$f" "$(echo "$f" | sed s/S1E/S01E/)"; done
tar -theuniverse (insert xkcd here)
grep -E 'foo|bar' file (can never remember the flag for regex)Sounds pretty messy but I've never felt the need to maintain a cheatsheet.
I don't see why one would. I know I'm possibly being naive.
[edit: turns out a lot of people do that!]
I’ll usually put relevant commands into my project README files but your post has inspired me to start a global cheatsheet of common commands too!
I do like the cheat command but it's still not habitual to use it, I grew up with Google so I'm far too dependent on it.
If you're interested in a breakdown of the differences, I elaborated on this recently:
`tldr tar` or whatever.
Hardware Summary
sudo lshw -short
Get the total disk space left and summary of folder usage df -h .; du -sh -- * | sort -hr
Simple partition summary lsblk
What version of Linux are you running uname -a
> Linux TREEBEARD 4.4.0-98-generic #121-Ubuntu SMP Tue Oct 10 14:24:03 UTC 2017
x86_64 x86_64 x86_64 GNU/Linux
lsb_release -a
> Distributor ID: Ubuntu
> Description: Ubuntu 16.04.4 LTS
> Release: 16.04
> Codename: xenial
What flavour of Ubuntu are you running (see https://itsfoss.com/which-ubuntu-install/ )
cat /var/log/installer/media-info
> Unity
How long has the PC been running uptime
> 23:09:26 up 61 days, 8:28, 1 user, load average: 0.82, 0.48, 0.34
Count files in folder and sub folders find . -type f | wc -l
### Files and FoldersGet a tree view of subfolders
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Find the most recently used files including all subdirectories find . -type f -mtime -7 -print0 | xargs -0 ls -lt | head
Find string in all files (example searchs logs for Exception) find /var/log/www.lifepim.com -type f -print0 2>/dev/null | xargs -0 grep --color=AUTO -Hn 'Except' 2>/dev/null
Find a string 'blah' in all files with recursive (deep) search from current folder '.' grep -Rnw '.' -e 'blah'
Limit above search to only .html files grep -Rn --include=*.html '.' -e 'blah'
### ProcessesList all processes
ps -ef
Show a tree of processes pstree
Find the processes I am running ps -u duncan
Get list and PID of specific processes (eg python) pgrep -a python
Show all processes and usage top
htop (will need to run sudo apt install htop first)
### NetworkGet IP Address and network details
/sbin/ifconfig
See list of PC's on the network arp -n
ip -r neigh
nmap -sA 192.168.1.0/24
Lookup name of IP Address nslookup 162.213.1.246
> Non-authoritative answer:
> 246.1.213.162.in-addr.arpa name = wssa.beyondsecurity.com.
Get the IP address of a domain name host www.acutesoftware.com.au
> acutesoftware.com.au has address 129.121.30.188
Show the routing table
route
Port scanning nmap
### Shell tips
Show top commands from your shell history
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
35 cat
25 awk
18 pwd
15 ls
14 cd
### Data CollectionDownload a file
wget http://www.acutesoftware.com.au/aikif/AIKIF-Overview.jpg
Download a site for offline reading wget --recursive --page-requisites http://www.acutesoftware.com.au/cont_articles.html
### Data extractionGet a list of URLs from a html file (like an exported list of Chrome bookmarks)
grep -Eoi '<a [^>]+>' source.html | grep -Eo 'HREF="[^\"]+"' | grep -Eo '(http|https)://[^/"]+' > urls.csv
Grep log files cat /var/log/www.lifepim.com.access.log | grep "POST" # number of posts to lifepim
cat /var/log/www.lifepim.com.access.log | grep "login" | wc -l # number of login page accesses
awk '{print $1}' /var/log/www.lifepim.com.access.log | sort | uniq -c # count per IP address
awk '{print $7}' /var/log/www.lifepim.com.access.log | uniq # list of pages accessed
cat /var/log/www.lifepim.com.error.log | grep "Exception" | uniq # list of exceptions
awk '{print $11}' /var/log/www.lifepim.com.access.log | sort | uniq -c | grep -v "lifepim" # count by referrers
1 "https://newsbout.com/id/19184625381"
1 "https://umumble.com/links/156005/what-software-will-you-trust-when-you-get-senile%3F"
1 "https://www.producthunt.com/ask/616-what-s-the-best-personal-knowledge-base"
Looping through list of gz files and grepping for blog hit count for i in /var/log/www.lifepim.com.access*.gz
do
echo -n "Checking zipped logfile $i - "
zgrep '/blog/' "$i" | wc -l
done
Checking zipped logfile /var/log/www.lifepim.com.access.log.2.gz - 45
Checking zipped logfile /var/log/www.lifepim.com.access.log.3.gz - 112
Checking zipped logfile /var/log/www.lifepim.com.access.log.4.gz - 92
Checking zipped logfile /var/log/www.lifepim.com.access.log.5.gz - 62
Checking zipped logfile /var/log/www.lifepim.com.access.log.6.gz - 64
Checking zipped logfile /var/log/www.lifepim.com.access.log.7.gz - 85
Checking zipped logfile /var/log/www.lifepim.com.access.log.8.gz - 213
Checking zipped logfile /var/log/www.lifepim.com.access.log.9.gz - 80
### Date and TimeDisplay Annual Calendar for current year
cal -y
Show the current date in ISO format ( yyyy-mm-dd ) echo $(date -I)
Store the current date / time as string in a bash variable DATE=`date '+%Y-%m-%d %H:%M:%S'`
echo $DATE
### SQL tipsShow table size of selected tables in a schema
SELECT table_name as 'Database Name',
sum( data_length + index_length ) as 'Size in Bytes',
round((sum(data_length + index_length) / 1024 / 1024), 4) as 'Size in MB'
FROM information_schema.TABLES where table_name like 'as_%' or table_name like 'sys_%'
GROUP BY table_name;
Get a list of column names for a table select * from information_schema.columns where table_name = 'as_task';
Show usage in log file grouped by date select DATE_FORMAT(log_date, '%Y-%m'), count(*) from sys_log group by DATE_FORMAT(log_date, '%Y-%m') order by 1;
Show usage by user_id and date select log_date, user_id, count(*) from sys_log group by log_date, user_id order by log_date;
Show users by week select WEEK(log_date), max(log_date) as date_until, count(*) as num_user_actions,
count(distinct user_id) as active_users_this_week from sys_log
where DATE_FORMAT(log_date, '%Y-%m') > '2018-05-05' group by WEEK(log_date) order by 2;