Linux下最常用的命令汇集

Linux下最常用的命令汇集

本文用来收集一些常用的Linux命令, 方便查阅. 如果需更深一步的使用可以通过查看man手册来学习.

系统类

ssh

1
sh-keygen -t rsa -C "comment一般是email"

-b bites 默认2048bit 最少768bit (768bit以上几乎不会被破解)

根据私钥生成公钥

1
ssh-keygen -y -f rsa.pem > rsa_pub.pem

查看系统信息

cat /etc/issue (i386 i686 32位;x86_64 64位)
uname -i 查看系统位数
uname -r 查看内核版本
cat /etc/*release
free -m 查看内存

关机重启

shutdown -h now, poweroff, halt 立即关机
shutdown -r now, reboot 立即重启
shutdown -r 20:35 在时间为20:35时候重启
shutdown -h 10 10分钟后关机

会话相关

whoami 显示用户标识
who 显示所有当前登录系统的用户标识
w 显示谁登录系统以及他们在做什么
logout 注销
last 显示用户过去登陆记录

目录

pwd 打印当前路径
mkdir 创建目录
rmdir 删除目录
rmdir -p 连同父母录一起删除(均为空目录)
rm -rf 删除文件和目录
pushd dir 改变工作目录至dir,并将dir压入栈(位于栈顶,编号为0)
pushd +n 改变工作目录,将#n目录移到栈顶
popd 弹出栈顶
popd +n 从栈移出目录#n

用户

添加用户,同时创建home目录

1
2
3
4
5
adduser tsw

# 等同于
useradd -m tsw
passwd tsw

用户添加到sudoers中
vim /etc/sudoers

1
2
# 在#User privilege specification下面添加下面这句,保存
tsw    ALL=(ALL:ALL) ALL

passwd 更改密码

删除用户:

1
2
3
4
5
# 删除 /etc/passwd,/etc/shadow,/etc/grou 中的记录
userdel tsw

# 同时删除该账户的家目录
userdel -r tsw

环境变量
sudo 与root不同, 环境变量不是加载root的环境变量, 而是最原始的。
可以通过如下修改使sudo与当前用户$PATH相同

1
2
3
4
5
sudo su
chmod +w /etc/sudoers
# 修改 /etc/sudoers 将Defaults env_reset 改成 Defaults !env_reset
chmod -w /etc/sudoers
# 在本用户.profile中添加 : alias sudo='sudo env PATH=$PATH'

更改默认shell

1
sudo usermod -s /bin/zsh tsw   # tsw用zsh登录# orchsh -s /bin/zsh   # 更改当前用户登录方式

改变拥有者和群组

1
2
chown mail:mail log2012.log
chown root: log2012.log

改变文件群组

1
chown :mail log2012.log

改变指定目录以及其子目录下的所有文件的拥有者和群组

1
chown -R -v root:mail test6

用户组

usermod -a -G group user 将用户user加入到group组里
usermod -G groupA 将用户user加入到group组里, 同时退出原来的组
gpasswd -d 用户名 组名 从用户组中删除用户

文件操作

ls

  • ls -l 查看权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    drwxrwxrwx 10 tsw  tsw  4096 Jan 27 22:39 tsw

    # 输出内容解释
    文件类型: d
    Owner权限: rwx
    Group权限: rwx
    Other权限: rws
    硬连接数: 10
    Owner: tsw
    Group: tsw
    大小: 4096 字节
    修改时间(Modify) Jan 27 22:39
    文件名称: tsw
  • 文件类型:

    • -, f 普通文件
    • d 目录文件
    • l 符号链接
    • c 字符设备
    • b 块设备
    • p 命名管道
    • s 套接字文件
  • 权限类型(对于文件)

    • r 读权限
    • w 写权限
    • x 执行权限
    • s 文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(c h m o d命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效)。Linux修改密码的passwd便是个设置了SUID的程序,普通用户无读写/etc/shadow文件的权
    • t 设置粘着位,一个文件可读写的用户并一定相让他有删除此文件的权限,如果文件设置了t权限则只用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。
    • i 不可修改权限 例:chattr u+i filename 则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename就可以了。查看文件是否设置了i权限用lsattr filename。
    • a 只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a设置追加权限。
  • 权限类型(对于目录)
    • r 可以ls (linux如果对一个文件有读权限, 需要从根->当前目录均有r权限)
    • w 可以在该目录下创建文件和目录, 删除文件, 重命名文件
    • x 可以cd进去
  • ls的颜色
    • 深蓝色: 目录
    • 绿色: 可执行文件
    • 红色: 压缩文件
    • 浅蓝色: 链接文件
    • 灰色: 其它的一些文件

ls -lh 常用, 会自动转换文件大小单位
ls -lt 按修改时间降序 (默认按文件名称排列)
ls -lrt 按修改时间升序

ls -i 查看文件节点号

stat

  • stat a.txt
    1
    2
    3
    4
    5
    6
    7
    8
      File: a.txt
    Size: 19 Blocks: 8 IO Block: 4096 regular file
    Device: 1000004h/16777220d Inode: 6641771 Links: 1
    Access: (0755/-rwxr-xr-x) Uid: ( 501/ tsw) Gid: ( 20/ staff)
    Access: 2015-08-11 10:37:46.000000000 +0800 # 访问时间
    Modify: 2015-08-11 10:37:29.000000000 +0800 # 文件内容修改时间 (ls时默认的时间)
    Change: 2015-08-11 10:38:54.000000000 +0800 # 文件属性属性修改时间
    Birth: 2015-07-07 16:57:32.000000000 +0800 # 文件创建时间

umash

设置当前用户默认掩码值
666 普通不可执行文件
777 普通可执行文件
777 目录
减去用户掩码值得到默认文件权限。

shred

清空文件(文件填充随机数)
-v 显示详细过程
-z 全填0
-u 清空后删除
-f 忽略受限的文件权限

which

查看某个命令的位置
建议使用 which -a 会列出所有位置,默认使用的位于第一个 (不建议使用whereis)

touch

touch 将访问和修改时间改为当前时间

ln

ln -s 建立符号链接

  • 与符号链接相关的目录命令:
    • cd -P 进入真实目录
    • pwd -P 显示真实目录
    • cd -L 符号目录(默认)
    • pwd -L(默认)

touch

touch * 将文件改为相同的访问时间和修改时间
touch -c 即使制定了新的文件也不会自动创建
touch -m 改变修改时间
touch -a 改变访问时间
touch -t 200203120610 改变文件时间为2002年3月12日6点10分

cp

cp -i 交互式复制(建议) ,会提示是否覆盖(cp默认自动覆盖)
cp -p 保持文件属性
cp -r 拷贝目录
cp doc/* backups 复制doc中的文件到backups
cp -r doc backups 将doc目录复制到backups中去

cp a b (其中a是文件)
1). 若b是目录,则将a复制到b中去
2). 若b是文件,则用a覆盖b
3). 若无b,则复制一个a命名为b

cp file file$(date +%s) 以时间命名

mv

mv -i 交互式(建议)
mv -f 强制复制,并忽略-i
原理与cp相同

rm

rm -i 交互式删除
rm -r 删除整个目录
rm -rf 强制删除目录及文件(慎用)

hexdump

1
2
hexdump -C a.txt  # hex + ascii
hexdump -c a.txt # 仅字符, 特殊字符会显示为转义符

fuser

查看哪些进程使用了指定目录

1
fuser /root

其他

id 显示uid,gid,所在group
cat 打印文件内容
tail -f a.log -n 30 打印最后30行, 并持续输出

进程

pid变量

$$
$!

sleep

sleep 5 暂停5s
sleep 5d 暂停5天

jobs

显示作业列表
jobs -l 显示ID

fg

将作业移至前台
fg 2
fg -
fg +
为了方便,bash用%来代替fg, 最常用的一个是%-(切换到上一个程序)

bg

将作业移至后台

&

[command] & 后台作业(挂在到当前bash)

nohup

nohup is a POSIX command to ignore the HUP (hangup) signal. The HUP signal is, by convention, the way a terminal warns dependent processes of logout.

  • nohup [command] & 忽略SIGHUP信号, 当前bash退出是会挂到PID为1的进程下
  • &符号是必须的, 他会让nohup [command] 在当前shell中后台运行, 当当前shell logout的时候忽略

ps

显示进程信息, ps是从/proc目录中获取进程信息

注:Unix选项和BSD选项的区别: Unix选项以连字符‘-’开头,BSD选项前无连字符。

基本用法: (以下为Unix标准 ,非BSD)

  • ps 与您的用户标识和终端相关的进程(显示自己的进程)
  • ps -a 与任何用户标识和终端相关的进程(显示所有非守护进程的进程)
  • ps -e 所有进程(包括守护进程) 同 -A
  • ps -p pid 与指定pid相关的进程
  • ps -u userid 与指定用户标识id相关的进程

常用:

  • ps -ef 显示所有用户进程,完整输出
  • ps -t - 仅显示所有守护进程

ps显示了哪些参数:

  • ps: (PID TTY TIME CMD)
  • -f: (UID PID PPID C TTY TIME CMD)
  • -F: (UID PID PPID C SZ RSS STIME TTY TIME CMD)
  • -l: (F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD)
  • -ly:(S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD)

参数的含义:

  • ADDR : 进程表中虚拟地址 (virtual address within process table)
  • C : 处理器利用率(废弃率) (processor utilization (obsolete))
  • CMD : 正被执行的命令名称 (name of command being executed)
  • F : 与进程相关的标志 (flags associated with the process)
  • NI : nice值,用来设定优先级 (nice number, for setting priority)
  • PID : 进程ID (process ID)
  • PPID : 父进程ID (parent’s process ID)
  • PRI : 优先级(较大数字=较低优先级) (priority (higher number = lower priority))
  • RSS : 内存驻留空间(内存管理) (resident set size (memory management))
  • S : 状态代码(D,R,S,T,Z) (state code (D,R,S,T,Z))
  • STIME : 累计系统时间 (cumulative system time)
  • SZ : 物理页的大小(内存管理) (size in physical pages (memory management))
  • TIME : 累计CPU时间 (cumulative CPU time)
  • TTY : 控制终端的完整名称 (full name of controlling terminal)
  • UID : 用户标识 (userid)
  • WCHAN : 等待通道 (wait channel)

进程状态信息:

  • D: 不可终端睡眠,等待时间结束(D=disk)
  • I: Idle:空闲
  • R: 正在运行,可运行(正在运行队列中等待)
  • S: Sleeping:可中断睡眠
  • T: Suspended:挂起
  • Z: Zombin:僵尸进程

top

监视系统进程
top [-d delay] [-n count] [-p pid[,pid]…]

进入top的命令:
b 显示水平亮条
x 显示垂直亮条
shift + </> 选择列

pmap PID 显示程序内存图

可以用htop替换top

pstree

pstree [-acnpuAG ] [pid|userid]
-a 显示命令参数
-c 展开所有树
-n 同一父进程的子进程按PID排序
-p 显示PID
-u 显示UID
-A 强制以ASCII显示
-G 强制以绘制表格线方式显示

fuser

显示使用该文件的进程ID

kill

kill pid SIGTERM 正常关闭程序
kill -9 pid 快速杀死进程(不释放资源)

网络相关

ifconfig

ifconfig 查ip, 或者 ip addr

netstat

netstat -tln 查端口监听, t:tcp, l:listen, n:number 或者ss -tln

curl

curl ip.cn 查本机外网ip

环境变量

env
/usr/bin/env
/usr/bin/env python 运行当前环境变量下的python命令, 常用在bash脚本的开头
locale 显示定义区域设置的环境变量
export LC_COLLATE = C (更改为POSIX标准,文件名按C语言排序)

加密解密

1
2
3
4
5
6
echo -n abc |md5sum 
echo -n abc |sha1sum
echo -n admin:123 |bash64

# base64 解密
echo -n YXNkY3hjdg== | base64 -d

echo的 -n 表示不输出换行符

时区, 语言环境更改

查看UTC时间 date -u
查看时区 date -R
指定时区并按照格式打印日期 TZ='Asia/Shanghai' date +"BUILD-%y%m%d.%H%M%S"

date +"%Y-%m-%d %T.%3N %z"

更改为上海时间
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
更改为UTC时间
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
hwclock 将时间写入硬件

更改语言环境

1
2
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

系统字体

linux添加字体:

  • 安装:
    yum install -y fontconfig mkfontscale
    sudo apt-get -y install fontconfig xfonts-utils

  • 查看字体
    fc-list
    fc-list :lang=zh

  • 加入新字体
    cp MSYH.TTF /usr/share/fonts/

  • 刷新缓存

    1
    2
    3
    mkfontscale
    mkfontdir
    fc-cache

磁盘操作

mount

挂载磁盘
mount /dev/sda /mnt/sda
mount -t ntfs /dev/sdc1 /mnt/usbhd1
-t后面跟的是类型

卸载
umount /dev/sda

挂载内存盘
mount -o size=128M -t tmpfs RamDisk1 /mnt/tmpfs, 以G为单位: size=2G

du

(disk usage) 查看磁盘使用

df

df -h
查看挂载分区格式:
df -T

fdisk

fdisk -l 列出所有设备

fdisk /dev/sda
p 列出当前分区情况

格式化分区为ntfs格式:
mkntfs -f /dev/sdb1 (需要apt-get安装ntfs-3g)

dd读引导扇区
dd if=/dev/hdxx of=bootsect.lnx bs=512 count=1

dd if=/dev/hda of=mbr.bin bs=512 count=1 然后用hexdump查看 或者 od -xa mbr.bin

格式化:
mkfs -t ext3 /dev/hda1

dd

硬盘读写速度测试
1G, 1M大小的读写测试

读:
dd bs=1M count=1000 if=/dev/zero of=test.dd conv=fdatasync

写:
echo 3 > /proc/sys/vm/drop_caches ; time -p dd if=test.dd of=/dev/null bs=1M

参考

<<Harley Hahn’s Guide to Unix and Linux>>
http://vbird.dic.ksu.edu.tw/linux_server/

0%