linux常用命令整理
1. 括号中的内容为备注
Linux目录结构
目录 | 描述 |
---|---|
/ | 根目录 |
/bin | (binaries)存放二进制可执行文件 |
/sbin | (super user binaries)存放二进制可执行文件,只有root才能访问 |
/etc | (etcetera)存放系统配置文件 |
/usr | (unix shared resources)用于存放共享的系统资源 |
/home | 存放用户文件的根目录 |
/root | 超级用户目录 |
/dev | (devices)用于存放设备文件 |
/lib | (library)存放跟文件系统中的程序运行所需要的共享库及内核模块 |
/mnt | (mount)系统管理员安装临时文件系统的安装点 |
/boot | 存放用于系统引导时使用的各种文件 |
/tmp | (temporary)用于存放各种临时文件 |
/var | (variable)用于存放运行时需要改变数据的文件 |
命令基本格式
- 命令格式
命令 [option] [参数]
- 多个option时可以简化写在一起, 一些option可以简写, 例如
--all
简写为-a
- 命令提示符
例如:
【root@localhost~】#
root
表示当前登入用户localhost
为当前主机名~
当前所在目录#
用户提示符;#
表示超级用户;$
表示普通用户;
帮助命令
1. man
全屏显示在线帮助, 按q退出, 上下键移动;
格式: man 命令
, 进入在线帮助页面后:
-
输入 ? 键,向前查找,如 ?-h ,将会搜索含有“-h”的行
-
输入 / 键,向后查找,如 /-k ,将会向后搜索“-k”的行
-
按 N或者n(下一个)来进行上一个下一个相关匹配项查看。
-
man手册存放的位置 可以通过manpath命令来查看manpage的位置
-
man手册入口
1 用户指令 2 系统 3 程序库 4 设备 5 文件系统 6 游戏 7 杂项 8 系统指令 9 内核指令 一般用到的项为:1,5,8
常用:
man 1 passwd //在入口为用户指令去查询passwd的帮助文档
man 5 passwd //在入口为文件系统去查询passwd的帮助文档
2. help
- 内部命令的帮助文档, 例如
help cd
--help
选项, 例如rm --help
3. info
-
和man功能类似,都加详细,有不同主题之间的中转功能, 按q退出
-
例如
info cd
-
一般用help ,--help,足够man来补充,info用的很少
whereis/which/whois/whatis
1. whereis
whereis命令只能用于搜索二进制文件(-b)、源代码文件(-s)、说明文件(-m)。如果省略参数则返回所有的信息。
- 格式
whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]
-b 只查找二进制文件。
-B<目录> 只在设置的目录下查找二进制文件。
-f 不显示文件名前的路径名称。
-m 只查找说明文件。
-M<目录> 只在设置的目录下查找说明文件。
-s 只查找原始代码文件。
-S<目录> 只在设置的目录下查找原始代码文件。
-u 查找不包含指定类型的文件。
- 示例
[root@host1 ~]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz
[root@host1 ~]# whereis -b find
find: /usr/bin/find
[root@host1 ~]# whereis -m find
find: /usr/share/man/man1/find.1.gz
[root@host1 ~]# whereis -s find
find:
2. which
which命令是在PATH变量指定的路径中搜索指定的系统命令的位置。用echo $PATH可显示当前PATH变量的值。
- 常用
[root@host1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/env/jdk/jdk8/bin:/opt/env/jdk/jdk8/jre/bin:/opt/env/maven3.5/bin:/root/bin
[root@host1 ~]# which java
/opt/env/jdk/jdk8/bin/java
3. whois
Linux whois命令用于查找并显示用户信息。
whois root
4. whatis
用于查询一个命令执行什么功能,并将查询结果打印到终端上, 属于帮助命令
[root@host1 ~]# whatis ls
ls (1) - list directory contents
文件/目录命令
以下fn
为filename
简写, 表示文件名
命令 | 描述 | 常用 |
---|---|---|
ls | 查看目录内容 | ls -a ll |
touch | 创建文件 | touch fn |
echo | 打印到终端 | echo 字符串 echo 字符串 > 文件 |
file | 查看文件信息 | file fn |
cd | 切换目录 | cd ~ cd - cd .. `cd ! |
----- | ------------ | ----------------------------------- |
ls | 查看目录内容 | ls -a ll |
touch | 创建文件 | touch fn |
echo | 打印到终端 | echo 字符串 echo 字符串 > 文件 |
file | 查看文件信息 | file fn |
|
| pwd | 显示当前目录 | pwd
|
| rmdir | 删除文件夹 | rmdir -p 目录名
|
| cp | 复制 | cp sfile disdir
|
| mv | 移动/重命名 | |
| rm | 删除 | rm -rf 文件/目录
|
1. wc
(word count)
统计文本字数,行数; 默认计算指定文件 行数,字数,字节数;
wc [-clw] [--version] [文件...]
-c 只显示Bytes数
-l 只显示行数
-w 只显示字数, 若文本存在中文则结果会不准确
--version 显示版本信息
2. file
查看文件信息
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
-b 列出辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
-L 直接显示符号连接所指向的文件的类别。
-m<魔法数字文件> 指定魔法数字文件。
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。
[文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
3. 链接命令 ln
-
格式
ln [option] 原文件 目标文件 option -s 软链接, 不加-s为硬链接
-
硬链接特征
1. 拥有相同的i节点和存储block块,可以看做是同一个文件 2. 可以通过i节点识别 3. 不能跨分区 4. 不能针对目录使用
-
软链接特征
1. 类似Windows快捷方式 2. 软链接拥有自己的I节点和Block块,但是数据块中只保存原文件的文件名和I节点号,并没有实际的文件数据。 3. Irwxrwxrwx I软链接, 软链接文件权限都为: rwxrwxrwx 4. 修改任意文件,另一个都改变。 5. 删除原文件,软链接不能使用。
解/压缩指令
1. .zip
格式文件
- 压缩文件: zip 压缩文件名 源文件
- 压缩目录: zip -r 压缩文件名 源文件目录
- 解压: unzip 压缩文件
2. .gz
格式文件
- gzip [option] 文件名
option
-d 解压
-r 压缩目录
-l 显示压缩文件的大小,未压缩文件的大小, 即: 压缩比
-v 显示文件名和压缩比
-num 指定压缩速度, num为1~9, 系统默认为6
3. .bz2
格式文件
- bzip2 [option] 文件名
option
-c 将压缩过程产生的数据输出到屏幕上
-d 解压
-z 压缩
-k 保留源文件
-num 指定压缩速度, num为1~9, 系统默认为6
- bzip2 -cdz 压缩文件名
4. .tar.gz
格式文件
- tar [option] [file...]
option
-c 压缩
-x 解压
-z gzip压缩
-j bzip2压缩
-v 压缩过程显示文件
-f f之后接文件名
- 常用:
- 解压到当前目录: tar -zxvf 压缩文件
- 解压到指定目录: tar -zxvf 压缩文件 -C 指定目录路径
- 压缩: tar -zcfv 压缩包名.tar.gz 源文件目录
.tar.bz2
格式加解压,将上面命令中的z替换为j即可
网关/ip/端口
1. 查看ip地址:
- ifconfig (net-tools中已被废弃的命令,已多年未被维护)
- ip addr
2. 网卡
- 启动网卡: ifup ens33(网卡名)
- 关闭网卡: ifdown ens33(网卡名)
3. 端口
losf
是一个列出当前系统打开文件的工具.
使用实例:
lsof -i:8080:查看8080端口占用
lsof abc.txt:显示开启文件abc.txt的进程
lsof -c abc:显示abc进程现在打开的文件
lsof -c -p 1234:列出进程号为1234的进程所打开的文件
lsof -g gid:显示归属gid的进程情况
lsof +d /usr/local/:显示目录下被进程开启的文件
lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
lsof -d 4:显示使用fd为4的进程
lsof -i -U:显示所有打开的端口和UNIX domain文件
netstat
netstat -tunlp
用于显示 tcp,udp 的端口和进程等相关情况
netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
-r 显示路由表
实例
查看8080端口
netstat -tunlp | grep 8080
查看路由表
netstat -rn
查找/搜索
1. locate/slocate
相当于find -name
的另一种用法, 用于查找文件或者目录, 查询速度比find更快; 因为他不是搜索具体目录,而是搜索搜索一个数据库/var/lib/locatedb
;locate会在后台维护一个数据库: /var/lib/mlocate
这个后台数据库每天更新一次, 手动更新使用命令 updatedb
- 语法:
locate/slocate [option] [PATTERN]
option
-d <目录> 或 -database=<目录>
-u 更新slocate数据库
- 实例
搜索etc目录下所有以sh开头的文件:
locate /etc/sh
搜索用户主目录下,所有以m开头的文件,并且忽略大小写:
locate -i ~/m
2. find
用来在指定目录下查找文件。
- 语法:
find path [option]
option
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。 d:目录; c:字型装置文件; b:区块装置文件; p:具名贮列; f:一般文件; l:符号连结; s:socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
- 实例
将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
find . -name "*.c"
进程/负载/线程
1. ps
显示进程
- 格式
ps [option]
option
-A 显示所有程序
-a 显示线性
-u 以用户为主的格式来显示程序状况
-x 显示所有程序,不以终端机来区分
-e 列出程序时,显示每个程序所使用的环境变量
-f 用ASCII字符显示树状结构,表达程序间的相互关系
- 常用:
ps -aux | grep java
ps -ef | grep java
2. top
实时显示进程动态
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
- 格式
top [option]
option
-d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
-p 通过指定监控进程ID来仅仅监控某个进程的状态。
-q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
-S 指定累计模式
-s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
-i 使top不显示任何闲置或者僵死进程。
-c 显示整个命令行而不只是显示命令名
-实例
top //每隔5秒显式所有进程的资源占用情况
top -d 2 //每隔2秒显式所有进程的资源占用情况
top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
3. kill
终止进程
向指定的进程送信号或终止进程。kill指令的用途是送一个signal给某一个process;
- 格式
ps [option] pid
option
-9 强行终止进程
4. 查看负载
查看服务器负载常用命令 top
uptime
w
[root@host1 ~]# uptime
06:45:17 up 1:39, 1 user, load average: 0.00, 0.01, 0.05
[root@host1 ~]# w
06:45:18 up 1:39, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.25.1 05:06 6.00s 0.10s 0.00s w
load average
分别对应过去1分钟,5分钟,15分钟的负载平均值.
5. 查看进程中的线程
ps -T -p <pid>
查看进程号为pid的进程创建的所有线程top -H
列出所有Linux线程top -H -p <pid>
查看进程号为pid的进程内运行的线程- Htop工具
磁盘/目录情况
1. df 查看磁盘
查看文件系统的磁盘使用情况
- 格式
df [option]... [FILE]...
option
-h 使用人类可读格式
-k 单位为k
-m 单位为m
-l 只显示本地文件系统
- 常用
df -h
2. du 查看文件/目录
用于显示目录或文件所占用的磁盘大小
- 格式
du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]
option
-b或-bytes 显示目录或文件大小时,以byte为单位。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-k或--kilobytes 以1024 bytes为单位。
-m或--megabytes 以1MB为单位
-s或--summarize 仅显示总计
...
- 常用
du -sh / 查看/目录大小
du -sh /* 查看/目录下的文件及文件夹大小
用户/用户组/权限
1. 用户
- 添加用户
useradd
useradd [option] 用户名
option
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
常用:
useradd tom //创建一个名为tom的用户,默认在home目录下
- 删除用户
userdel
userdel [option] 用户名
option
-r 把用户主目录也一起删除
常用:
userdel -r tom //删除用户tom在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录
- 修改密码
passwd
passwd [option] 用户名
option
-l 锁定口令, 即禁用账号
-u 口令解锁
-d 使账号无口令
-f 强迫用户下次登入时修改口令
常用:
passwd // 修改当前用户口令
- 修改账号
usermod
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
usermod [option] 用户名
常用的选项包括-c
, -d
, -m
, -g
, -G
, -s
, -u
以及-o
等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
另外,有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
usermod -s /bin/ksh -d /home/z –g developer tom
将用户tom的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。
2. 用户组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
- 新增用户组
groupadd
groupadd [option] 用户组
option
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
常用:
groupadd group1 //向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
groupadd -g 101 group2 //此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
- 删除用户组
groupdel
groupdel 用户组
常用:
groupdel group1 //此命令从系统中删除组group1。
- 修改用户组的属性
groupmod
groupmod 选项 用户组
option
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
常用:
groupmod -g 102 group2 //此命令将组group2的组标识号修改为102。
groupmod –g 10000 -n group3 group2 //此命令将组group2的标识号改为10000,组名修改为group3。
-
用户组切换
newgrp
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。newgrp root
将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
3. 权限
- 文件权限
chmod
文件权限针对三类对象, 所属用户owner:o
; 所属组group:g
; 其他人other:o
;每类对象都定义了三种权限r
w
x
, 根据二进制 r = 4, w = 2, x = 1;
ls -l
drwxrwxr-x 2 kun kun 4096 7月 25 12:06 LGPL
依次为:文件权限 连接数 文件所有者 文件所属组 文件大小(默认单位B) 文件最后被修改时间 文件名
文件权限中第一个字符代表该文件是目录或文件等
d 目录
- 文件
l 链接文件
b 设备文件里面的可供存储的接口设备
c 设备文件里面的穿行端口设备,例如鼠标键盘
第一个字符后三个一组分别为文件所有者权限,同用户组权限,其他非本用户组权限
三个权限 rwx 对应read write execute
chmod 命令格式及常用操作如下:
chmod [option]... [file]...
option
-f:错误信息不显示
-R:递归修改权限
-v:显示详细修改权限过程
-c:和-v一样,但只有出现改变时才显示
常用:
chmod u+x test.sh // 为test.sh添加可执行权限
chmod 600 test.txt // 为test添加可读可写权限;
- 用户权限
chown
将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。一般只有root权限才能使用该命令
chown [option] [--help] [--version] user[:group] file...
option
user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件
常用:
chown root:group file1.txt // 将file1.txt所属用户设置为root, 用户组设置为group
文本显示
1. tail
tail -10 install.log 查看文件尾部的10行
tail -f install.log 小f跟踪文件的唯一inode号,就算文件改名后,还是跟踪原来这个inode表示的文件
tail -F install.log 大F按照文件名来跟踪
2. head
head -10 install.log 查看文件头部的10行
3. cat
由第一行显示文件内容(一次性将文件内容全部输出)
cat [option] 文件名
option
-b 列出行号,空白行不标号
-n 列出行号,空白行也标有行号
-A 相当于-vET的整合
-T 将[tab]按键以^T显示出来
-v 列出一些看不见的字符
-E 将行未的断行字符以$显示出来
4. tac
由最后一行开始显示,为cat的倒写
5. more
more 文件名 //可以翻页查看, 下翻一页(空格) 上翻一页(b) 退出(q)
6. less
less 文件名 // 可以翻页查看,下翻一页(空格) 上翻一页(b),上翻一行(↑) 下翻一行(↓) 可以搜索关键字(/keyword)
7. nl
添加行号显示
远程登入/文件传输
1. 远程登入ssh
- 格式
ssh ip地址
-
服务器之间配置免密登入
1.在当前服务器生成ssh公私钥对:ssh-keygen -t rsa
; 生成之后会在用户根目录下生成一个
.ssh
文件夹; 在.ssh
文件夹中有几个文件:authorized_keys
用于存放远程免密登入公钥, 主要通过这个文件记录多台机器的公钥;id_rsa
生成的私钥文件;id_rsa.pub
生成的公钥文件;know_hosts
已知的公钥清单;2.将公钥拷贝到需要远程登入的那台服务器认证文件
authorized_keys
中, \使用ssh-copy-id 远程服务器ip
命令拷贝3.远程登入测试,若不在需要密码即可登入,则成功了.
2. 文件传输scp
- 格式
scp [option] file_source file_target
option
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
-
常用
scp -rp fileName -P52113 root@10.0.0.41:/tmp/ 命令行中: r表示目录,p代表权限, filename 为要拷贝文件/文件目录名称 -P后面接端口号 root@要拷贝到的目的主机ip :后面接目的主机目录
服务管理
服务管理命令, centos6.x使用的是service和chkconfig; centos7.x之后使用的是systemctl 代替service和chkconfig
1. service
- 常用
service network status 查看网络服务的状态
service network stop 停止网络服务
service network start 启动网络服务
service network restart 重启网络服务
service --status-all 查看系统中所有的后台服务
2. chkconfig
-
常用
chkconfig 查看所有服务器自启配置 chkconfig iptables off 关掉指定服务的自动启动 chkconfig iptables on 开启指定服务的自动启动
3. systemctl
-
格式
systemctl stop/start/restart/status/disable/enable 服务名称
-
常用
停止firewall : systemctl stop firewall.service 禁止firewall开机启动 : systemctl disable firewall.service firewall开机启动: systemctl enable firewall.service
系统启动级别管理
vi /etc/inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault
花了几天时间整理了一下常用的linu命令, 可能还有一些遗漏, 日后再行补充....