Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个多用户、多任务、支持多线程和多 CPU 的操作系统。
既然Linux也是一个操作系统,那大家肯定会下意识将它和Windows系统做比较,两者当然也是有优有劣。相对于Windows来说,Linux是完全免费的,开放源码,为用户提供了最大限度的自由度。且Linux更加稳定更加安全,所以通常作为服务器的操作系统使用。
Linux是一个诞生于网络、成长于网络且成熟于网络的奇特的操作系统。1991年10月,由芬兰大学生Linus Torvalds带头编写而成,其后一大批知名的、不知名的电脑黑客、编程人员加入到开发过程中来,Linux逐渐成长起来。
Linux的主要特点
内核: kernel
常见的操作系统
Windows
:由微软公司成功开发,是一个多任务的操作系统,它采用图形窗口界面,用户对计算机的各种复杂操作只需要通过点击鼠标就可以实现。UNIX
:是一个强大的多用户、多任务的操作系统,支持多种处理器架构,按照操作系统的分类,属于分时系统。Linux的思想源于Unix。Mac OS
:是一套运行于苹果Macintosh系列电脑上的操作系统。从本质上讲,Mac OS 也是UNIX的一个变体。Android
:是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。iOS
:是苹果公司开发的移动端的操作系统。iOS与苹果的MacOS操作系统一样,属于类Unix的商业操作系统。直接腾讯软件中心下载 https://pc.qq.com/search.html#!keyword=vmware
一直下一步,选一个目录安装即可
官网下载后用这个秘钥
YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8
UG5J2-0ME12-M89WY-NPWXX-WQH88
UA5DR-2ZD4H-089FY-6YQ5T-YPRX6
GA590-86Y05-4806Y-X4PEE-ZV8E0
ZF582-0NW5N-H8D2P-0XZEE-Z22VA
YA18K-0WY8P-H85DY-L4NZG-X7RAD
1
2
3
4
5
6
7
https://developer.aliyun.com/mirror/
第一步:
第二步:
下一步
下一步:
看不懂就下一步:
下一步
下一步
下一步
下一步
设置一个root用户的密码
有人有这个问题
解决方法:
https://jingyan.baidu.com/article/fc07f98976710e12ffe519de.html
找到此选项,改成enable
http://www.hostbuf.com/
看见哪个 点就行了。下一步 next install
链接linux系统
我们需要IP地址和端口链接,本机的IP(127.0.0.1)localhost。
就必须使用虚拟机和主机建立一个局域网,能够互相连接上。
nat,创建局域网
查看网络号和子网掩码
查看ip范围
查看网关号
ip addr 查看IP地址
配置网络
cd /etc/sysconfig/network-scripts/
vi ifcfg-ens33
1
2
点击i,进入编辑模式,左下角出现insert
# 修改以下内容
BOOTPROTO=static
onboot=yes
# 增加以下内容
IPADDR=192.168.2.190
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
1
2
3
4
5
6
7
先按esc
退出编辑模式,再按 shfit+:
进入命令模式,再输入 wq
,点击回车保存并退出。
linux的文件系统是采用级层式的树状目录结构,在此结构中最上层是根目录“/”,然后在此目录下再创建其它的目录。 在linux世界里。一切皆文件
1)linux的目录中有且只有一个根目录/, 2)linux的各个目录存放的内容是规划好的,不用乱放文件, 3)linux是以文件的形式管理我们的设备,因此linux系统。一切皆文件。 4)linux的各个文件目录下存放什么内容,大家必须有一个认识, 5)你的脑海里应该有一颗linux的目录树。
相对路径 : 相对当前的路径 我家隔壁是老王 相对于的是我家
绝对路径 :一个绝对的路径 中国太原市恒大华府1-1-2304家是老王
我们操作通常有2种方式:第一种就是通过桌面图形化操作;另外一种则是通过终端输入命令。
针对服务器而言我们通常是采用远程连接工具连接到服务器,然后以命令
的方式进行管理。我们输入命令后计算机怎么就知道该做什么呢?那就得靠命令行工具(也称终端)进行翻译解释,然后调用相应的接口服务完成特定的功能。
用户与linux系统的交互是通过shell终端
,下文讲先分析shell命令行工具,再讲解最基础的linux命令。
计算机硬件是由运算器、控制器、存储器、输入/输出
设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务。因此,系统内核对计算机的正常运行至关重要,一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要。而shell就是这样一个客户端命令行工具,充当用户与系统内核沟通的桥梁。
file
Shell也称“终端”、“壳”,是一种用c语言写的命令行工具, 充当人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。
以下列举几种shell版本
现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 *Bash*(Bourne-Again SHell)解释器 。 主流 Linux 系统选择 Bash 解释器作为命令行终端主要有以下 4 项优势 :
通过上下方向键来调取过往执行过的 Linux 命令;
命令或参数仅需输入前几位就可以用 Tab 键补全;
具有强大的批处理脚本;
具有实用的环境变量功能。
我们装好的centos7默认也是采用的bash终端,当采用远程连接工具连接到centos7,默认开启的终端就是bash,可以通过在终端中输入命令:echo $SHELL 进行查看,得到的结果为:/bin/bash。
通过"echo $SHELL" 命令或通过"evn"终端命令
通过终端命令chsh,如:chsh -s /bin/bash将登录终端改为bash
shell是一个程序,用于用户和操作系统进行交互,相当于是一个命令解析器。
作为用户和内核交互的接口,既是一种命令语言又是一种程序设计语言。shell命令又分为内置命令和外部命令。
内置命令
内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常*在linux系统加载运行时shell就被加载并驻留在系统内存中*。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等 。
外部命令
外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存*。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的*。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin…等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等
如何区分是内部命令还是外部命令?
内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
既然 Linux 系统中已经有了 Bash 这么好用的“翻译官”,那么接下来就有必要好好学习怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根 据实际情况来灵活调整各种命令的参数 。
linux执行命令一般格式:*命令名称 [命令参数] [命令对象]*
命令名称、命令参数、命令对象之间用空格键分隔。命令对象一般是指要处理的文件、目录、用户等资源 ,命令参数则可以用长格式(–)或短格式(-)。
长格式:man --help
短格式:man -h
linux命令很多,最重要的是各种参数的搭配使用,新手记住所有参数是不可能的,需要经常通过帮助命令进行查阅。
特别说明:在终端中,有时候显示的内容很多,可以通过快捷键进行翻看。
shift+PgUp:向上翻页
shift+PgDn:向下翻页
帮助命令主要有2个:man、help。平时要多于帮助命令,遇到不清楚的命令就用帮助命令查看,无须死记硬背,熟能生巧。
语法:man [命令或配置文件]
作用:获取帮助信息
案例:
[root@heimatengyun ~]# man date
1
比如欲查看date命令的用法,输入命令man date之后出现下图信息
file
由于帮助信息比较多,需要翻页才能看完,因此先说明一下本界面可能需要用到按键及用途。
按键 用途 空格键 向下翻页 PgDn (page down) 向下翻页 PgUp (page up) 向上翻页 home 前往首页 end 前往页尾 / 从上至下搜索关键字,如“/linux” ? 从下至上搜索关键字,如“?linux” n 定位到下一个搜索到的关键词 N 定位到上一个搜索到的关键词 q 退出帮助文档
初学者一看,这么多的帮助信息反而感到困惑了,其实很简单的,我们来理一下帮助信息的结构(上图中圈红线的部分)。
结构名称 | 说明 |
---|---|
NAME | 命令的名称 |
SYNOPSIS | 命令的基本语法格式 |
DESCRIPTION | 详细说明语法格式对应的选项和参数的用法 |
EXAMPLES | 如何使用命令的示例 |
OVERVIEW | 概述 |
DEFAULTS | 默认功能 |
OPTIONS | 具体的可用选项 |
ENVIRONMENT | 环境变量 |
SEE ALSO | 相关的资料,通常是手册页 |
通过这些帮助信息,就可以轻松的掌握各个命令的用法。
语法:help 命令
作用:获取shell内置命令的帮助信息
案例:
[root@heimatengyun ~]# help cd
1
在正式进入命令学习之前,再介绍几个*linux常用的快捷键*
快捷键 | 作用 |
---|---|
ctrl+l | 清屏 |
ctrl+q | 退出 |
ctrl+c | 停止进程 |
上下键 | 查找曾今执行过的命令 |
tab | 命令补全,多用不仅提高效率还能防止敲错 |
既然linux一切皆文件,了解万能的帮助命令后,我们就从目录文件命令开始学习。
目录可以对文件进行分类管理,因此在讲解文件命令之前先讲解目录相关命令。
语法:pwd
功能描述:显示当前工作目录的绝对路径
案例:
[root@heimatengyun ~]# pwd
/root
1
2
语法:ls [选项] [目录或文件]
功能描述:列出目录下的文件
选项:
-a(–all):显示全部文件,包括隐藏文件(以.开头的文件)
-d:directory,列出目录本身
1
-l:long长数据串列出,包含文件的属性和权限等。每行列出的信息依次为:*文件类型与权限、链接数、文件属性、文件属组、文件大小(byte)、创建或最近修改时间、名字*
案例:
[root@heimatengyun test]# ls -al
total 12
drwxr-xr-x. 2 root root 37 Nov 24 10:43 .
dr-xr-x---. 16 root root 4096 Nov 24 00:02 ..
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
1
2
3
4
5
6
语法:cd [选项][目录名称]
功能描述:切换到指定目录
案例:
cd 绝对路径或相对路径 (跳转到指定目录)
cd 或cd ~ (返回当前用户家目录)
cd - (返回上一次所在的目录)
cd … (返回当前目录的上一级目录)
…/ 上一级目录
语法:mkdir [选项] 目录名称
功能描述:创建指定目录
选项:
-p :parents,创建多层目录
案例:
[root@heimatengyun ~]# mkdir test
[root@heimatengyun ~]# mkdir -p test1/test1
1
2
语法: rmdir [选项] 目录名称
功能描述:删除空目录
选项:
-p:删除多级目录
案例:
[root@heimatengyun ~]# rmdir test
[root@heimatengyun ~]# rmdir -p test1/test1/ (如果不指定-p参数,则只删除最后一级不为空的目录)
1
2
语法:cp 源目录或文件 目标目录或文件
功能描述:复制目录或文件
选项:
-r:recursive,递归复制整个文件夹
案例:
将test复制为test.txt,复制时重命名
[root@heimatengyun ~]# cp test test.txt
1
将所有test目录内容复制到test1目录(自动创建test1目录)
[root@heimatengyun ~]# cp -r test test1
1
语法:mv [选项] 源 目标
功能描述:移动文件或重命名文件
案例:
将test文件重命名为test.txt
[root@heimatengyun test]# mv test test.txt
1
将test目录及其里边所有内容移动到test2目录,自动创建test2目录(可以理解为将test文件夹重命名为test2)
[root@heimatengyun ~]# mv test/ test2
1
语法:rm [选项] 文件
功能描述:删除文件及目录
选项:
-f:force强制执行
-r:recursive递归执行
案例:
递归删除目录及其下所有内容
[root@heimatengyun ~]# rm -rf test2/
1
通配符
rm -f *
linux一切皆文件,在连接目录相关命令后,本节学习文件相关命令。
语法:touch [选项] 文件名
功能描述:touch
案例:
[root@heimatengyun test]# touch test.txt
1
echo
语法:echo 字符串或变量
功能描述:输出字符串或变量值,还可以搭配从定向符将内容存储到文件
案例:
[root@heimatengyun test]# echo hello
hello
[root@heimatengyun test]# echo $SHELL
/bin/bash
[root@heimatengyun test]# echo linux >> test.txt
1
2
3
4
5
语法:cat [选项] 文件名
功能描述:查看文件内容,从第一行开始显示
选项:
-A:列出特殊字符而非空白
-b:列出行号,空白行不算行号
-n:列出行号,空白行也会有行号
-v:列出一些看不出来的特殊字符
案例:
[root@heimatengyun test]# cat test.txt
hello
who are you
where are you from
[root@heimatengyun test]# cat -A test.txt
hello$
who are you$
$
where are you from$
[root@heimatengyun test]# cat -b test.txt
1 hello
2 who are you
3 where are you from
[root@heimatengyun test]# cat -n test.txt
1 hello
2 who are you
3
4 where are you from
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
语法:more [选项] 文件
功能描述:查看文件内容,一页一页的显示
使用说明:
空格键(space):向下翻一页
enter:向下翻一行
q:退出more,不在显示文件内容
ctrl+f:向下滚动一屏
ctrl+b:返回上一屏
=:输出当前行的行号
:f:输出文件名和当前行号
语法:head [选项] 文件
功能描述:查看文件内容,只看头几行
选项:
-n:查看头n行
案例:
[root@heimatengyun test]# head -n 2 test.txt
语法:tail [选项] 文件
功能描述:查看文件内容,只查看文件末尾几行
选项:
-n:末尾几行
-f:follow输出文件修改的内容,用于追踪文件修改
案例:
[root@heimatengyun test]# tail -n 2 test.txt
语法:wc [选项] 文本
功能描述:统计指定文本的行数、字数、字节数
选项:
-l:lines显示行数
-w:显示单词数
-c:显示字节数
案例:
[root@heimatengyun test]# cat test.txt
hello
who are you
where are you form?
wellcome
hahah
test
[root@heimatengyun test]# wc -l test.txt
8 test.txt
[root@heimatengyun test]# wc -c test.txt
60 test.txt
[root@heimatengyun test]# wc -w test.txt
11 test.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
语法:stat [选项] 文件
功能描述:查看文件的具体存储信息和时间等信息
案例:
[root@heimatengyun test]# stat test.txt
File: ‘test.txt’
Size: 60 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 2160373 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-11-23 18:27:02.153101936 +0800
Modify: 2019-11-23 18:26:56.254259870 +0800
Change: 2019-11-23 18:26:56.254259870 +0800
Birth: -
1
2
3
4
5
6
7
8
9
10
语法:file 文件名
功能描述:查看文件类型
案例:
[root@heimatengyun test]# file test.txt
test.txt: ASCII text
1
2
语法:wget [参数] [url地址]
功能:下载网络文件
参数:
-b:background后台下载
-P:directory-prefix下载到指定目录
-t:tries 最大尝试次数
-c:continue断点续传clear
-p:page-requisites下载页面所有内容,包括图片、视频等
-r:recursive递归下载
案例:
下载百度logo图片
[root@heimatengyun test]# wget https://www.baidu.com/img/bd_logo1.png
--2019-11-23 22:29:45-- https://www.baidu.com/img/bd_logo1.png
Resolving www.baidu.com (www.baidu.com)... 14.215.177.38, 14.215.177.39
Connecting to www.baidu.com (www.baidu.com)|14.215.177.38|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7877 (7.7K) [image/png]
Saving to: ‘bd_logo1.png’
100%[======================>] 7,877 --.-K/s in 0.002s
2019-11-23 22:29:45 (4.43 MB/s) - ‘bd_logo1.png’ saved [7877/7877]
1
2
3
4
5
6
7
8
9
10
11
有时候需要从大量文件中找出需要的文件或者从指定文件中查找特定内容,这就需要用到查找相关的命令。
语法:find [搜索范围] [匹配条件]
功能描述:查找文件或目录
参数说明
-name:按文件名称查找
-user:按文件拥有者查找
-size:根按文件大小查找文件(+n大于,-n小于,n等于)
案例
在test目录下查找test1.txt文件
[root@heimatengyun ~]# find test/ -name test1.txt
test/test1.txt
1
2
查找test目录下查找用户root的文件
[root@heimatengyun ~]# find test/ -user root
test/
test/test.txt
1
2
3
在test目录下查找小于100M的文件
[root@heimatengyun ~]# find test/ -size -102400
test/
test/test.txt
1
2
3
语法:grep [参数] 查找内容 源文件
功能描述:在文件内搜索字符串匹配的行并输出
参数:
-c:count只输出匹配行的计数
-n:line-number
案例:
[root@heimatengyun test]# grep -n who test.txt
3:who are you
[root@heimatengyun test]# grep -c who test.txt
1
1
2
3
4
语法:which [选项] 命令
功能描述:搜索命令所在目录及别名信息
案例:
搜索cd命令所在的目录
[root@heimatengyun test]# which cd
/usr/bin/cd
1
2
为了便于传输或节省存储空间有时候文件是以压缩包的形式存在,因此就需要了解压缩与解压相关命令。
语法:tar [参数] 包名.tar.gz 待打包的内容
功能描述:打包目录,压缩后的文件格式为.tar.gz
参数:
-c:create生成.tar打包文件
-x:extract解包.tar文件
-v:verbose显示详细信息
-f:file指定压缩后的文件名
-z:打包同时压缩
-C:解压到指定目录
案例:
压缩多个文件,将test.txt和test1.txt压缩为test.tar.gz
tar -czvf 名字 文件名 打包并压缩
tar -zvxf 文件名 加压缩并接打包
tar -cvf 名字 文件名 打包
1
2
3
[root@heimatengyun test]# tar -zcvf test.tar.gz test.txt test1.txt
test.txt
test1.txt
[root@heimatengyun test]# ll
total 10252
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 210 Nov 23 23:57 test.tar.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
1
2
3
4
5
6
7
8
压缩目录
[root@heimatengyun ~]# tar -zcvf test.tar.gz test/
1
解压到当前目录
[root@heimatengyun test]# tar -zxvf test.tar.gz
1
语法:
压缩:zip [参数] 包名.zip 待压缩内容
解压:uzip 包名.zip
功能描述:压缩文件和目录,windows和linux通用且可以压缩目录并保留源文件
参数:
-r:recurse-paths递归压缩目录
案例:
压缩test.txt或test1.txt为test.zip
[root@heimatengyun test]# zip test.zip test.txt test1.txt
adding: test.txt (deflated 15%)
adding: test1.txt (stored 0%)
1
2
3
解压test.zip
[root@heimatengyun test]# unzip test.zip
Archive: test.zip
inflating: test.txt
extracting: test1.txt
1
2
3
4
语法:
压缩:gzip [参数] 文件
解压:gzip [参数] 文件.gz
功能描述:
压缩:压缩文件,只能将文件压缩为*.gz文件。*只能压缩文件不能压缩目录,压缩解压后不保留原来的文件。对单个文件压缩*
解压:解压文件
案例:
压缩文件
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
[root@heimatengyun test]# gzip test1.txt
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 54 Nov 23 20:40 test1.txt.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
1
2
3
4
5
6
7
8
9
解压文件
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 54 Nov 23 20:40 test1.txt.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
[root@heimatengyun test]# gunzip test1.txt.gz
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
1
2
3
4
5
6
7
8
9
日期相关命令用于设置或获取系统日期。
语法:date [选项] [格式]
功能描述:显示或设置时间
参数:
-s:set 以字符串格式设置时间
格式:*(注意区分大小写)*
+%Y:显示当前年份
+%m:显示当前月份
+%d:显示当前是哪一天
+%H:显示当前小时
+%M:显示当前分钟
+%S:显示当前秒数
+%Y%m%d:显示当前年月日
“+%Y-%m-%d %H:%M:%S”:显示当前年月日时分秒 (用引号括起来)
案例:
设置时间
[root@heimatengyun test]# date -s "2019-11-24 11:05:10"
Sun Nov 24 11:05:10 CST 2019
1
2
显示时间
[root@heimatengyun test]# date
Sun Nov 24 11:02:21 CST 2019
[root@heimatengyun test]# date +%Y%m%d
20191124
[root@heimatengyun test]# date "+%Y-%m-%d %H:%M:%S"
2019-11-24 11:02:55
1
2
3
4
5
6
date查看非当前时间(比如前一天,后一天、取下周周一等等)以及cal查看日历命令暂时不做讨论,以后有机会在讨论。
任务都以进程或线程的形式存在,因此需要随时关注系统的进程,查看是否有异常进程以及各进程占用系统资源的情况并使用不同的进程管理命令对进程管理和控制。
语法:ps [选项]
功能描述:查看系统中所有进程
参数:
-a:all 显示现行终端机下的所有程序,包括其他用户的程序(比如多克隆几个会话执行不同命令,也会列出来)
-u:userlist 以用户为主的格式来显示程序状况
-x: 显示所有程序,不以终端机来区分 (前面讲过终端有很多类型,不仅显示当前终端)
案例:
[root@heimatengyun test]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2966 0.0 0.1 116340 3192 pts/0 Ss Nov22 0:03 -bash
...省略部分内容
1
2
3
4
每一项内容的解释
项 | 含义 |
---|---|
USER | 进程是由哪个用户产生的 |
PID | 进程ID |
%CPU | 该进程占用CPU的百分比,占用越高,进程越耗费资源 |
%MEM | 该进程占用内存的百分比,占用越高,进程越耗费资源 |
VSZ | 占用虚拟内存的大小,单位KB |
RSS | 占用实际物理内存的大小,单位KB |
TTY | 表示该进程在哪个终端中运行,tty1-tty7代表本地控制台终端(tty1-tty6是本地的字符界面终端,tty7是图形终端),pts/0-255代表虚拟终端 |
STAT | 进程状态,常用状态有:R(运行)、S(睡眠)、T(停止状态)、s(包含子进程)、+(位于后台) |
START | 进程启动时间 |
TIME | 进程执行时间,即占用cpu的运算时间,不是系统时间 |
COMMAND | 产生此进程的命令名 |
ps -aux | grep xxx
语法:top [选项]
功能描述:查看系统健康状态
参数:
-d 秒数:Delay-time,指定top命令每隔几秒更新,默认是3秒。
-i:Idle-process,使top命令不显示任何闲置或者僵死进程
-p:Monitor-PIDs ,通过指定监控进程ID来仅仅监控某个进程的状态
-s:Secure-mode,使top在安全模式运行,去除交互命令所带来的潜在危险
案例:
查看非僵死进程,一秒钟刷新一次
[root@heimatengyun test]# top -i -d 1
top - 12:39:19 up 1 day, 14:31, 3 users, load average: 0.04, 0.04, 0.05
Tasks: 395 total, 1 running, 391 sleeping, 3 stopped, 0 zombie
%Cpu(s): 0.0 us, 1.0 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 1870784 total, 720520 used, 1150264 free, 880 buffers
KiB Swap: 2097148 total, 0 used, 2097148 free. 238616 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29987 root 20 0 123936 1868 1160 R 2.0 0.1 0:08.32 top
...省略部分内容
1
2
3
4
5
6
7
8
9
10
在此界面可以通过如下相应按键进行排序操作
操作键 | 说明 |
---|---|
shift+n | 以PID排序 |
shift+m | 以内存排序 |
shift+p | 以cpu使用率排序,默认选项 |
q | 退出top |
命令结果解释
第一行:任务队列信息
内容 | 说明 |
---|---|
12:20:42 | 当前系统时间 |
up 1 day, 14:12 | 系统运行时间 |
3 users | 当前登录用户数 |
load average: 0.08,0.01, 0.05 | 系统在之前1分钟、5分钟、15分钟的平均负载,一般认为小于1时,负载较小,如果大于1说明系统已经超出负载 |
第二行:进程信息
内容 | 说明 |
---|---|
Tasks: 395 total | 系统中的总进程数 |
1 running | 正在运行的进程数 |
391 sleeping | 睡眠的进程 |
3 stopped | 正在停止的进程 |
0 zombie | 僵尸进程,如果不是0,需要手工检查僵尸进程 |
第三行:cpu信息
内容 | 说明 |
---|---|
%Cpu(s): 0.0 us | 用户模式占用的cpu百分比 |
1.0 sy | 系统模式占用的cpu百分比 |
0.0 ni | 改变过优先级的用户进程占用的cpu百分比 |
99.0 id | 空闲cpu的百分比 |
0.0 wa | 等待输入、输出的进程占用cpu的百分比 |
0.0 hi | 硬中断请求服务占用的cpu百分比 |
0.0 si | 软中断请求服务占用的cpu百分比 |
0.0 st | steal time虚拟世界百分比,当有虚拟机时,虚拟cpu等待时机cpu的时间百分比 |
ps:如果服务器有多个cpu,将显示多行
第四行:物理内存信息
内容 | 说明 |
---|---|
KiB Mem: 1870784 total | 物理内存的总量,单位KB |
720520 used | 已使用的物理内存数量 |
1150264 free | 空闲的物理内存数量 |
880 buffers | 作为缓冲的内存数量 |
第五行:交换分区信息
内存 | 说明 |
---|---|
KiB Swap: 2097148 total | 交换分区(虚拟内存)的总大小 |
0 used | 已经使用的交换分区的大小 |
2097148 free | 空闲交换分区的大小 |
238616 cached Mem | 作为缓存的交换分区的大小 |
第六行:空行
第七行:表头信息
内容 | 说明 |
---|---|
PID | 进程id |
USER | 进程所有者 |
PR | 进程优先级 |
NI | 负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 进程名称(命令名/命令行) |
语法:pidof [参数] 服务名称
功能描述:查询某个指定服务进程的pid值
案例:
查看sshd服务的进程id
[root@heimatengyun test]# pidof sshd
2962 2247
1
2
语法:pstree [选项]
功能描述:查看进程树
选项:
-p:显示进程的PID
案例:
[root@heimatengyun test]# pstree -p
systemd(1)─┬─ModemManager(948)─┬─{ModemManager}(1004)
│ └─{ModemManager}(1031)
├─NetworkManager(1123)─┬─{NetworkManager}(1284)
│ └─{NetworkManager}(1312)
...省略部分内容
1
2
3
4
5
6
语法:kill [选项] 进程id
功能描述:终止某个指定pid的服务进程
选项:
-9:强迫进程立即停止
案例:
[root@heimatengyun test]# kill -9 20385
1
语法:killall [选项] 服务名
功能描述:终止某个指定名称的服务对应的所有进程
案例:
终止httpd服务的所有进程
[root@heimatengyun test]# killall httpd
1
通过相关命令检查系统状态以及资源耗用情况,保证系统健康稳定运行。
语法:ifconfig [网络设备] [参数]
功能描述:获取网卡配置和网络状态信息
案例:
[root@heimatengyun test]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.78.100 netmask 255.255.255.0 broadcast 192.168.78.255
inet6 fe80::20c:29ff:febc:5eef prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bc:5e:ef txqueuelen 1000 (Ethernet)
RX packets 143336 bytes 103106029 (98.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 92576 bytes 143399144 (136.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1
2
3
4
5
6
7
8
9
主要查看内容:网卡名称(eno16777736 )、ip地址(inet之后)物理网卡地址即mac地址(ether)、TX和TX接收和发送数据包的个数和累计流量
语法:netstat [参数]
功能描述:显示整个系统目前网络情况,比如目前的链接、数据包传递数据、路由表内容等
案例:
[root@heimatengyun test]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 96 192.168.78.100:ssh 192.168.78.1:59688 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 13149 /run/systemd/shutdownd
...省略部分内容
1
2
3
4
5
6
7
8
语法:uname [选项]
功能描述:查看系统内核和系统版本等信息
参数:
-a:all显示系统完整信息
-s:kernel-name系统内核名称
-n:nodename节点名称
-r:kernel-release内核发行版
-v:kernel-version内核版本
-m:machine硬件名称
-i:hardware-platform硬件平台
-p:processor处理器类型
-o:operating-system操作系统名称
案例:
[root@heimatengyun test]# uname
Linux
[root@heimatengyun test]# uname -a
Linux heimatengyun 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
1
2
3
4
显示信息依次为:内核名称(Linux)、主机名(heimatengyun)、内核发行版(3.10.0-123.el7.x86_64)、内核版本(#1 SMP Mon Jun 30 12:09:22 UTC 2014)、硬件名称(x86_64)、硬件平台(x86_64)、处理器类型(x86_64)及操作系统名称(GNU/Linux)。
如果要查看单签系统版本的详细信息,通过查看/etc/redhat-release文件
[root@heimatengyun test]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
1
2
语法:uptime [选项]
功能描述:查看系统的负载信息,可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指系统在最近1分钟、5分钟、15分钟内的压力情况,负载值越低越好,尽量不要长期超过1,生产环境不要超过5.
案例:
[root@heimatengyun test]# uptime
21:30:44 up 1 day, 23:23, 3 users, load average: 0.00, 0.01, 0.05
1
2
语法:free [选项]
功能描述:显示当前系统中内存的使用信息
选项:
-m:megabytes以兆字节显示
-h:human带单位输出
案例:
[root@heimatengyun test]# free -h
total used free shared buffers cached
Mem: 1.8G 702M 1.1G 8.9M 880K 233M
-/+ buffers/cache: 468M 1.3G
Swap: 2.0G 0B 2.0G
1
2
3
4
5
字段说明:total(内存总量)、used(已用量)、free(可用量)、shared(进程共享的内存量)、buffers(磁盘缓存的内存量)、cached(缓存的内存量)
语法:who [参数]
功能描述:查看当前登入主机的用户终端信息
案例:
[root@heimatengyun test]# who
root pts/0 2019-11-22 22:10 (192.168.78.1)
root pts/1 2019-11-23 11:53 (192.168.78.1)
1
2
3
语法:last [参数]
功能描述:查看所有的系统登录记录。但是要注意,这些信息是以日志文件保存的,因此黑客可以很容易进行修改,所以不能单纯以该命令来判断是否有黑客入侵。
案例:
[root@heimatengyun test]# last
root pts/2 192.168.78.1 Sun Nov 24 13:09 - 13:36 (00:26)
root pts/1 192.168.78.1 Sat Nov 23 11:53 still logged in
... 省略部分内容
1
2
3
4
语法:history [参数]
功能描述:显示历史执行过的命令
选项:
-c:清除所有历史记录,但是.bash_history文件内容不会删除
案例:
[root@heimatengyun test]# history
1 history
2 ll
3 ls
4 history
[root@heimatengyun test]# !2
ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
1
2
3
4
5
6
7
8
9
10
可以用“!编号”执行某一次曾经执行过的命令
默认可以查看1000条历史记录,但可以在/etc/profile中修改HISTSIZE的值
历史命令保存在一个农户家目录的.bash_history文件中(.开头为隐藏文件通过ls或ll -a列出),可以用cat命令查看
linux一般用在服务器上,很少遇到关机的情况,毕竟关机服务就会中断,除非特殊情况不得已才会关闭。
正确的关机流程:sync>shutdown或reboot或halt
*无论重启还是关机,都需要先sync将内存数据同步到硬盘中,避免数据丢失*
语法:reboot [ 选项]
功能描述:重启系统,等同于shutdown -r now
案例:
[root@heimatengyun ~]# reboot
1
语法:poweroff [选项]
功能描述:关闭系统
案例:
[root@heimatengyun ~]# poweroff
1
语法:halt [选项]
功能描述:关闭系统,等同于shutdown -h now和poweroff
案例:
[root@heimatengyun ~]# halt
1
语法:shutdown [选项] [关机时间] [提示内容]
功能描述:关机
选项:
-h:关机
-r:重启
关机时间:
hh:mm:指定24小时制的小时和分钟后关机
+m:m分钟后关机(+1:默认值,1分钟后关机; +0:now,立刻关机)
案例:
1分钟后关机并提示所有已登录系统的用户
[root@heimatengyun ~]# shutdown -h 1 "this server will shutdown after 1min"
this server will shutdown after 1min
The system is going down for power-off at Sun 2019-11-24 22:25:55 CST!
1
2
3
用户及文件相关权限命令将在以后的文章中讲解,还有很多其他的命令,由于篇幅所限不在此讨论。下一篇文章文章将分享“linux入门系列6–软件包管理之rpm和yum仓库”。
Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。 Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。 Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。 Linux上通常使用chmod命令对文件的权限进行设置和更改。
1、添加用户,Centos 没有任何交互动作!创建用户完毕后,必须修改密码否则无法登陆
# useradd zn #创建用户
# passwd zn #修改密码
1
2
切换命令
su - zn
1
建工作组
groupadd test
1
新建用户同时增加工作组
useradd -g test phpq //新建phpq用户并增加到test工作组
1
注::-g 所属组 -d 家目录 -s 所用的SHELL
给已有的用户增加工作组
usermod命令
Linux usermod命令用于修改用户帐号。
usermod可用来修改用户帐号的各项设定。
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s ][-u ][用户帐号]
1
参数说明:
https://www.jianshu.com/p/5c393e414736
更改登录目录
# usermod -d /home/hnlinux root
1
改变用户的uid
# usermod -u 777 root
1
userdel testuser
groupdel testgroup
usermod –G testgroup testuser //(强制删除该用户的主目录和主目录下的所有文件和子目录)
1
2
3
id user
cat /etc/passwd
1
2
Linux文件一共有三种身份:
对于每个身份,又有四种权限:
通过ls -al 文件名 指令来查询文件的属性
ls -al /Users/xyz/Desktop/crm副本.zip
-rw-r--r-- 1 xyz staff 746807 Jul 25 09:56 /Users/xyz/Desktop/crm副本.zip
1
2
以上7项依次表示【文件的属性-rw-r–r–】、【连接数1】、【文件的拥有者xyz】、【文件所属的群组staff】、【文件大小】、【文件创建时间】和【文件名称】
在Linux系统中,文件的属性由10个字符来表示。 第一个字符表示文件的类型open in new window,其余9个字符分为三组,每组三个,分别表示文件的拥有者、群组以及其他人对该文件的访问权限。
每组依次表示读取、写入、和执行的权限,如果没有该权限,则以**-**显示。
对于 -rw-r--r--
分别为:
文件类型 | 文件拥有者的权限 | 群组的权限 | 其他人的权限 |
---|---|---|---|
- | rw- | r– | r– |
文件类型:
- 一般文件
d 文件夹(或者叫目录)
l 符号链接文件(类似windows下的快捷方式一样的东西)
b 磁盘设备文件
c 字符设备文件((和磁盘设备文件,主要是和周边硬件连接,作为系统和硬件之间的接口))
s Socket文件((内部进程通信的一种特殊文件,也可作为和远程主机通信的管道))
p 连接文件(是一种内部进程通信的机制,一个进程把数据写入Pipe中,另一个进程则由Pipe读取数据,数据采用先进先出(FIFO)的次序,称为管道)
1
2
3
4
5
6
7
给三种身份都赋予执行的权限
chmod +x 文件名
1
等价于
chmod a+x 文件名
1
也拆开写,a表示all所有人分别用u、g、o替换
对应: 去掉某个身份的某个权限,只需要将+变为-即可。比如
chmod u-r 文件名
1
读取权限:r 或者4 写入权限:w或者2 执行权限:x或者1 可读写可执行:rwx = 4 + 2 + 1 = 7 可读写不可执行:rw- = 4 + 2 = 6 可读不可写可执行:r-x = 4 +1 = 5
常见权限形式
范例:
#设置所有人可以读写及执行
chmod 777 file (等价于 chmod u=rwx,g=rwx,o=rwx file 或 chmod a=rwx file)
#设置拥有者可读写,其他人不可读写执行
chmod 600 file (等价于 chmod u=rw,g=---,o=--- file )
1
2
3
4
5
除了切换用户
比如在zn用户下新增用户不被允许:
[zn@localhost root]$ useradd zn3
bash: /usr/sbin/useradd: 权限不够
1
2
使用sudo命令
[zn@localhost root]$ sudo useradd zn3
[sudo] zn 的密码:
zn 不在 sudoers 文件中。此事将被报告。
[zn@localhost root]$ [zn@localhost root]$ useradd zn3
bash: [zn@localhost: 未找到命令
您在 /var/spool/mail/root 中有新邮件
[zn@localhost root]$ bash: /usr/sbin/useradd: 权限不够
bash: bash:: 未找到命令
1
2
3
4
5
6
7
8
需要修稿sudoers
sudo 命令的配置文件为 /etc/sudoers。(注意,/etc/sudoers 的配置内容十分丰富,我们仅做简单的介绍。要了解更多信息,请参考 man sudoers。) 编辑这个文件是有单独的命令的 visudo(这个文件我们最好不要使用 vim 命令来打开),是因为一旦你的语法写错会造成严重的后果,这个工具会替你检查你写的语法,这个文件的语法遵循以下格式: who where whom command 说白了就是哪个用户在哪个主机以谁的身份执行那些命令,那么这个 where, 是指允许在那台主机 ssh 连接进来才能执行后面的命令,文件里面默认给 root 用户定义了一条规则:
root ALL=(ALL:ALL) ALL
1
root 表示 root 用户。 ALL 表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24。 (ALL:ALL) 是以谁的身份来执行,ALL:ALL 就代表 root 可以任何人的身份来执行命令。 ALL 表示任何命令。 那么整条规则就是 root 用户可以在任何主机以任何人的身份来执行所有的命令。
sudo 组中的所有用户都具有通过 root 权限执行命令的能力!
再看个例子:
nick 192.168.10.0/24=(root) /usr/sbin/useradd
1
上面的配置只允许 nick 在 192.168.10.0/24 网段上连接主机并且以 root 权限执行 useradd 命令。
设置 sudo 时不需要输入密码
执行 sudo 命令时总是需要输入密码事件很不爽的事情(抛开安全性)。有些应用场景也需要在执行 sudo 时避开输入密码的交互过程。 那么需要如何设置呢?其实很简单,只需要在配置行中添加 NOPASSWD: 就可以了:
zn ALL=(ALL) NOPASSWD: ALL
1
再试试看,是不是已经不需要输入密码了?
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
1
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo
1
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo
1
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
1
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
1
CentOS 8
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
1
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
1
非阿里云ECS用户会出现 Couldn’t resolve host ‘mirrors.cloud.aliyuncs.com’ 信息,不影响使用。用户也可自行修改相关配置: eg:
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentO
1
安装一个vim试试
yum install vim -y
1
登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择对应jdk版本下载。(可在Windows下下载完成后,通过文件夹共享到Linux上)
文件包中有。
cd /usr
mkdir java
1
2
cp /mnt/hgfs/linux/jdk-8u60-linux-x64.tar.gz /usr/java/
1
tar -zxvf jdk-8u60-linux-x64.tar.gz
得到文件夹 jdk1.8.0_60
1
2
可有可无,就是创建一个快捷键
(我没用这一步)
ln -s /usr/java/jdk1.8.0_60/ /usr/jdk
1
2
vim /etc/profile
JAVA_HOME=/usr/jdk
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
1
2
3
4
5
source /etc/profile
1
java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)
-7.repo
1
CentOS 8
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
1
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
1
非阿里云ECS用户会出现 Couldn’t resolve host ‘mirrors.cloud.aliyuncs.com’ 信息,不影响使用。用户也可自行修改相关配置: eg:
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentO
1
安装一个vim试试
yum install vim -y
1
登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择对应jdk版本下载。(可在Windows下下载完成后,通过文件夹共享到Linux上)
文件包中有。
cd /usr
mkdir java
1
2
cp /mnt/hgfs/linux/jdk-8u60-linux-x64.tar.gz /usr/java/
1
tar -zxvf jdk-8u60-linux-x64.tar.gz
得到文件夹 jdk1.8.0_60
1
2
可有可无,就是创建一个快捷键
(我没用这一步)
ln -s /usr/java/jdk1.8.0_60/ /usr/jdk
1
2
vim /etc/profile
JAVA_HOME=/usr/jdk
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
1
2
3
4
5
source /etc/profile
1
java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)