Kill zombie processes
Find and kill zombie process(es). Source
ps axo stat,ppid,pid,comm | grep -w defunct
Kill parent process(es)
sudo kill -9 <ppid>
Find and kill zombie process(es). Source
ps axo stat,ppid,pid,comm | grep -w defunct
Kill parent process(es)
sudo kill -9 <ppid>
The Python package mattduck/gh2md exports Github repository issues and pull requests to a single, readable markdown file.
Set up Windows subsystem for Linux 2 (WSL2) for Linux development experience in Windows 10 and 11.
Open powershell with administrator privilege, run the following command in the host.
wsl --install --no-distribution
or install the components manually
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
After reboot, install the Linux distribution
wsl --update
wsl --set-default-version 2
wsl --install -d Ubuntu # Or another Linux distribution
If you want to move the WSL virtual disk file to another disk (in this example, D:\
), run the following commands in Windows12:
wsl --export Ubuntu .\Ubuntu\ext4.tar
wsl --unregister Ubuntu
wsl --import Ubuntu D:\Ubuntu\ .\Ubuntu\ext4.tar
Edit /etc/wsl.conf
in the WSL. You may need to set the default user if you have moved the virtual disk file of the WSL distribution.
[user]
default=username
Edit .wslconfig
3 in your Windows home directory (%USERPROFILE%
).
For example,
[wsl2]
memory=20GB # How much memory to assign to the WSL2 VM.
swap=8GB # How much swap space to add to the WSL2 VM. 0 for no swap file.
swapfile=C:\\temp\\wsl-swap.vhdx # Sets swap file path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx. Useful if your C drive has limited disk space.
Edit .wslconfig
3 in your Windows home directory (%USERPROFILE%
). 4
[experimental]
autoMemoryReclaim=gradual # Reclaim RAM usage
sparseVhd=true # Reclaim virtual disk (vhd) usage
To (manually) update the WSL kernel, run the following commands with administrator privileges:
wsl --shutdown
wsl --update
Note
Optimize-VHD
is not available in Windows Home edition.
To reclaim disk space from virtual hard disks (VHDs), run the following commands with administrator privileges 5:
wsl --shutdown
Optimize-VHD -Path %path-to.vhdx% -Mode Full
Alternatively, export the VHD as a tar file and reimport it again.
Cross-OS file access (e.g., accessing /mnt/c
in WSL) is at least one order of magnitude (10x) slower than accessing natively (/home/user/
).7
https://learn.microsoft.com/zh-tw/windows/wsl/basic-commands#import-and-export-a-distribution ↩↩
https://learn.microsoft.com/zh-tw/windows/wsl/wsl-config ↩↩↩↩
https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/ ↩↩
https://blog.miniasp.com/post/2023/05/14/Shrink-your-WSL2-Virtual-Disks-and-Docker-Images-and-Reclaim-Disk-Space ↩↩
https://answers.microsoft.com/en-us/windows/forum/all/optimize-vhd-not-found-in-windows-10-home/a727b760-0f82-4d0f-8480-d49eeaeb11a2 ↩
Open Windows Powershell with Administrator rights and run:
powercfg /batteryreport /output "C:\battery-report.html"
See the report at C:\battery-report.html
.
Things to do after Windows install.
See also The Ultimate Windows Development Environment Guide
The Chris Titus Tech's Windows Utility provides APP installs, fixes and tweaks.
irm christitus.com/win | iex
Run the following command and ignore the error. MS store will be installed.
wsreset -i
Click Microsoft.DesktopAppInstaller to install winget.
Install Chocolatey 🍫, a command-line interface (CLI) package manager for Windows.
Open the powershell prompt with admin privilege (e.g. via the Windows + X
menu):
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Install packages
choco feature enable -n=useRememberedArgumentsForUpgrades
choco install -y git.install --params "'/NoShellIntegration'"
choco install -y vscode qbittorrent firefox brave telegram bandizip nanazip honeyview potplayer lavfilters yt-dlp ffmpeg crystaldiskinfo crystaldiskmark directx vcredist-all sudo starship obsidian nerd-fonts-firacode nerd-fonts-hack github-desktop
choco uninstall -n --skipautouninstaller vscode qbittorrent telegram github-desktop brave
See also the 🍫 Chocolatey package list for more packages.
Disabling hibernation saves a lot of disk space (No more C:\hiberfile.sys
). Run this in powershell with admin rights:
powercfg -h off
Compact.exe /CompactOS:always
You can use nvcleaninstall to install Nvidia driver without bloat.
How to export high resolution TIFF images from PowerPoint slides.
Things to do after installing
Info
How to fix locale:
Uncomment the zh_TW
line in /etc/locale.gen
. And then run:
sudo locale-gen
Language Support
and then set locale to Taiwan
.
You can replace archive.ubuntu.com
with a closer mirror, e.g., tw.archive.ubuntu.com
or free.nchc.org.tw
in /etc/apt/sources.list.d/ubuntu.sources
. After you are done, run:
sudo apt clean && sudo apt update && sudo apt full-upgrade -y
List snap packages
snap list
Uninstall each Snap package
sudo snap remove $PKG
Stop the snapd service and uninstall it
sudo systemctl stop snapd
sudo apt remove --autoremove --purge snapd
sudo apt-mark hold snapd
Adding 3rd party repositories for latest packages not available in xUbuntu's official repositories.
First, install required package
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl git gnupg-agent software-properties-common
Setup Brave browser
sudo curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" | sudo tee /etc/apt/sources.list.d/brave-browser-release.list > /dev/null
sudo apt update && sudo apt install -y brave-browser
sudo add-apt-repository -y ppa:git-core/ppa
sudo apt update && sudo apt install -y git git-lfs
sudo add-apt-repository -y ppa:qbittorrent-team/qbittorrent-stable
sudo apt update && sudo apt install -y qbittorrent
Download and run the official binaries.
Xanmod is a general-purpose Linux kernel distribution with custom settings and new features.
curl -fsSL https://dl.xanmod.org/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/xanmod-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/xanmod-keyring.gpg] http://deb.xanmod.org releases main' | sudo tee /etc/apt/sources.list.d/xanmod-kernel.list > /dev/null
sudo apt update && sudo apt install -y linux-xanmod
The following section works for Ubuntu 24.04 LTS.
Install nvidia CUDA runtime and compatible GPU driver.
For Ubuntu 24.04:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda-repo-ubuntu2404-12-6-local_12.6.0-560.28.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2404-12-6-local_12.6.0-560.28.03-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
Add the CUDA compiler (nvcc
) to the system PATH
:
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
For WSL2, install Window NVIDIA GPU driver first; then install the CUDA toolkit in the WSL
# remove the old GPG key
sudo apt-key del 7fa2af80
# Install Linux CUDA toolkit
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update && sudo apt install -y cuda
Install the latest Mesa open source GPU drivers from the kisak PPA
sudo add-apt-repository -y ppa:kisak/kisak-mesa
sudo apt update && sudo apt full-upgrade -y
sudo dpkg --add-architecture i386
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/noble/winehq-noble.sources
sudo apt update && sudo apt install wine
Kubuntu backports: Latest versions of KDE framework and APPs
sudo add-apt-repository -y ppa:kubuntu-ppa/backports
sudo apt-get update && sudo apt full-upgrade -y
sudo apt update && sudo apt full-upgrade -y
Ubuntu:
sudo apt install -y git git-lfs cifs-utils ssh nala gnome-shell-extension-manager parallel baobab ncdu synaptic apt-xapian-index ppa-purge ubuntu-restricted-extras ffmpeg vlc mcomix fonts-wqy-microhei fonts-wqy-zenhei fonts-open-sans ttf-mscorefonts-installer zsh btrfs-compsize
Kubuntu:
sudo apt install -y git git-lfs cifs-utils ssh nala parallel ncdu kio-extras gnome-keyring ppa-purge kubuntu-restricted-extras ffmpeg vlc fonts-wqy-microhei fonts-wqy-zenhei fonts-open-sans ttf-mscorefonts-installer zsh btrfs-compsize synaptic apt-xapian-index
Setting tmpfs
(RAM disk) for /tmp
folder:
sudo cp -v /usr/share/systemd/tmp.mount /etc/systemd/system/
sudo systemctl enable tmp.mount
sudo mv /etc/apt/apt.conf.d/20apt-esm-hook.conf /etc/apt/apt.conf.d/20apt-esm-hook.conf.disabled
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
YOu can also search and install extensions via gnome-shell-extension-manager
Workspace behavior
=> General behavior
=> click behavior
.Desktop session
.The Seq (Sequence) field sequentially numbers chapters, tables, figures, and other items in a document.
Sources:
HEAD
: the current state of the repo.
Clone a git repo from a remote repository:
git clone <url>
Checking out a specific branch:
git clone <url> -b <branchname>
If there are submodule(s) in the Git repository, you might want to clone them as well using the --recursive
option.
git clone <url> --recursive
See also: SSH login to Git services like GitHub and GitLab.
git status # The current state of the repository.
git add <file> # Add a new or edited file to the staging area. i.e. telling git to track this file
git add -A # Track all files at once
git commit -m "Commit message" # Commit staged (added) file
git commit -am "Commit message" # Commit modified files without having to run git add beforehand
git revert <SHA> # Make a counter commit to undo the changes. The tracked files will go back to the <SHA> commit.
git fetch # Download objects and refs from another repository without really pull in the changes
git merge # After git fetch, merge the changes done in the remote to the local repo
git push <remote> <branch-name> # Push commits in to remote
git push --set-upstream <remote> <name-of-your-branch> # Setup remote url before push
git pull <remote> # Pull changes from the remote
To temporarily store untracked files.
git stash -u # Store current work with untracked files
git stash pop # Bring stashed work back to the working directory
git branch <branch_name> # Create a new branch
git branch -a # List all branches
git branch -d <branch_name> # Delete a branch
git checkout <branch_name> # checkout an existing branch
git checkout -b <branch_name> # Create a new branch and checkout it
git switch <branch_name> # Switch to a specified branch. If the branch name does not exist, create one.
git merge <branch_name> # Merge the branch into the current branch
Orphan branches are unrelated to others in history. For example, gh-pages
branch dedicated to GitHub pages.
git branch --orphan <branchname> # Create a orphan branch