davidhcefx / My-Linux-Notes

My learning notes while exploring Linux

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

My Linux Notes

My learning notes while exploring Linux, Ubuntu and Xubuntu.

System Tips

  1. To execute a file: ./file

  2. To create a Desktop or Launcher shortcut, you need a .desktop file. (Refer to /usr/share/applications)

  3. Use TAB for auto-completion in terminal. (Won't forget names anymore!)

  4. Install rar to unpack a .rar file.

  5. System freezed? Try Ctrl-Alt-F1 to access the terminal.

  6. SysRq: Alt + SysRq + "REISUB" ("busier")

    R: exit Raw mode (X window) E: terminate all
    I: force terminate S: Sync disk
    U: umount disk B: reboot
    F: call oom_kill (kill one)
  7. htop: A colorful yet handy system resource monitor.

  8. Fast OS simulation: qemu-system-x86_64 [iso file]

  9. List files in the recycle bin sorted by deletion time: cd ~/.local/share/Trash/files; stat -c "%z - %n" * | sort -t'-'.

  10. Ubuntu 16+ DO NOT run startup scripts from /etc/rcX.d anymore; Use the crontab @reboot method instead. (But do remember that root's crontab cannot read encrypted user data)

  11. Crontab can be dumped and loaded: crontab -l > dump; crontab dump

  • The format of /etc/crontab is different than crontab -e.
  1. Sticky bit: ------t. Only the owner can remove it, even if it's chmod 777 (eg. /tmp)

  2. SetUID: Cannot be applied to scripts; Executables are also not supported under /tmp and /home. (which are mounted as nosuid)

  3. Systemctl's is-enable command can check for "generated scripts".

  4. Calling grep multiple time is faster than parsing with a single while-loop. (for big files)

  5. MessageOfTheDay (the tty greetings) is under /etc/update-motd.d/.

  6. Locate: A utility for reverse-mapping filenames to paths. However, it will scan the whole system everyday (updatedb.mlocate), so remember to turn it off if not needed.

  7. Secure boot: Not all modules are signed, hence the error message: XX kernel module not found or loaded.

  8. '-' is nothing special; it is just that programs such as cat view it as stdin.

  9. Disable alias temporarily: 1) command [name], 2) '[name]', 3) \[name].

  10. Analyze core dumps: 1) ulimit -c unlimited, 2) After crash, gdb [program] core.

  • Can also be viewed with readelf or objdump -s, eg. note0 section:

    OFFSET  VALUES (SIZE)
    34      pid, ppid, pgrd, sid   (DWORD)
    44      usertime, systime, cum_usertime, cum_systime (0x10)
    84      r15, r14, r13, r12     (QWORD)
    a4      bp, bx, r11, r10       (QWORD)
    c4      r9, r8, ax, cx         (QWORD)
    e4      dx, si, di, orig_ax    (QWORD)
    104     ip, cs, flags, sp      (QWORD)
    124     ss, fsbase, gsbase, ds (QWORD)
    144     es, fs, gs             (QWORD)
    
  • Cygwin: export CYGWIN="$CYGWIN error_start=dumper -d %1 %2"

  • Beware that Apport/ABRT sometimes hide the core files.

  1. Color is just CSI sequences, while programs detect the destination themselves (eg. ls --color=auto)

  2. ptrace:only child relationship or setup PTRACE_TRACEME flag can a process been traced (/proc/sys/kernel/yama/ptrace_scope)

