My learning notes while exploring Linux, Ubuntu and Xubuntu.
-
To execute a file:
./file -
To create a Desktop or Launcher shortcut, you need a
.desktopfile. (Refer to /usr/share/applications) -
Use
TABfor auto-completion in terminal. (Won't forget names anymore!) -
Install
rarto unpack a.rarfile. -
System freezed? Try
Ctrl-Alt-F1to access the terminal. -
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) -
htop: A colorful yet handy system resource monitor. -
Fast OS simulation:
qemu-system-x86_64 [iso file] -
List files in the recycle bin sorted by deletion time:
cd ~/.local/share/Trash/files; stat -c "%z - %n" * | sort -t'-'. -
Ubuntu 16+ DO NOT run startup scripts from
/etc/rcX.danymore; Use the crontab@rebootmethod instead. (But do remember that root's crontab cannot read encrypted user data) -
Crontab can be dumped and loaded:
crontab -l > dump; crontab dump
- The format of
/etc/crontabis different thancrontab -e.
-
Sticky bit:
------t. Only the owner can remove it, even if it's chmod777(eg. /tmp) -
SetUID: Cannot be applied to scripts; Executables are also not supported under
/tmpand/home. (which are mounted asnosuid) -
Systemctl's
is-enablecommand can check for "generated scripts". -
Calling grep multiple time is faster than parsing with a single while-loop. (for big files)
-
MessageOfTheDay (the tty greetings) is under
/etc/update-motd.d/. -
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. -
Secure boot: Not all modules are signed, hence the error message: XX kernel module not found or loaded.
-
'-' is nothing special; it is just that programs such as
catview it as stdin. -
Disable alias temporarily: 1)
command [name], 2)'[name]', 3)\[name]. -
Analyze core dumps: 1)
ulimit -c unlimited, 2) After crash,gdb [program] core.
-
Can also be viewed with
readelforobjdump -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.
-
Color is just CSI sequences, while programs detect the destination themselves (eg. ls --color=auto)
-
ptrace:only child relationship or setup PTRACE_TRACEME flag can a process been traced (
/proc/sys/kernel/yama/ptrace_scope)
-
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
-
Inode: Record metadata (eg. size) and position of data block
-
Directory: Is a file, which map filenames to their inode number
-
-
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 (-Sfor distro/DE version) -
ls /usr/bin/*session(Find out which DE has been installed)
-
-
du -h /home/david: Show file's size. (can filter withgrep ^[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](suare 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
- Get output:
-
xdotool: Can emulate key presses and mouse clicks. -
stat: Show file modification time, size, links, type and permission.-
Link count: Number of hard references to this inode.
- eg.
mkdir -p A/Bgenerates 3 count for A:A/B/..A/.and A
- eg.
-
file: Show file type.
-
-
xxd: Hex dump (-bfor 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 and1円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/.../.../
- only within matched lines:
- Deliminators can be other than
-
Options or commands:
g= Replace all.2= Perform on the 2nd occurence.i= Case isensitivep= 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 xxx1,/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.
- Extended (-E):
-
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.
- Beware of shell expansion within double quotes
-
-
$!: 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") }' -
awk -F . '{printf("%d %d %d"), 1,ドル 2,ドル 3ドル}': version string to integer -
awk '/pty1/ {if (1ドル=="david") print 2ドル }': when contain "pty1", if 1ドル is "david" print 2ドル
-
-
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 varsetEnviron variables export var=[value]export -n varprintenv- 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-cwill send SIGINT to all foreground processes (inner one handle first) -
Avoid calling
exit 0directly; Writetrap - SIGINT; kill -2 $$instead.- For Bash uses Wait-and-Cooperative-Exit, which will depend on how its child has terminated.
-
-
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