Linux
命令行模式常用快捷键
Tab
:自动补全命令Shift+PgUp/PgDn
:向上翻页/向下翻页Ctrl+c
:停止当前程序
Linux系统运行级别
查看当前系统的运行级别命令:runlevel
[root@lena /]# runlevel
N 3 # 返回"前一个运行级别 当前运行界别" 其中N表示无
Linux运行级别的文件存放在/etc/rc.d/
目录下:可以看到由rc0-rc6,共有7个运行级别。
[root@lena /]# cd /etc/rc.d/
[root@lena rc.d]# ll
total 36
drwxr-xr-x. 2 root root 4096 May 6 21:28 init.d
drwxr-xr-x. 2 root root 4096 May 6 21:28 rc0.d
drwxr-xr-x. 2 root root 4096 May 6 21:28 rc1.d
drwxr-xr-x. 2 root root 4096 May 12 12:42 rc2.d
drwxr-xr-x. 2 root root 4096 May 12 12:42 rc3.d
drwxr-xr-x. 2 root root 4096 May 12 12:42 rc4.d
drwxr-xr-x. 2 root root 4096 May 12 12:42 rc5.d
drwxr-xr-x. 2 root root 4096 May 6 21:28 rc6.d
-rw-r--r-- 1 root root 473 May 26 2017 rc.local
Linux7个运行级别区别如下:
-
运行级别0:系统停机(关机)状态。若将0设为默认运行级别,则不能正常启动。
-
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆。
-
运行级别2:多用户状态,无NFS。
NFS:网络文件系统,是UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
-
运行级别3:完全的多用户状态,有NFS。登录后进入控制台命令行模式。
-
运行级别4:未使用,保留级别。
-
运行级别5: 图形化模式,登陆后进入图形GUI模式 。
-
运行级别6: 重启模式。若将6设为默认运行级别,则不能正常启动,会陷入一直开机重启开机重启的循环中。
当前运行级别切换:init N
,例如输入init 0
,系统会关机;init 6
,系统会自动重启;init 5
,系统会进入图形GUI模式 …(注意,该切换是临时的)
init进程ID为1,是初始化进程,查看进程:ps -ef|grep init
初始化进程存在一个对应的配置文件:/etc/inittab
(系统配置文件),文件主要内容如:id:5:initdefault:
上面使用init N
命令的切换是临时的,重启后会恢复到默认值,若想要永久切换运行级别,需要修改文件/etc/inittab
中的initdefault
的值。修改默认运行级别:vim /etc/inittab
Linux文件目录结构
- bin:是usr/bin的快捷方式。存储二进制文件,都是可以被运行的文件。存储着最常使用的命令。
- boot:存放启动Linux使用的核心文件(连接文件、镜像文件)
- dev:主要存放外界设备(u盘、光盘…)不能直接被使用,需要挂载。在Linux中一切皆文件,访问设备和文件的方式一样。
- etc:主要 存放所有的系统管理所需要的配置文件和子目录。
- home:除了root用户外的其他用户的家目录。
- lib:存放着系统最基本的动态连接共享库
- lost+found:用于非法关机后存放文件。默认情况是空的。
- media:Linux自动识别设备会挂载到该目录下。
- mnt:当外接设备需要临时挂载的时候,挂载在该目录下。
- opt:用来主机额外安装的软件。默认是空的。(optional)
- proc:存储Linux运行时的进程, 是一个虚拟的目录,它是系统内存的映射。(process)
- root:root用户的家目录。
- run:临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。 若有/var/run目录,应该指向该目录。
- sbin:是usr/sbin的快捷方式。存储具有super权限才能执行的二进制文件,如halt、shutdown关机。(super bin)
- srv:该目录存放一些服务启动之后需要提取的数据。
- tmp:存放产生的临时文件,系统使用完会删除。(temporary)
- usr:存放用户自己安装的软件。
- var:存放程序/系统的日志文件。
Linux文件与权限
在Linux中,一切皆文件。
访问文件的身份
对一个文件来说,访问文件的一般有四种身份:
- Owner身份(文件所有者):默认是文件的创建者。可以更改。
- Group身份(与文件所有者同组的用户):当同一团队多人在同一台主机上开发的时候,可以将同一组的人员的用户设为同一组。
- Others身份(其他人):既不是文件所有者,也不是与所有者同组的用户。
- Root用户(超级管理员):拥有最大权限。
文件权限
查看文件权限
我们可以使用ll
或者ls –l
命令来查看一个文件的属性以及文件所属的用户和组。查看到的文件信息会按列显示,前十个字符依次描述了文件的类型、文件所属者的权限、文件所属组的权限、其他用户的权限,具体字符的含义如下:
-
表明这个文件的类型,其中每个字符的含义是:“d”目录;“-”文件;“l”链接文档;“b”可随机存取装置;“c”一次性读取装置(鼠标、键盘)
-
文件所属者的读权限
-
文件所属者的写权限
-
文件所属者的执行权限
-
文件所属组的读权限
-
文件所属组的写权限
-
文件所属组的执行权限
-
其他用户的读权限
-
其他用户的写权限
-
其他用户的执行权限
以上1-3表示文件所有者的权限,4-6表示文件同组用户的权限,7-9表示其他用户的权限。若有读权限,则使用“r”字符表示;若有写权限,则用“w”字符表示;若有执行权限,则用“x”字符表示;如无权限,则用“-”表示。
例如:drwxr-xr-x
表示了文件是文件夹,文件所有者有读写执行权限,文件同组用户和其他用户只有读和执行权限。
设置文件权限
设置文件权限,使用命令:chown 选项 文件所有者权限+文件所有者所属组权限+其他用户权限 文件
1.数字形式
没有任何权限=0;读权限=4;写权限=2;执行权限=1
由此可以得到0-7数值分别对应的权限:
数值 | 可读=4 | 可写=2 | 可执行=1 | 目录列表 |
---|---|---|---|---|
0 | ✖ | ✖ | ✖ | — |
1 | ✖ | ✖ | ✔ | –x |
2 | ✖ | ✔ | ✖ | -w- |
3 | ✖ | ✔ | ✔ | -wx |
4 | ✔ | ✖ | ✖ | r– |
5 | ✔ | ✖ | ✔ | r-x |
6 | ✔ | ✔ | ✖ | rw- |
7 | ✔ | ✔ | ✔ | rwx |
例如:给文件a.txt设置权限,文件所有者拥有全部权限(4+2+1=7),文件所有者同组用户拥有读和执行权限(4+1=5),其他用户只能读文件(4),那么设置文件权限的命令为 chmod 754 a.txt
2.字母形式
指定设置的身份:
- u:表示文件所有者(Owner身份)
- g:表示文件所有者同组用户(Group身份)
- o:表示其他用户(Others身份)
- a:表示所有身份(即=u、g、o)
指明要设置的权限:
- r:表示可读,read
- w:表示可写,write
- x:表示可执行,execute
- -:表示没有权限
例如:给文件a.txt(-rw-------)设置权限,要求所有者拥有全部的权限,同组用户拥有读和执行权限,其他用户只有读权限,可使用命令设置 chmod u=rwx,g=rx,o=r a.txt
此外,还可以用命令指明要更改的部分,如 chmod u+x,g+rx,o+r a.txt
去除文件所有权限:chmod a=--- 文件
为所有文件设置读权限:chmod a+r 文件
文件属性
使用ll
或者ls –l
命令时,会按列显示文件的信息,显示的内容格式为:文件类型权限 硬链接数量 文件所有者 文件所有者所在组 文件大小 最后一次更改时间 文件名
[root@lena /]# ll
lrwxrwxrwx. 1 root root 7 Aug 18 2017 bin -> usr/bin
dr-xr-xr-x. 4 root root 4096 May 27 16:01 boot
-rw-r--r-- 1 root root 144935989 Jun 2 10:32 jdk-8u291-linux-x64.tar.gz
lrwxrwxrwx. 1 root root 7 Aug 18 2017 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Aug 18 2017 lib64 -> usr/lib64
drwx------. 2 root root 16384 Aug 18 2017 lost+found
drwxr-xr-x. 2 root root 4096 Nov 5 2016 media
修改文件属性
更改文件所有者:chown [-R] 用户名 文件
更改文件的所属用户组:chgrp [-R] 所属用户组 文件
同时更改文件的所有者和所属组:chown -R 文件所有者:所属用户组 文件
其中,当文件是目录的时候,选项-R
会迭代更改该目录下的所有文件。
Linux命令
完整的命令标准格式:命令 [选项] [操作对象]
- 若不写操作对象,默认当前对象
- 一个命令可以有多个选项、多个操作对象,但只能有一个命令
man
man 命令
:查看Linux命令的手册,英文显示,不需要联网。
退出按下q键
文件与目录管理
ls 列出目录
ls
:列出当前工作目录下的所有文件/文件夹名称
[root@lena /]# ls
bin dev home lib lost+found mnt proc run sbin sys usr
boot etc jdk-8u291-linux-x64.tar.gz lib64 media opt root samba srv tmp var
ls 选项 路径
:以指定格式显示指定路径下的目录信息
- 路径可以是绝对路径或相对路径
- 选项-l:以详细列表的形式进行展示,list
- 选项-a:显示所有文件/文件夹,包括隐藏的文件/文件夹
- 选项-h:显示文档的时候按可读性较高的形式显示,即自动切换文件大小时显示的单位
- 选项-d:仅列出当前目录的信息,而不是目录内的文件信息
[root@lena /]# ls -lh
lrwxrwxrwx. 1 root root 7 Aug 18 2017 bin -> usr/bin
dr-xr-xr-x. 4 root root 4.0K May 27 16:01 boot
drwxr-xr-x. 89 root root 12K Oct 23 20:34 etc
-rw-r--r-- 1 root root 139M Jun 2 10:32 jdk-8u291-linux-x64.tar.gz
pwd 显示当前工作目录
选项-P:显示出实际路径,而非使用连接(link)路径
[root@lena bin]# pwd
/bin
[root@lena bin]# pwd -P
/usr/bin
cd 切换目录
cd [绝对路径/相对路径]
:切换当前工作目录
绝对路径:“.”表示当前路径;“…”表示上一级目录。
“~”符号在Linux中表示家目录,命令cd ~
与cd
一样,都会切换到家目录。
mkdir 创建新目录
mkdir 选项 目录
:创建新的文件夹,make directory
- 选项-m:配置文件权限
- 选项-p:若创建目录路径上有多个不存在的目录,递归创建多层目录
[root@lena ~]# mkdir -m 761 linux
[root@lena ~]# ll
drwxrw---x 2 root root 4096 Oct 25 13:33 linux
可以一次性创建多个目录:mkdir 目录1 目录2 目录3
touch 创建文件
touch 文件
:创建文件
可以一次性创建多个文件:touch 文件1 文件2 文件3
[root@lena linux]# mkdir directory
[root@lena linux]# touch file1 file2
[root@lena linux]# ll
total 4
drwxr-xr-x 2 root root 4096 Oct 25 13:48 directory
-rw-r--r-- 1 root root 0 Oct 25 13:48 file1
-rw-r--r-- 1 root root 0 Oct 25 13:48 file2
rmdir 删除空目录
rmdir [-p] 目录
:选项-p表示,从该目录起,一次删除多级空目录
注意:若文件夹有内容,则无法删除。
[root@lena linux]# rmdir directory
rmdir: failed to remove ‘directory’: Directory not empty
rm 删除文件或目录
rm 选项 文件或目录
- 选项-f:若文件或目录不存在,则忽略,不显示警告
- 选项-i:互动模式,在删除前会进行询问
- 选项-r:递归删除指定目录及下所有文件
[root@lena linux]# ls
directory file1 file2
[root@lena linux]# rm -f file3 #删除不存在的文件
[root@lena linux]# rm file3 #删除不存在的文件
rm: cannot remove ‘file3’: No such file or directory
[root@lena linux]# rm -i file2 #删除时进行提示
rm: remove regular empty file ‘file2’? n
[root@lena linux]# ls
directory file1 file2
mv 移动文件
mv 需要移动的文件路径 新文件路径
,当同一路径不同文件名,也就实现了文件重命名的效果。
- 选项-f:若新文件名已经在路径中存在,不会询问直接覆盖。
- 选项-i:若新文件名已经存在,会询问是否覆盖。
- 选项-u:若目标文件已经存在, 且移动文件比较新,才会覆盖。
[root@lena linux]# ls
directory file1 file2
[root@lena linux]# mv file1 file3
[root@lena linux]# ls
directory file2 file3
[root@lena linux]# mv -i file2 file3
mv: overwrite ‘file3’? y
[root@lena linux]# ls
directory file3
cp 复制文件或目录
cp 选项 源文件 指定路径
:复制原文件到指定路径。
- 选项-r:递归复制,若复制的是文件夹,必须写。
- 选项-p:复制文件的时候将文件属性也复制过去,不使用默认属性(备份)
- 选项-d: 若来源档为连结档的属性(link file),则复制连结档属性而非文件本身。
- 选项-a:等价于选项r+p+d
- 选项-i:若指定路径已经存在同名文件,则复制覆盖前先询问
- 选项-s: 复制成为符号连结档 (symbolic link),即捷径文件
- 选项-l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
软链接:
ln -s 源文件 目标文件
硬链接:
ln 源文件 目标文件
软连接硬连接参考文档:https://blog.csdn.net/gao_zhennan/article/details/79127232
find 查找文件
find 查询路径范围 选项 选项值
:可以用于查询隐藏文件、隐藏文件夹
- 选项-name:按文档的名称进行搜索,支持模糊查询
- 选项-type:按照文档类型进程搜索,其中“-”表示文件,“d”表示文件夹
[root@lena ~]# find ~ -name *2.java
/root/linlena/apache-tomcat-7.0.109/webapps/examples/WEBINF/classes/async/Async2.java
/root/linlena/apache-tomcat-7.0.109/webapps/examples/WEBINF/jsp/applet/Clock2.java
/root/linlena/apache-tomcat7.0.109/webapps/examples/jsp/plugin/applet/Clock2.java
[root@lena ~]# find ~/linux -type d
/root/linux
/root/linux/directory
查看文件内容
cat 显示文件所有内容
cat 选项 文件
:读取文件后输出文件全部内容
- 选项-b:列出行号,行号只对非空白行显示,空白行不标
- 选项-n:列出行号,空白行也显示
- 选项-E:将文件中每行的断行字节
$
显示出来 - 选项-T:将文件中tab键以
^I
显示处理 - 选项-v:显示文件中的
^M
(去除^M) - 选项-A:相当于-v+E+T
[root@lena linux]# cat -b file1
1 i am file1
2 hello
[root@lena linux]#
[root@lena linux]# cat -E file1
i am file1$
$
hello$
[root@lena linux]# cat -T file1
i am file1
hello
tac 倒序显示文件
tac 文件
:倒序显示并不是所有内容都倒着显示,而是从最后一行向第一行显示,但每一行内的内容是正序的。
[root@lena linux]# cat file1
i am file1
hello
*$!@%#^$#^#!#!@
[root@lena linux]# tac file1
*$!@%#^$#^#!#!@
hello
i am file1
more 按页查看文件
more 文件
:一页页翻动,可以通过下面的按键操作
-
空白键:下一页
-
Enter:下一行
-
/字符串:向下搜索该字符串
-
q:退出more
-
b:往回翻页
-
:f :显示文件名 和当前所在行数
less 按页查看文件
less 文件
:一页页翻动查看文件
- 空白键/PgDn:下一页
- PgUp:上一页
- 数字+回车:从数字的那一行开始显示
- /字符串:向下搜索该字符串
- ?字符串:向上搜索该字符串
- n:重复上一个搜索
- N:反向重复前一个搜索
- q:退出less
head 显示文件前几行
head [-n 数字] 文件
:显示文件的前几行
[root@lena weblog]# head -n 7 nohup.out
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
tail 显示文件后几行
tail [-n 数字][-f] 文件
:显示文件后几行
若使用选项-f,会继续监控文件,当文件有追加的内容就继续显示出来。
用户管理
用户操作命令,除了设置密码(passwd
)以外,只有超级管理员root有权限。
etc/passwd
:存储用户的关键信息
etc/shadow
:存储用户的密码信息
id 查看用户信息
id
:查看一个用户的一些基本信息(包含用户ID、用户组ID、附加组ID…),该指令如果不指定用户则默认当前用户。
id 用户名
:查看指定用户的基本信息
[root@lena ~]# id
uid=0(root) gid=0(root) groups=0(root)
whoami 显示当前登录的用户名
whoami
:一般用于shell脚本,获取当前操作的用户名来记录日志
[root@lena ~]# whoami
root
useradd 添加用户
useradd 选项 用户名
:添加用户
- 选项-c:添加注释描述
- 选项-d:指定用户主目录,若目录不存在可使用选项-m创建主目录
- 选项-g:指定用户所属的用户组
- 选项-G:指定用户所属的附加组
- 选项-s:指定用户登录shell
- 选项-u:指定用户号,若要重复其他用户的表示号,可使用选项-o。系统默认会从500之后按顺序分配uid。
验证是否添加成功:
-
查看文件
/etc/passwd
最后一行(可以使用命令tail -1 /etc/passwd
或cat /etc/passwd
),查看是否有新添加的用户信息。passwd文件存储的信息格式是:
用户名:密码:用户ID:用户组ID:注释:家目录:解释器Shell
- 密码位一般是"x"占位,若设置了密码则是以加密存储的。
- 若不指定用户组,则会自动创建以当前用户为名的用户组。
- 注释:解释该用户的作用
- 家目录:用户登录系统后默认的位置
- 解释器shell:等用户进入系统,输入指令后,该解释器会收集用户输入的指令,传递给内核处理。
- 查看用户的附加组可以查看group文件。
-
创建用户后会自动创建同名家目录,若没有指定,会在
home
目录下,可以查看是否存在该用户的家目录。
userdel 删除用户
userdel [-r] 用户名
:删除用户账号
选项-r:将用户的主目录随用户一起删除。
已经登录的用户无法删除,只能杀死该用户所有进程后再删除。
- 查看用户进程pid:
ps -ef|grep 用户名
- 杀死进程:
kill pid
- 删除用户:
userdel [-r] 用户名
usermod 修改用户
usermod 选项 用户名
:修改用户的有关属性,如用户号、主目录、用户组、登录Shell等。 常用选项与useradd
一样。
修改用户名:usermod -l 新名字 就名字
passwd 修改用户密码/口令
passwd 选项 用户名
: 用户账号刚创建时没有密码,而Linux不允许没有密码的用户登录到系统,所有没有密码就为锁定状态,无法使用,必须为其指定密码后才可以使用,即使是指定空口令。
- 选项-l:锁定口令,即禁用账号
- 选项-u:口令解锁
- 选项-d:使账号无口令
- 选项-f:强迫用户下次登录时修改口令
su 切换用户
su [用户名]
:切换到指定的用户名
如果不指定用户名,则表示要切换到root用户。
用户组管理
-
每个用户都有一个月用户组,系统可以对一个用户组中的所有用户进行集中管理。
不同Linux系统对用户组的规定有所不同,如Linux下的用户属于它同名的用户组,这个用户组在创建用户时同时创建。
-
用户组的管理涉及用户组的添加、删除和修改。
用户组的添加、删除、修改实际上就是对
/etc/group
文件的更新。
group文件存储信息的格式:
用户组名:密码:用户组ID:组内用户名
- 大部分下不会设置密码,无意义,X表示占位符。
- 若组内用户有多个,则用多个逗号分隔用户名。
groupadd 添加新的用户组
groupadd 选项 用户组
:添加新的用户组
- 选项-g GID:指定GID
- 选项-o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
验证:查看group
文件是否添加成功,命令tail -1 /etc/group
groupdel 删除用户组
groupdel group1
:删除用户组
若要删除的用户组是某个用户的主组,那需要先将组内用户移除,再删除:
- 方法1 修改主组:
usermod -g 新主组 用户名
- 方法2 删除用户:
userdel -r 用户名
groupmod 修改用户组
groupmod 选项 用户组
:更该用户组
选项-g、-o与groupadd
一样。
选项-n 新用户组名:重命名用户组。
newgrp 切换用户的用户组
newgrp 用户组
:如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
前提条件是要切换的用户组确实是该用户的主组或附加组 。
### 时间日期
date 日期时间
-
date
:输出当前年月日 时间[root@lena ~]# date Wed Oct 27 13:12:13 CST 2021
-
date "+%F"
等价于date "+%Y-%m-%d"
,输出格式:2021-10-27 -
date "+%F %T"
等价于date "+%Y-%m-%d $H:%M:%s"
,输出格【】式:2021-10-27 13:02:04 -
date -d "操作符数字 单位" 日期格式
:获取之前或之后某个时间- 操作符可选:
+
(之后)或-
(之前) - 单位值可选:
day
(天)、month
(月)、year
(年) - 例如:
date -d "-1 day" "+%Y-%m-%d $H:%M:%s"
,输出结果是:2021-10-26 13:02:04
- 操作符可选:
cal 日历
-
cal
等价于cal -l
:直接输出当前月份的日历[root@lena ~]# cal -1 October 2021 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # 在Linux中27号(即当天)是会有不同的背景色 31
-
cal -3
:输出上一个月+本月+下一个月的日志[root@lena ~]# cal -3 September 2021 October 2021 November 2021 Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 1 2 1 2 3 4 5 6 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 31
-
cal -y 年份
:输出某一年份的日历 -
cal -s
:默认值,日历的显示以星期日为第一天 -
cal -m
:日历中以星期一为第一天[root@lena ~]# cal -m October 2021 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
ntp服务
主要用于对计算机的时间同步管理。
同步服务器时间的方式:一次性同步(手动同步)、通过服务自动同步
-
一次性同步时间:
ntpdate 时间服务器域名或IP地址
,同步指定ip地址的时间IP地址查看可以访问:http://www.ntp.org.cn/pool
-
设置时间同步服务ntpd
- 启动ntpd服务:
service ntpd start
或/etc/init.d/ntpd start
- 设置ntpd服务开机启动:
chkconfig --level 35 ntpd on
,查看是否设置成功:chkconfig --list|grep ntpd
- 启动ntpd服务:
进程管理
ps 查看服务器进程信息
- 选项-e:等价于
-A
,表示列出全部进程 - 选项-f:显示全部的列(显示全字段)
返回列格式:UID PID PPID C STIME TTY TIME CMD
- UID:用户ID
- PID:进程ID
- PPID:父进程ID。若没有,则为僵尸进程
- C:CPU占用率,单位是
%
- STIME:启动时间
- TTY:终端设备,发起该进程的设备标识符。若显示
?
则表示该进程不是由终端设备发起的。 - TIME:进程的执行时间
- CMD:进程名称或对应路径
[root@lena ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 2 0 0 May27 ? 00:00:00 [kthreadd]
root 3 2 0 May27 ? 00:03:36 [ksoftirqd/0]
root 5 2 0 May27 ? 00:00:00 [kworker/0:0H]
root 7 2 0 May27 ? 00:00:00 [migration/0]
root 8 2 0 May27 ? 00:00:00 [rcu_bh]
......
ps -ef|grep 进程名
:能够根据进程名称模糊查询出进程。
- 至少会查询出一个进程,因为查询指令也是一个进程
- 正常情况下应该返回两个及以上进程
[root@lena ~]# ps -ef|grep java
root 8047 1 0 Sep05 ? 00:49:40 java -jar weblog2104-0.0.1-SNAPSHOT.jar
root 20908 20856 0 14:39 pts/0 00:00:00 grep --color=auto java
root 23632 1 0 Jul02 ? 01:53:15 java -jar api-0.0.1-SNAPSHOT.jar
top 动态显示进程占用资源
top
:输入命令,会进入一个动态的页面。按下q
键退出。
返回列格式:PID USER PR NI VIRT RES SHR S %CPU %MEN TIME+ COMMAND
- PID:进程ID
- USER:该进程用户
- PR:优先级
- VIRT:虚拟内存
- RES:常驻内存
- SHR:共享内存
- S:进程的状态,其中S表示睡眠,R表示运行
- %CPU:CPU占用百分比
- %MEN:内存占用百分比
- TIME+:执行时间
- COMMAND:进程的名称或路径
有些进程启动需要依赖其他进程,计算一个进程实际使用内存=RES-SHR
[root@lena ~]# top
top - 14:33:57 up 152 days, 22:32, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 72 total, 1 running, 71 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1883724 total, 105012 free, 1026880 used, 751832 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 586784 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29574 root 10 -10 131144 15560 9796 S 0.7 0.8 278:02.45 AliYunDun
18827 root 20 0 1080768 45964 14568 S 0.3 2.4 15:51.72 containerd
25824 root 20 0 17876 1864 1332 S 0.3 0.1 6:12.68 assist_daemon
1 root 20 0 125196 3400 2096 S 0.0 0.2 1:15.68 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 3:36.99 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
.......
在运行top时,可以使用方便的快捷键进行查询:
- M:表示将结果按照内存(MEN)从高到低排序
- P:表示将结果按照CPU使用率从高到低排序
- 1(数字):当服务器拥有多个CPU,使用该快捷键来切换是否展示各个CPU的详细信息(默认显示cpus,按下后能切换到cpu0,cpu1…)
service 启动/停止/重启服务
service 服务名 start/stop/restart
:启动/停止/重启服务
例如:service httpd start
启动apache,服务名是http
kill 杀死进程
kill PID
:杀死指定PID的进程。需要提前得知进程的PID(ps -ef|grep 进程
,第二列为PID)
使用场景:遇到僵尸进程或处于某些原因需要关闭进程时。
验证是否杀死进程:ps -ef|grep 服务名
,查看进程是否还存在
killall 杀死进程
kill 进程名称
:通过进程名称直接杀死进程。
服务器相关命令
hostname 主机名
hostname
:输出完整的主机名
hostname -f
:输出当前主机名中的FQDN(全限定域名)
hostname 主机名
:设置临时主机名
永久设置主机名,要在配置文件/etc/sysconfig/network
文件中设置:
HOSTNAME=localhost.localdomain # 默认主机名
ifconfig 获取网卡信息
ifconfig
:获取网卡信息
返回eth0表示Linux中的一个网卡,eth0是名称;
lo(loop)是本地回环网卡,其地址一般是127.0.0.1,也是一个网卡名称。
inet addr是网卡ip地址。
[root@lena ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:7a:30:0b:8a txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.24.8.69 netmask 255.255.192.0 broadcast 172.24.63.255
ether 00:16:3e:36:68:4e txqueuelen 1000 (Ethernet)
RX packets 23729111 bytes 5536748394 (5.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21559102 bytes 10642223762 (9.9 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
uptime 计算机持续在线时间
输出计算机从开机到现在持续在线时间:
[root@lena ~]# uptime
15:09:18 up 152 days, 23:08, 1 user, load average: 0.00, 0.01, 0.05
返回信息:当前时间 up 持续时间, 同时连接用户, load average: 最近1min负载,最近5min负载,最近10min负载
,查看负载也可以使用top
命令。
uname 获取操作系统相关信息
uname
:获取操作系统类型
uname -a
:获取操作系统全部信息(类型、全部主机名、内核版本、发布时间、开源计划)
[root@lena ~]# uname
Linux
[root@lena ~]# uname -a
Linux lena 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
chkconfig 管理开机启动项
chkconfig --list
:开机启动项查询
每一个服务后0-6代表了在运行级别0-6服务对应启动/关闭:
[root@lena ~]# chkconfig --list
aegis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
chkconfig --del 服务名
:删除服务
查询是否删除成功:chkconfig --list|grep 服务名
chkconfig --add 服务名
:添加开机启动服务
chkconfig --level 运行级别 服务名 on/off
:设置服务在某个运行级别下开机启动
运行级别可以一次指定多个,例如chkconfig --level 35 httpd on
网络网关
网卡配置文件
网卡配置文件位置:/etc/sysconfig/network-scripts/
配置文件的命名格式:ifcgf-网卡名称
查看配置文件信息:cat /etc/sysconfig/network-scripts/ifcgf-网卡名称
ONBOOT:是否开机启动(yes/no)
BOOTPROTO:IP地址分配方式,DCHP表示动态主机分配协议
HWADDR:硬件地址,MAC地址
重启网卡
service network restart
:并不是所有地方可用,在centos有的分支版本中可能没有service命令来快速操作服务,但有个公共目录/etc/init.d
,因此可用方法二。/etc/init.d/netword restart
:适用范围广
重启单个网卡
- 停止某个网卡:
ifdown 网卡名称
- 开启某个网卡:
ifup 网卡名称
查看是否成功:ifconfig
netstat 查看网络链接状态
netstat [选项]
- 选项-t:表示只列出tcp协议的连接
- 选项-n:原本显示的是"地址英文名:协议名",添加选项后显示"IP地址:端口号"
- 选项-l:表示过滤出"state状态"列中值为Listen(监听)的链接(该状态才有意义)
- 选项-p:显示进程的PID和进程名称
- 选项-a:表示查看全部
[root@lena ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 23632/java
tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTEN 8047/java
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2563/sshd
tcp6 0 0 :::3306 :::* LISTEN 2645/mysqld
ping
ping 主机地址/域名/主机名
:检测当前主机与目的主机之间的连通性
由于有的服务器是禁ping,因此不是100%准确。
windows默认发送4个数据报,若想一直发送可以在命令尾加上-t
Linux默认一直发送,直到手动停止。
[root@lena ~]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=50 time=15.1 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=50 time=15.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=50 time=15.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=4 ttl=50 time=15.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=5 ttl=50 time=15.1 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=6 ttl=50 time=15.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=7 ttl=50 time=15.2 ms
traceroute
traceroute 主机地址
:查找当前主机与目标主机之间所有的网关。
类似windows的命令tracert 主机地址
原理:会给经过的路由器都发送ICMP数据报,但有可能收不到回应。
注意:该命令不是内置命令,需要安装。
arp 地址解析表
arp -a
:查看本地缓存MAC表
arp -d 主机地址
:删除指定的缓存记录(IP与MAC对应的记录)
tcpdump 抓取数据包
tcpdump 协议 port 端口
:监听端口
tcpdump 协议 port 端口 host 地址
tcpdump -i 网卡设备名
关机重启
shutdown 关机
- 查看该命令的帮助文档:
man shutdown
shutdown may be used to halt, power-off or reboot the machine. The first argument may be a time string (which is usually "now"). Optionally, this may be followed by a wall message to be sent to all logged-in users before going down. The time string may either be in the format "hh:mm" for hour/minutes specifying the time to execute the shutdown at, specified in 24h clock format. Alternatively it may be in the syntax "+m" referring to the specified number of minutes m from now. "now" is an alias for "+0", i.e. for triggering an immediate shutdown. If no time argument is specified, "+1" is implied. Note that to specify a wall message you must specify a time argument, too. If the time argument is used, 5 minutes before the system goes down the /run/nologin file is created to ensure that further logins shall not be allowed.
翻译:
关机可用于停止、关闭电源或重新启动机器。第一个参数可能是时间字符串(通常是“now”)。或者,这个之后可能会有一条墙消息,发送给所有登录的用户,然后再继续向下.
时间字符串的格式可以是“hh:mm”,表示小时/分钟,用于指定时间以24小时时钟格式指定的在执行停机的时间。或者也可以语法为“+m”,表示从现在起指定的分钟m。“now”是“+0”的别名,即用于触发立即停机。如果没有时间参数已指定,“+1”是隐含的。
请注意,要指定墙消息,还必须指定时间参数。
如果使用time参数,则在系统关闭/run/nologin之前5分钟创建文件以确保不允许进一步登录。
- 马上关机:
shutdown -h now
- 十分钟后关机:
shutdown -h 10
- 十分钟后关机并提醒当前登录用户:
shutdown -h 10 'tip : shutdown after 10 min'
- 当天21点关机:
shutdown -h 21:00
- 马上重启:
shutdown -r now
- 十分钟后重启:
shutdown -r +10
- 取消关机:
shutdown -c
halt 关闭内存
halt
命令,关闭内存(因为没有内存无法开机,所以也起到关机作用)
- 停止机器,仍保持通电:
halt
- 关闭机器(关闭电源):
halt -p
- 重启机器:
halt --reboot
reboot 重启
- 重启机器:
reboot
- 停止机器:
rebbot --halt
- 关闭机器:
reboot -p
- 模拟重启:
reboot -w
,只写开机/关机日志,但实际不会重启。
poweroff
- 关闭机器(关闭电源):
powereoff
- 停止机器:
poweroff --halt
- 重启机器:
poweroff --reboot
init 0
init 0
切换运行级别命令
- 运行级别为0,系统处于关机状态。
- 注意:有局限性,在某些版本不可用。
yum
yum [选项] [操作] [安装的包名...]
- 选项-y:表示安装过程中提示全部为yes
- 选项-q:表示不显示安装过程
- 选项-h:获取命令帮助
常用命令:
- 列出所有可更新的软件:
yum check-update
- 更新所有软件:
yum upate
- 仅安装指定的软件:
yum install <软件包名>
- 仅更新指定的软件:
yum update <软件包名>
- 列出所有可安装软件:
yum list
- 删除软件包:
yum remove <软件包名>
- 查找软件包:
yum search <关键词>
- 清除缓存:
- 清除缓存目录下的软件包:
yum clean packages
- 清除缓存目录下的headers:
yum clean headers
- 清除缓存目录下的旧headers:
yum clean oldheaders
- 清除缓存目录下的软件包及旧headers:
yum clean
或yum clean all
,也可分步执行。
- 清除缓存目录下的软件包:
磁盘管理
df 查看磁盘空间
df [选项] [文件/目录]
: 利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
- -a :列出所有的文件
- -k :以 K显示各文件
- -m :以 M显示各文件
- -h :按合适的单位自动显示
- -H :以 M=1000K 取代 M=1024K 的进位方式
- -T :显示文件系统类型, 连同该分区的文件系统名称也列出
- -i :不使用硬盘容量显示,而以 inode 的数量来显示
返回的信息格式为:Filesystem 大小 已使用 未使用 使用百分比 挂载
[root@lena weblog]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 41151808 5036540 34001836 13% /
devtmpfs 931516 0 931516 0% /dev
tmpfs 941860 0 941860 0% /dev/shm
tmpfs 941860 98676 843184 11% /run
tmpfs 941860 0 941860 0% /sys/fs/cgroup
tmpfs 188376 0 188376 0% /run/user/0
[root@lena weblog]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 4.9G 33G 13% /
devtmpfs 910M 0 910M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 97M 824M 11% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
找出你系统中的根目录所在磁盘:df /
du 查看目录真实大小
du [选项] 文件/目录
:查看文件/目录使用情况
- -a :列出所有的文件与目录容量,默认仅统计目录底下的文件量。
- -h :选择合适单位显示大小
- -s :列出总量,而不列出每个各别的目录占用容量
- -S :列出总量,不包括子目录下的
- -k :以K为单位显示
- -m :以M为单位显示
查看指定路径共占用了多少内存:
[root@lena ~]# du -sh ~
979M /root
别名机制
给已有的命令映射一个自定义别名。
别名机制依靠别名映射文件:~/.bashrc
配置步骤:
- 打开文件:
vim ~/.bashrc
- 在文件中添加映射规则,格式:
alias 自定义名='原命令'
。例如:alias cls='clear'
- 保存并推出:
:x
注意:若想新配置的别名生效,必须重新生路当前用户。
vim文本编辑器
打开文件
vim 文件
:通过文本编辑器打开指定文件vim +数字 文件
:打开指定文件,并将光标移动到指定行vim +/关键词 文件
:打开指定文件,并且高亮显示关键词。下一次打开文件的时候若没有规定高亮关键词,则与上一次打开的高亮关键词一致。vim 文件1 文件2 ... 文件n
:用vim同时打开多个文件
打开文件后会显示文件的内容,其中~
的行,表示该行没有任何东西。
三种模式
Vim有三种模式:命令模式、编辑模式(输入模式)、末行模式。
命令模式
该模式下不能对文件直接编辑,可以键盘敲下快捷键来进行一些操作(删除行、复制行、移动光标、粘贴…),是默认模式。
切换到编辑模式:按下i
或a
或o
等
切换到末行模式:输入:
光标移动
-
光标移动到行首:
[shift]+^(6)
-
光标移动到行尾:
[shift]+$(4)
-
光标移动到文档首行:
gg
-
光标移动到文档末行:
G
或[shift]+G
-
向上翻屏:
[ctrl]+b
或PgUp
向下翻屏:
[ctrl]+f
或PgDn
-
快速将光标移动到指定行:
行数G
-
以当前光标所在行为准,向上/向下移动n行:
行数↑/↓
-
以当前光标所在行为准,向左/向右移动n行:
行数←/→
复制操作
- 复制光标所在行:
yy
,在想要粘贴的地方按P
键 - 复制光标所在行及向下n行:
行数yy
。例如2yy表示当前行+向下2行,一共3行。 - 可视化复制(区块复制):
ctrl+v
,按下↑↓←→
选中需要复制的区块,按下yy
进行复制,按下esc
退出,按下P
粘贴。 - 复制光标所在行:
yy
- 将已经复制的内容粘贴在当前光标的下一行:
p
- 将已经复制的内容粘贴在当前光标的上一行:
P
剪切删除
- 剪切/删除光标所在行:
dd
,删除后下一行上移。删除后可以按P键进行粘贴操作。 - 以光标所在行为准,剪切/删除指定行:
行数dd
,删除后下一行上移。 例如:20dd
,则是删除20行。 - 剪切/删除光标所在行,但删除后下一行不上移,当前行为空白:
D
- 向后删除一个字符:
x
或[del]键
- 向前删除一个字符:
X
或[backspace]键
撤销/恢复
- 撤销:输入
u
或U
- 恢复:
ctrl+r
,恢复/取消之前的撤销操作
复原/重做
- 复原前一个动作:
u
- 重做上一个动作:
[Ctrl]+r
- 重复上一个动作:
.
编辑模式
在该模式下可以对文件的内容进行编辑。
进入:按下以下的按键即可从命令模式进入编辑模式
i
:在光标所在字符前开始插入a
:在光标所在字符后开始插入o
:在光标所在行的下面另起一新行插入I
:在光标所在行的行首开始插入,如果行首有空格则在空格之后插入A
:在光标所在行的行尾开始插入O
:在光标所在行上面另起一行开始插入S
:删除光标所在行并开始插入
退出:按[esc]
键
计算器的使用:不需要退出文件,在vim内计算
- 进入编辑模式
- 将光标移动到要输入运算结果的地方,按下
[ctrl]+R
,此时光标会变成’’ - 输入
=
,此时光标变到最后一行 - 输入要计算的运算式,按下
[Enter]
,即有结果返回
末行模式
可以在末行输入命令来对文件进行操作(搜索、替换、保存、退出、撤销、高亮…)
进入:原本是命令模式,按下":"
或"/"
即可进入,其中/
表示查找,有局限性。
退出:输入操作后回车即可生效
-
:w [路径]
:保存文件,若添加了路径则表示另存为指定路径的文件。 -
:q
:退出。前提当前文件没有更改,若更改了没有保存会提示。 -
:q!
:强制退出,不保存。或ZQ
!
在vim中通常有强制的作用 -
:wq
:保存并退出。注意,即使没有修改文件,使用了该命令也会更新文件的修改时间。 -
:x
:在没有修改文件的时候,表示直接退出(不更新修改文件的时间);在修改了文件的情况下,保存并退出。 -
:X
:表示对文件进行加密,下一次进入文件需要输入密码才能查看、操作文件,但如果没有保存文件,该加密配置不生效。 -
:!外部命令
:调用外部命令。一次只能执行一条命令。按Enter或输入其他命令会回到原文件继续操作。 -
按下
esc
或删除末行中全部命令(含:
)
操作:
-
:/关键词
:搜索/查找关键词,高亮显示在搜索结果中切换到上一个/下一个结果,使用N/n
-
:行数
:移动到指定行 -
:行数j
:向下移动指定行数。等同于:行数↓
-
:nohl
:取消高亮显示。no highlight -
:[%]s/搜索的关键词/新内容[/g]
:替换光标所在行的第一个内容,若添加了/g
,则替换光标所在行的所有内容。若加了%
则表示整个文档,而不只是光标所在行。 -
:set nu
:显示行号。仅一次生效,退出后重新进入不再显示。 -
:set nonu
:不显示行号。 -
:syntax on
:显示代码着色 -
:syntax off
:不显示,默认。
使用vim同时打开多个文件,在末行模式下进行文件的切换
-
:files
:查看当前vim已经打开的文件返回的结果第二列显示的含义:
- 空白:不是上一次/当前打开的文件
%a
:active,表示当前正在打开的文件- #:表示上一个打开的文件
-
切换文件的方式:
:open 文件名
:切换到指定文件。前提,该文件已经打开。不能用[tab]补充文件名。:bn
:back next,切换到下一个文件:bp
:back previous,切换到上一个文件
vim配置
vim编辑器的配置有两种方式:优先级2>3
- 在文件打开的时候,在末行模式下输入配置命令。该方式的配置是临时的。
- 修改vim的个人配置文件,位置:
~/.vimrc
。若没有个人配置文件,可以手动创建,命名一样即可。下次使用该用户打开文件就会使用该配置文件的配置。- 新建个人配置文件:
touch .vimrc
- 进入编辑:
vim .vimrc
- 在配置文件中添加配置,例如显示行号:
set nu
- 保存并退出:
x
- 新建个人配置文件:
- 全局配置文件,vim自带:
/etc/vimrc
异常退出
在编辑文件后没有正常保存再推出,而是突然关闭(故障/人为),则会在下一次打开文件的时候显示error
解决:
-
查看
error
中存在的交换文件名。交换文件:编辑产生的临时文件,隐藏文件。
-
删除交换文件:
rm -f 文件