Commands

  • Read the manual: man [something](.SECTION_NUMBER)

    • -f: search among page names.

    • -M [/usr/local/man]: search under a different MANPATH.

    • info [somthing] can also be helpful.

  • Grep to filter: ls | grep "sys"

    • ^[a-z]: Starting / $: Ending / . Any / ? Optional
  • Print contents: cat [textfile]

  • Rename through moving: mv aaa abbb

  • Create soft link: ln -s /home/afolder /home/f/Folder

  • Change file permission:

    • chmod g+x file ---> ['u'=owner/'g'=group/'o'=other] [+-] ['r'=read/'w'=write/'x'=execute]

    • chmod 705 file ---> (eg. '0'=---, '1'=--x, ..., '7'=rwx)

  • Change owner: chown [user]:[group] file

  • File info (ls -l): -rw-rw-r-- 1 [user] [usergroup] [1024] [Sep 26 18:48] [file.name]

    • The first '-' indicates file type: '-'=file, 'd'=dir, 'l'=link
  • pwd: Print current directory path.

  • apt: apt-get install ...

    • apt-cache search ...

    • apt-cache show [package name] (detail info)

    • apt autoremove (remove useless packages)

    • apt-get update (refresh updatable list)

    • apt-get upgrade (install update)

    • add-apt-repository ppa:webupd8team/java (add package source)

    • --reinstall

  • dpkg: -i (install)

    • -l (list packages)

    • -r (remove)

    • -p (also purge config)

    • dpkg-reconfigure

  • sudo passwd root (change root account's password)

  • mount -t ntfs /dev/sda1 /mnt/winOS/ -o "umask=022"

    • umount /dev/sda1
  • su [user] --shell /bin/bash: Login as user with a shell.

    • sudo -k: Reset credential, require password to use sudo again.
  • rsync -av ~/Desktop/ ~/backup/fold1/ (A tool more powerful than cp)

    • --exclude={"a/*","auto*","a/.gitignore"}
  • systemd-analyze (time / blame / critical-chain)

    • systemctl (status / disable / stop)
  • System info:

    • uname -a: Show system info.

    • inxi: Show lots of system info (-S for distro/DE version)

    • ls /usr/bin/*session (Find out which DE has been installed)

  • du -h /home/david: Show file's size. (can filter with grep ^[0-9]*G)

    • df -h: Show disk usage.
  • ip link: List network interfaces (NIC). Check if there is "UP" inside <>.

    • ip addr add [ip] broadcast + dev [interface]: Add a static ip.

    • ip route add default via [gateway ip] dev [interface]: Add a default router.

    • ifconfig eth0:0 [addr]: Create a virtual interface.

  • iotop: View disk usage of every process.

  • nmcli dev wifi: List available Wifi APs.

    • nmcli dev wifi connect [iTaiwan] password [0123456789]
  • lshw: List hardware info.

  • lscpu: Show cpu architecture info.

  • date -d @[seconds since epoch]: convert "seconds since epoch" to readable date.

  • head -n x ./myfile: Print the first x line of file/stdin (if file not provided).

  • User:

    • who: Show current user.

    • pkill -u [username]: Logout a user.

    • adduser [name] --home /home/name --shell /bin/bash

  • Groups:

    • groups [user]: Show a user's groups

    • usermod -a -G [group] [user]: Add user to a group.

    • gpasswd -d [user] [group]: Remove user from a group.

  • Mount eCryptfs: sudo mount -t ecryptfs [.Private] [/mnt/point] (su are needed sometimes)

  • wmctrl -k on: Minimize all windows. (off=switch back)

  • time [command]: Record command's execution time.

    • Get output: bash -c "time [command]" 2>&1
  • xdotool: Can emulate key presses and mouse clicks.

  • stat: Show file modification time, size, links, type and permission.

    • file: Show file type.
  • xxd: Hex dump (-b for binary dump)

  • Message box:

    • zenity --question --window-icon="question" --title="title" --text="some text"

    • notify-send -t 4000 "some message"

  • sed:

    • Substitution: 's/Regex/ReplaceStr/Options'

      • Deliminators can be other than /, eg. | : #
      • Use \(foo\) to remember and \1 \2 \3 to recall. (note that backreference runs slower)
      • Use & in ReplaceStr to get the matching part.
      • Substitute only within line 1~4: 1,4s/.../.../
        • only within matched lines: /Pattern/s/.../.../
    • Options or commands:

      • g = Replace all.
      • 2 = Perform on the 2nd occurence.
      • i = Case isensitive
      • p = Print matched line.
      • d = Delete matched line.
      • q = Quit.
      • i\ = Insert text before.
    • Find and print a pattern: sed -n '/Regex/p' (-n = disable echoing)

      • 2,$p: Print 2nd line ~ end
      • /xxx/,$p: Print after including xxx
        • 1,/xxx/d: excluding
      • /xxx/q: Print before including xxx
        • /xxx/q;p: excluding (if not match then print)
    • Regex: a* a\+ a\? \(a\|b\) a\{N,M\} (<- N~M matches)

      • Extended (-E): a+ a? (a|b) a{N,M}
      • Charset: [:space:], [:digit:], [:alpha:], [:lower:], [:punct:]
      • A * always tries to match the longest first occurence.
    • Run multiple sed sequentially: sed -e 'script1' -e 'script2'

    • x: Swap pattern space with hold space. (pattern space: the matching line)

    • Escaping the ReplaceStr (for delim=/): 's/[\/&]/\\&/g'

    • Escaping the Pattern (for BRE and delim=/): -E 's/([]\/^$.*]|\[)/\\&/g'

    • Caution:

      • Beware of shell expansion within double quotes "": $, ``` and \\.
      • Matching non-ASCII characters might go wrong.
  • $!: Holds the last background process' pid.

  • find . -name 'basename' (wildcards supported)

    • Options: -type f -size 100c -mtime -3 -maxdepth 5

    • find . -regex '.*full/path/regex'

    • find . -regex '\./ignore/.*' -prune -or -name 'name' (skip './ignore/' subdir)

  • lsof: find out which process opened a file.

  • Vim editor:

    • / (search), /\%xa9 (search hex)

    • :d30 (delete 30 lines)

    • ga (show current char)

  • cut -d " " -f2: Print second column, seperated by a single space.

  • awk '{print $2}': Print second column, seperated by whitespaces.

    • ls -l | awk -v perm="-rwxr-xr-x" '$1 == perm { $1="EXE: "; printf "%s\n", $0; system("sleep 1") }'
  • history -c; history -r: Clear current bash history in memory.

  • strace: Trace all syscall of a program.

  • sudo rm -rf --no-preserve-root / &>/dev/null (don't try it :D)

  • Set Unset Show
    Shell variables var=[value] unset var set
    Environ variables export var=[value] export -n var printenv
    • If a variable is already in Environ, the first method would also change it.
  • trap "echo "I have been interrupted"; exit 0" SIGINT

    • Ignore signal: "" ; Restore to default: -

    • Ctrl-c will send SIGINT to all foreground processes (inner one handle first)

    • Avoid calling exit 0 directly; Write trap - SIGINT; kill -2 $$ instead.

  • kill -SIGINT [process_id]: Send signals to processes.

  • timeout [duration] [command]: Run a command with a time limit.

  • mktemp --tmpdir prefix_XXXXXX: Create unique temp file with race-condition safety.

  • lslogins -u: View each user's login time, number of process etc.

  • swapoff -a: Move data from swap back to RAM and disable swap.

  • journalctl (-u apache2): View systemd logs.

  • xargs: Place input at arguments, eg. ls *.txt | xargs stat