Linux系统命令

常用命令使用帮助

用示例方式的简化版man手册, tldr

sudo npm install -g tldr

用户管理

# 添加用户
sudo useradd -m xulz
sudo passwd xulz

# 
adduser pt
adduser pt sudo  # 添加用户到组

# delete user
userdel username
# also remove home dir
userdel -r username

# create and change home
sudo useradd -m -d /home/data ubuntu
# change user home dir
usermod -d /home/data ubuntu
# change user home dir, and move current dir to home
usermod -m -d /home/data ubuntu

sudo权限

# 创建sudo组用户
useradd -aG sudo  xulz
# 添加到sudo
gpasswd -a xulz sudo  # Ubuntu
gpasswd -a xulz wheel # CentOS

# sudo免密码输入
echo "xulz ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/nopass

更改UID(user)和GID(group)

usermod -u 2001 xulz
groupmod -g 2001 xulz

# 注: 以上命令仅修改home目录,其他目录需手动执行

# troubleshooting: This account is currently not available
# change from /sbin/nologin
usermod -s /bin/bash username

组权限

# 查看用户组
id xulz
groups user_name

# 获取主用户组
id -gn user_name

# 增加用户到组
usermod -a -G groupname username

groupadd perftest    # 增加组
usermod -a -G perftest ubuntu
usermod -a -G perftest jenkins
chgrp -R perftest /opt/jmeter

文件管理

# 列表方式展示可读文件大小
ls -lh
# 列表方式展示,以修改时间排序(新的在前)
ls -lt
# 时间升序(旧的在前)
ls -ltr

# 创建HOME目录
mkhomedir_helper xulz

# 输出全路径
readlink -f myfile

# 创建软链接
# f 代表重写原链接
# T 代表把链接当做普通文件
ln -sfT path/to/file path/to/symlink

文件操作

tar

  • 创建文件夹压缩包: tar -cvzf demo.tar.gz demo
  • 解压缩tar: tar -xvf filename.tar

zip

  • 压缩打包: zip -r squash.zip dir1

gunzip

  • 解压缩: gunzip filename.tar.gz

unzip

-o overwrite files WITHOUT prompting
-q[q] quiet print

tree

文件内容浏览

less
head
tail
tail -f <file_name>

head/tail:

  • tail -f file 一直读文件
  • tail -n +num 从num行显示文件
head -1000 in.log  > out.log
tail -1000 in.log  > out.log

sed:

sed -n '100,1000 p' in.log > out.log

awk:

awk 'NR>=10&&NR<=20' in.log > out.log

磁盘空间占用

du:

  • -s,–summarize
  • -c,–total
  • -h,–human-readable
# 磁盘空间
df -h
# 每个文件夹汇总
du -hs *
# 文件夹占用空间大小汇总
du -sh /home/xulz
du –sh /var/cache/apt/archives
# 限制深度
du -h --max-depth=N  /home/xulz
# 通配符
du -ch */*.png
# 磁盘相关
lsblk

查找大文件

# 最常用
find . -type f -size +100M -exec ls -lh {} \; | awk '{ print $8 ": " $5 }'
# 支持文件名含空格
find $1 -type f -exec stat --format '%Y :%y %n' {} \; | sort -nr | cut -d: -f2- | head
# 执行更快
find $1 -type f | xargs stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head

查找并删除缓存文件

lsof | grep delete
lsof -nP | grep '(deleted)'
lsof -nP +L1  | grep '(deleted)'
find /proc/*/fd -ls | grep  '(deleted)'
Truncate : > "/proc/$pid/fd/$fd"

权限

# 修改所有者和组
chown user:group file_or_directory

# 修改文件权限
chmod u+x your_file
# [u]ser/[g]roup/[o]thers/[a]ll
# [r]ead/[w]rite/e[x]ecute
# 支持操作符 +-=
# -R 文件夹递归


# 新文件或文件夹自动继承父文件夹
chmod g+s /path/to/parent

删除除某文件外的所有文件

# 如果要删除文件夹,更新为 -type d -r
find . ! -name 'file.txt' -type f -exec rm -f {} +
# 或者
# enable extglob
shopt -s extglob

rm -rf -- !(file.txt)

NFS Mount

# 建立映射
mkdir /var/backups
mount -t nfs  192.168.0.10:/var/backups   /var/backups

# 查看是否成功
mount 
df -h
# 取消映射
umount /var/backups

mc 目录浏览和文件管理

类似 total command

Server必备

同步系统时间

# CentOS
yum install ntp
systemctl enable ntpd.service  # CentOS 7.x
# chkconfig ntpd on  # CentOS 6.x
ntpdate pool.ntp.org

# Ubuntu
apt install ntp
service ntp restart
ntpq -p

Locale设置

# 当前locale
locale
# locale列表
locale -a

# 修改shell语言, .bashrc 或 .zshrc
export LANG=en_US.utf8

进程管理

bg/fg

使程序后台/前台运行.

  • Ctrl + Z: 使最近的tty进程暂停 (会发送SIGSTP 信号)
  • bg: 使得刚暂停的进程编程后台进程
  • fg:重新回到前台运行

nohup

no hangup,即使用户登出,也能在后台运行服务。

不挂断地运行命令。 运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。 在注销后使用 nohup 命令运行后台中的程序。 要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

系统

# 时间戳转换
date -d@1234567890
# 显示unix时间戳
date +%s
# 关机
shutdown -h now

# base64
echo Mjg1YXl3NW9sNmljaDN2Cg== | base64 --decode

文件完整性校验

md5sum file
sha256sum file

硬件信息

sudo dmidecode -t 1

CPU

lscpu

#
cat /proc/cpuinfo
grep 'physical id' /proc/cpuinfo | sort -u |wc -l
grep 'processor' /proc/cpuinfo | sort -u |wc -l
# 
lshw -class CPU

# dmidecode 以可读方式读bios数据
dmidecode --type processor
# install first
hwinfo --cpu

Memory

dmidecode --type 17 | grep -i speed
lshw -short -C memory

# 其他
lshw -class disk
lshw -class network

创建ISO

  • dd: 转换并复制一个文件
# from CD
dd if=/dev/cdrom of=~/cdrom_image.iso

# 产生随机文件
dd if=/dev/urandom of=test.dat count=1024 bs=1024k

# from a directory
mkisofs -o ~/cd.iso /tmp/dir/

增强命令

open
# git
tig
# HTTP Client
httpie
# 彩显文本
lolcat
# 浏览器
w3m
lynx

复制/粘贴

# 复制/粘贴
apt install xclip  # 类似Mac的pbcopy/pbpaste
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'