【Linux】Linux 常用命令
Linux 和 Unix
Unix于1969年由贝尔实验室开发出来,使用至今已变更了很多个版本。目前主流的Unix系统有三种,分别是AIX、HP-UX、Solaris,这些Unix系统互不兼容。
Linux于1991年由芬兰大学生Linus开发出来,是一个类Unix系统,但是其代码不源自任何Unix版本,完全不是Unix的一个分支,而是一个开源版的模仿。
安装Linux虚拟机教程:https://blog.csdn.net/qq_41571900/article/details/84728480; https://mp.weixin.qq.com/s/onVwwEQ1DAwbvK7qS2YNxg
Linux 目录结构
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录**“ / ”**,然后在此目录下再创建其他的目录。在Linux世界里,一切皆文件。
- /bin (/usr/bin、/usr/local/bin):是Binary的缩写,这个目录存放着最经常使用的命令
- /sbin (/usr/sbin、/usr/local/sbin):Super User Binary的缩写,这里存放的是系统管理员使用的系统管理程序
- /home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
- /root:系统管理员目录,也称作超级权限者的用户主目录
- /lib:系统开机所需要最基本的动态连接共享库 .so,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
- /etc:所有的系统管理所需要的配置文件和子目录 my.conf
- /usr:Unix System Resource的缩写,存放Unix系统的资源。这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
- /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
- /srv:service缩写,该目录存放一些服务启动之后需要提取的数据
- /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统
- /tmp:这个目录是用来存放一些临时文件的
- /dev:类似于windows的设备管理器,把所有的硬件用文件的形式存储
- /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。比如共享文件夹
D:/myshare
- /opt:这是存放应用程序压缩包的目录。如安装ORACLE数据库的压缩包就可放到该目录下。默认为空。
- /usr/local:主要存放那些手动安装的软件的目录。一般是通过编译源码或解压压缩包的方式安装的程序。例如安装JDK环境。
- /var:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的文件和目录放在这个目录下。包括各种日志文件。
- /selinux [security-enhanced linux]:SELinux是一种安全子系统,它能控制程序只能访问特定文件。
硬链接和软链接
https://www.huaweicloud.com/articles/e2aa9d7612d1446629d95ced9b16a1d5.html
- 硬链接:新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用
- 软链接:也称为符号链接,新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷方式十分相似,新建的软链接可以指向不存在的文件
硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识);而软链接不共享 inode,也可以说是个特殊的 inode,所以和原来的 inode 有区别。若原文件删除了,则该软连接则不可以访问,而硬连接则是可以的。由于符号链接的特性,导致其可以跨越磁盘分区,但硬链接不具备这个特性。
创建硬链接:
1 | [root@localhost root] touch f1 #创建一个测试文件f1 |
创建软链接
1 | [root@localhost root] ln -s f1 f3 #创建f1的一个符号连接文件f3 |
用户管理
增加用户
1 | [root@localhost root] useradd -g 用户组名 用户名 |
查看用户信息
1 | [root@localhost root] id 用户名 |
增加组
1 | [root@localhost root] groupadd 用户组名 |
修改用户密码
1 | [root@localhost root] passwd 用户名 |
/etc/passwd:用户(user)的配置文件,记录用户的各种信息。每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/group:组(group)的配置文件,记录Linux包含的组的信息。每行含义:组名:口令:组标识号:组内用户列表
/etc/shadow:口令的配置文件。每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
组管理
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。
修改文件所有者(chown:change owner)
1 | [root@localhost root] chown [-R] 用户名 文件名/文件目录名 |
修改文件所在组(chgrp:change group)
1 | [root@localhost root] chgrp [-R] 组名 文件名/文件目录名 |
改变用户所在组(usermod:user modify)
1 | [root@localhost root] usermod –g 组名 用户名 |
参数选项
- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
权限
https://www.runoob.com/linux/linux-file-attr-permission.html
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
1 | [root@localhost root] ls -l |
实例中,bin 文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为 d 则是目录
- 当为 - 则是文件;
- 若是 l 则表示为链接文档(link file);
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图):
从左至右用 0-9 这些数字来表示。
第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中,第 1、4、7位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;第2、5、8位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第3、6、9位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
rwx作用到文件
- [ r ] 代表可读(read): 可以读取,查看
- [ w ] 代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
- [ x ] 代表可执行(execute):可以被执行
rwx作用到目录
- [ r ] 代表可读(read): 可以读取,ls查看目录内容
- [ w ] 代表可写(write): 可以修改,目录内创建+删除+重命名目录
- [ x ] 代表可执行(execute):可以进入该目录
rwx作用到文件和目录上的区别:
- 对[ r ]来说,二者都是读取内容;
- 对[ w ]来说,若文件没有该权限,则无法修改和删除该文件;若目录没有该权限,则无法在该目录内创建和删除文件,也无法重命名;
- 对[ x ]来说,若文件没有该权限,则无法被执行;若目录没有该权限,则无法进入该目录
权限相关指令
修改权限:
u: 所有者 g: 所有组 o: 其他人 a: 所有人(u、g、o的总和)
1 | [root@localhost root] chmod [-R] u=rwx,g=rx,0=x 文件目录名 # 给文件目录 |
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改
Linux 系统运行级别
- 0 :关机
- 1 :单用户模式,不需要输入密码【可用于找回丢失密码】
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务
- 4:系统未使用,保留给用户
- 5:图形界面
- 6:系统重启
常用运行级别是3和5 ,要修改默认的运行级别可改文件
切换到指定的运行级别命令:
1 | [root@localhost root] init [0~6] |
使用案例:找回丢失的root密码?
思路:进入到单用户模式,修改root密码。因为进入单用户模式,root不需要密码就可以登录
常用命令
man:获得帮助信息
1 | [root@localhost root] man [命令或配置文件] |
help:获得帮助信息
1 | [root@localhost root] help [命令] |
文件目录类
mkdir:创建目录
1 | [root@localhost root] mkdir [选项] 要创建的目录 |
常用选项:-p
创建多级目录
rmdir:删除空目录(只能删除空目录,如果目录下有内容时无法删除)
1 | [root@localhost root] rmdir [选项] 要删除的空目录 |
如果需要删除非空目录,需要使用rm -rf
rm:移除文件或目录
1 | [root@localhost root] rm [选项] 要删除的文件或目录 |
常用选项:
-r
:递归删除整个文件夹-f
:强制删除不提示
mv:移动文件与目录或重命名
1 | [root@localhost root] mv oldNameFile newNameFile (功能描述:重命名) |
touch:创建空文件
1 | [root@localhost root] touch hello.java |
cp:拷贝文件到指定目录
1 | [root@localhost root] cp [选项] /home/aaa.txt /home/dest/ |
常用选项:-r
递归复制整个文件夹
文件阅读类
cat:查看文件内容(concatenate)。cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令 | more
1 | [root@localhost root] cat [选项] 要查看的文件 |
常用选项:-n
显示行号
more:是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键
1 | [root@localhost root] more 要查看的文件 |
操作 | 功能说明 |
---|---|
空白键(space) | 代表向下翻一页; |
Enter | 代表向下翻一行; |
/hello | 查找文本中hello 字段,按N查找下一个 |
q | 代表立刻离开more ,不再显示该文件内容。 |
Ctrl+F | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
less:用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
1 | [root@localhost root] less 要查看的文件 |
操作 | 功能说明 |
---|---|
空白键(space) | 向下翻一页; |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页; |
q | 代表立刻离开more ,不再显示该文件内容。 |
/字串 | 向下搜寻『字串』的功能;n:向下查找;N:向上查找;下滚动一屏 |
?字串 | 向上搜寻『字串』的功能;n:向上查找;N:向下查找; |
对比:
more
– 传统且基础的分页阅读工具,仅支持向下翻页和有限次数的向上翻页。less
– 比more
功能丰富,支持向下翻页和向上翻页,也支持文本搜索。在打开大文件的时候,比vi
这类文本编辑器启动得更快。most
– 在上述两个工具功能的基础上,还加入了同时打开多个文件、同时锁定或滚动多个屏幕、分屏等等大量功能
head:显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
1 | [root@localhost root] head -n 5 文件(功能描述:查看文件头5行内容,5可以是任意行数) |
tail:输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容。
1 | [root@localhost root] tail 文件(功能描述:查看文件后10行内容) |
主要区别:
- cat命令可以一次显示整个文件,如果文件比较大,使用不是很方便;
- more命令可以让屏幕在显示满一屏幕时暂停,按空格往前翻页,按b往后翻页。
- less命令也可以分页显示文件,和more命令的区别就在于:
- 支持上下键卷动屏幕、查找。
- 不需要在一开始就读取整个文件,打开大文件时比more、vim更快。
- head命令用于查看文件的前n行。
- tail命令用于查看文件的后n行。加上-f命令,查看在线日志非常方便,可以打印最新增加的日志。
>
指令和 >>
指令
>
:输出重定向(覆盖写)>>
:追加(不覆盖)
1 | [root@localhost root] ls -l > 文件(功能描述:列表的内容写入文件a.txt中(覆盖写)) |
history:查看已经执行过历史命令,也可以执行历史指令
搜索查找类
find:
从根目录开始搜索文件/目录
1 | [root@localhost root] find / -name file1 |
搜索用户user1的文件/目录
1 | [root@localhost root] find / -user user1 |
locate:
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
1 | [root@localhost root] locate <关键词> |
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
grep:Global regular expression print。用于查找文件里符合条件的字符串。
全局正则表达搜索:
1 | [root@localhost root] grep xxx hello.txt # 在⽂件hello.txt中查找关键词 xxx |
gzip/gunzip:
1 | [root@localhost root] gzip 文件 # 压缩文件,只能将文件压缩为*.gz文件 |
zip/unzip:
1 | [root@localhost root] zip xxx.zip file # 压缩⾄zip包 |
tar:
tar 指令是打包指令,最后打包后的文件是.tar.gz 的文件。
选项 | 功能 |
---|---|
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar文件 |
1 | [root@localhost root] tar -cvf xxx.tar file1 file2 dir1 # 将多个⽂件+⽬录打tar包 |
网络通讯类
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
telnet:
1 | [root@localhost root] telnet IP 端口 |
dhclient:为本机分配一个网络内可用的IP地址
1 | [root@localhost root] dhclient |
编辑虚拟机系统网卡配置:
1 | [root@localhost root] vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
修改配置如下:
1 | TYPE=Ethernet |
编辑完成,重启网络设置即可
1 | [root@localhost root] systemctl restart network.service |
实用指令
which:在环境变量 $PATH
设置的目录里查找符合条件的文件。
查看 Java 的安装路径
1 | [root@localhost root] which java |
nohup: no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
语法格式:
1 | nohup Command [ Arg … ] [ & ] |
- Command:要执行的命令。
- Arg:一些参数,可以指定输出文件。
- &:让命令在后台执行,终端退出后命令仍旧执行。
示例:
1 | [root@localhost root] nohup java -jar xxx.java & |
& 最经常被用到,其用在一个命令的最后,可以把这个命令放到后台执行,不挂起
jobs:查看有哪些任务正在后台运行
jobs 详解:https://www.cnblogs.com/mfryf/archive/2012/05/09/2491322.html
1 | [root@localhost root] jobs -l # 显示当前系统的任务列表 |
上面的命令执行后,将显示出当前系统下的任务列表信息,具体如下所示:
1 | [1] + 1903 运行中 nohup java -jar xxx.java & |
sz:把日志文件下载到本地
rename 命令:
1 | # Perl语言版本格式 |
free 命令:查看系统可用内存大小:
1 | [root@localhost root] free -m |
定时任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序。任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
指令:
1 | [root@localhost root] crontab [选项] |
参数选项 | 功能 |
---|---|
-e | 编辑crontab定时任务 |
-l | 列出当前有哪些crontab任务调度 |
-r | 终止任务调度,删除当前用户所有的crontab任务 |
使用 crontab -e 进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。
crontab 的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有
- ***** 取值范围内的所有数字
- / 每过多少个数字
- - 从X到Z
- **,**散列数字
时间说明:
1 | # .---------------- minute (0 - 59) |
- minute:代表一小时内的第几分,范围 0-59。
- hour:代表一天中的第几小时,范围 0-23。
- mday:代表一个月中的第几天,范围 1-31。
- month:代表一年中第几个月,范围 1-12。
- wday:代表星期几,范围 0-7 (0及7都是星期天)。
- who:要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。
- command:所要执行的指令
更多使用案例见:https://www.runoob.com/w3cnote/linux-crontab-tasks.html
重启任务调度
1 | [root@localhost root] service crond restart |
案例
案例一
使用 crontab -e
的方式直接编辑命令:
- 设置任务调度文件:
/etc/crontab
- 设置个人任务调度。执行
crontab –e
命令。 - 接着输入任务到调度文件如:
*/1 * * * * ls –l /etc/ > /tmp/to.txt
,意思说每小时的每分钟执行ls –l /etc/ > /tmp/to.txt
命令 crontab -r
终止任务
案例二
如果指令比较复杂,可以将其先写入到一个 .sh 文件中,然后再在 crontab -e
中执行该脚本文件
- 编写脚本文件:
/home/mytask.sh
,在其内写上要执行的命令 - 给
mytask.sh
赋予可执行的权限 - 执行
crontab -e
命令 - 在其中输入
*/1 * * * * /home/mytask.sh
即可 crontab -r
终止任务
分区
补充:Linux兄弟连
Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
查看所有设备挂载情况:
1 | [root@localhost root] lsblk |
挂载:将一个分区与一个目录联系起来(mount 设备名称 挂载目录
)
1 | [root@localhost root] mount /dev/sdb1 /newdisk |
用命令行挂载重启后会失效。永久挂载:通过修改/etc/fstab
实现挂载。添加完成后执行mount –a
即刻生效。
查询系统整体磁盘使用情况:
1 | [root@localhost root] df -h |
查询指定目录的磁盘占用情况,默认为当前目录:
1 | [root@localhost root] du -h /目录 |
参数:
- -s指定目录占用大小汇总
- -h 带计量单位
- -a 含文件
- –max-depth=1 子目录深度
- -c 列出明细的同时,增加汇总值
进程
在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器。
每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。
进程历史
补充兄弟连
历史上,Linux 的启动一直采用init
进程。CentOS 6.0中使用下面的命令用来启动服务。
1
2
3 $ sudo /etc/init.d/apache2 start
# 或者
$ service apache2 start
这种方法有两个缺点:
- 一是启动时间长。
init
进程是串行启动,只有前一个进程启动完,才会启动下一个进程。 - 二是启动脚本复杂。
init
进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
Systemd 概述
Systemd
就是为了解决这些问题而诞生的。它的设计目标是为系统的启动和管理提供一套完整的解决方案。根据 Linux 惯例,字母d
是守护进程(daemon)的缩写。 Systemd
这个名字的含义,就是它要守护整个系统。
使用了 Systemd
,就不需要再用init
了。Systemd
取代了initd
,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程
1 $ systemctl --version
上面的命令查看 Systemd
的版本。
Systemd
的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。Systemd
并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
systemctl
是 Systemd 的主命令,用于管理系统。
1 | # 重启系统 |
systemctl
命令是Linux系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。ctl
代表Control
systemctl — Control the systemd system and service manager
查看进程
ps
(process status)命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数。
- 查看某种服务的进程(例如查看java相关服务的进程):
1 | [root@localhost root] ps –aux | grep xxx |
参数说明:
-a
显示所有用户的进程(show processes for all users)-u
显示用户(display the process’s user/owner)-x
显示无控制终端的进程(also show processes not attached to a terminal)
- 以全格式显示当前所有的进程:
1 | [root@localhost root] ps -ef |
参数说明:
-e
显示所有进程-f
全格式
1 | [root@localhost root] ps -ef | grep xxx |
- 以树状结构展示进程
1 | [root@localhost root] pstree |
- 终止进程(强迫进程立即停止):
1 | [root@localhost root] kill -9 进程号 |
详解:
ps -aux
是以BSD方式显示
a 显示所有用户的进程(show processes for all users) u 显示用户(display the process’s user/owner) x 显示无控制终端的进程(also show processes not attached to a terminal)
ps -ef
是以System V方式显示,该种方式比BSD方式显示的多
e 显示所有用户的进程(all processes)此参数的效果和指定"a"参数相同 f 用ASCII字符显示树状结构,表达程序间的相互关系(ASCII art forest)
下面看两个命令各自显示哪些内容:
1 | $ ps -aux |
其中显示了:
1、USER 哪个用户启动了这个命令 2、PID 进程ID 3、CPU CPU占用率 4、MEM 内存使用量 5、VSZ 如果一个程序完全驻留在内存的话需要占用多少内存空间 6、RSS 当前实际占用了多少内存 7、TTY: 终端的次要装置号码 (minor device number of tty) 8、STAT 进程当前的状态(“S”:中断 sleeping,进程处在睡眠状态,表明这些进程在等待某些事件发生–可能是用户输入或者系统资源的可用性;“D”:不可中断 uninterruptible sleep;“R”:运行 runnable;“T”:停止 traced or stopped;“Z”:僵死 a defunct zombie process) 9、START 启动命令的时间点 10、TIME 进程执行起到现在总的CPU暂用时间 11、COMMAND 启动这个进程的命令
1 | $ ps -ef |
其中显示了:
1、UID 用户号 2、PID 进程ID 3、PPID 父进程号 4、C CPU占用率 5、TTY 终端的次要装置号码 (minor device number of tty) 6、TIME 进程执行起到现在总的CPU暂用时间 7、COMMAND 启动这个进程的命令
一般使用这两个命令的作用是查看预期的进程是否启动,或者杀死指定的进程,例如查看memcached进程是否正常启动:
1 | $ ps -ef | grep 'memcached' |
通过grep命令可以查找指定的进程名称,上面例子查找发现正常运行了,但如果我要关闭这个进程,可以通过杀死PID来完成,例如memcached的PID是27799,那么执行下面kill命令即可:
1 | $ kill 27799 |
再次查找进程已经消失。
服务管理
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程。
CentOS 6.0:
1 | [root@localhost root] service 服务名 [start | stop | restart | reload | status] |
CentOS 7.0 后不再使用service
,而是systemctl
:
1 | [root@localhost root] systemctl [start | stop | restart | reload | status] 服务名 |
例如修改网络设置后,重启网络设置:
1 | [root@localhost root] systemctl restart network.service |
查看服务名:查看 /etc/init.d/服务名称
- 当使用指令关闭或者启用防火墙后,将立即生效。[
telnet
测试某个端口即可] - 但这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
- 如果希望设置某个服务自启动或关闭永久生效,要使用
chkconfig
指令
防火墙管理
查看防火墙状态:
1 | [root@localhost root] systemctl status firewalld |
关闭防火墙:
1 | [root@localhost root] systemctl stop firewalld |
查看防火墙开放的端口号:
1 | [root@localhost root] firewall-cmd --list-all |
开放防火墙的某些端口号:
1 | [root@localhost root] firewall-cmd --add-service=http –permanent |
重启防火墙:
1 | [root@localhost root] firewall-cmd –reload |
服务的运行级别(runlevel)
查看或者修改默认级别:vi /etc/inittab
Linux系统有7种运行级别(runlevel):常用的是级别3和5
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS),不支持网络
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
chkconfig指令
通过chkconfig
命令可以给每个服务的各个运行级别设置开机自启动/关闭。chkconfig
重新设置服务后自启动或关闭,需要重启机器reboot才能生效。
查看服务:
1 | [root@localhost root] chkconfig --list | grep xxx |
动态监控进程
top
与ps
命令很相似。它们都用来显示正在执行的进程。top
与ps
最大的不同之处,在于top
在执行一段时间可以更新正在运行的的进程。
1 | [root@localhost root] top [选项] |
选项 | 功能 |
---|---|
-d 秒数 | 指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令 |
-i | 使top不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
交互操作说明:
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以PID排序 |
q | 退出top |
应用案例:
案例1. 监视特定用户:
- 输入top命令,按回车键,查看执行的进程。
- u:然后输入“u”回车,再输入用户名,即可
案例2:终止指定的进程。
- 输入top命令,按回车键,查看执行的进程。
- k:然后输入“k”回车,再输入要结束的进程ID号
监控网络状态
查看系统网络情况netstat
:
1 | [root@localhost root] netstat [选项] |
选项说明:
- -a 显示所有连接信息(包括LISTEN),包括常用于服务器的一些端口监听连接
- -n 不显示别名信息,用数字代替,可以加快命令的执行速度
- -p protocol,显示指定网络协议的连接,全部协议在
/etc/protocols
里 - -v 显示更多信息,可以显示对应连接的PID
- -r 显示网络路由表信息
- -L 显示出监听队列的信息
举例:查看监听状态的端口:
1 | netstat -an | grep LISTEN |
RPM包管理
RPM:一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。Linux的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标准。
一个rpm包名:firefox-45.0.1-1.el6.centos.x86_64.rpm
- 名称:firefox
- 版本号:45.0.1-1
- 适用操作系统: el6.centos.x86_64
- 表示centos6.x的64位系统
- 如果是i686、i386表示32位系统,noarch表示通用
查询安装的所有rpm软件包
1 | [root@localhost root] rpm –qa | grep xx |
查询软件包是否安装
1 | [root@localhost root] rpm -q 软件包名 |
查询软件包信息
1 | [root@localhost root] rpm -qi 软件包名 |
查询软件包中的文件
1 | [root@localhost root] rpm -ql 软件包名 |
查询文件所属的软件包
1 | [root@localhost root] rpm -qf 文件全路径名 |
卸载rpm包
1 | [root@localhost root] rpm -e 包的名称 |
安装rpm包
1 | [root@localhost root] rpm -ivh 包全路径名称 |
参数说明
- i=install 安装
- v=verbose 提示
- h=hash 进度条
YUM包管理
YUM(Yellowdog Updater, Modified)是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
查询yum服务器是否有需要安装的软件
1 | [root@localhost root] yum list | grep xx软件列表 |
安装指定的yum包
1 | [root@localhost root] yum install xxx |
vi 和 vim
Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。
Vim的第一个版本由布莱姆·米勒在1991年发布。最初的简称是Vi IMitation,随着功能的不断增加,正式名称改成了Vi IMproved。现在是在开放源代码方式下发行的自由软件。
vi和vim它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。
vim的这些优势主要体现在以下几个方面:
- 多级撤消:我们知道在vi里,按u只能撤消上次命令,而在vim里可以无限制的撤消。
- 易用性:vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台。
- 语法加亮:vim可以用不同的颜色来加亮你的代码。
- 可视化操作:vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
- 对vi的完全兼容:某些情况下,可以把vim当成vi来使用。
- vi和vim都是Linux中的编辑器,不同的是vim比较高级,可以视为vi的升级版本。vi使用于文本编辑,但是vim更适用于coding。
vi有3个模式:
- 插入模式:在此模式下可以输入字符,按ESC将回到命令模式。
- 命令模式:可以移动光标、删除字符等。
- 低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。
SHELL 编程
常用的脚本
依次遍历当前目录下的所有子目录,将其中的文件拷贝到当前目录下:
1 | for dir in `ls .` |