CentOS7学习笔记
一个想当厨子的码农 Lv2

一、安装CentOS

二、基本系统设置

一二详细步骤参考我的另一篇文章:

区块链环境配置教程 | CodeCook (dettry.github.io)

三、远程SSH登录

3.1 使用账号密码登录

3.2 设置SSH通过密钥登录

我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。

密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。

下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。

3.2.1 制作密钥对

首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:

[root@host ~]$ ssh-keygen <== 建立密钥对

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter

Created directory ‘/root/.ssh’.

Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空

Enter same passphrase again: <== 再输入一遍密钥锁码

Your identification has been saved in /root/.ssh/id_rsa. <== 私钥

Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥

The key fingerprint is:

0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。

现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。

3.2.2 在服务器上安装公钥

键入以下命令,在服务器上安装公钥:

[root@host ~]$ cd .ssh

[root@host .ssh]$ cat id_rsa.pub >> authorized_keys

如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:

[root@host .ssh]$ chmod 600 authorized_keys

[root@host .ssh]$ chmod 700 ~/.ssh

3.2.3 设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件,进行如下设置:

RSAAuthentication yes

PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no

最后,重启 SSH 服务:

[root@host .ssh]$ service sshd restart

3.2.4 将私钥下载到客户端,然后转换为PuTTY能使用的格式

使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。

载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。

今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。

3.3 配置防火墙

centos7 Firewall防火墙开启80端口

centos7 默认是FirewallD 提供支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具,利用FirewallD开启80端口操作如下:

开启80端口

$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent

出现success表明添加成功

命令含义:

–zone #作用域

–add-port=80/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

重启防火墙

systemctl restart firewalld.service

1、运行、停止、禁用firewalld

启动:# systemctl start firewalld

查看状态:# systemctl status firewalld 或者 firewall-cmd –state

停止:# systemctl disable firewalld

禁用:# systemctl stop firewalld

2、配置firewalld

查看版本:$ firewall-cmd –version

查看帮助:$ firewall-cmd –help

查看设置:

显示状态:$ firewall-cmd –state

查看区域信息: $ firewall-cmd –get-active-zones

查看指定接口所属区域:$ firewall-cmd –get-zone-of-interface=eth0

拒绝所有包:# firewall-cmd –panic-on

取消拒绝状态:# firewall-cmd –panic-off

查看是否拒绝:$ firewall-cmd –query-panic

更新防火墙规则:# firewall-cmd –reload

firewall-cmd –complete-reload

两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务

将接口添加到区域,默认接口都在public

firewall-cmd –zone=public –add-interface=eth0

永久生效再加上 –permanent 然后reload防火墙

设置默认接口区域

firewall-cmd –set-default-zone=public

立即生效无需重启

打开端口(貌似这个才最常用)

查看所有打开的端口:

firewall-cmd –zone=dmz –list-ports

加入一个端口到区域:

firewall-cmd –zone=dmz –add-port=8080/tcp

若要永久生效方法同上

打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹,这个不详细说了,详情参考文档

firewall-cmd –zone=work –add-service=smtp

移除服务

firewall-cmd –zone=work –remove-service=smtp

原文链接:http://www.zhaokeli.com/article/6321.html

附:systemctl命令如下 
systemctl is-enabled iptables.service 
systemctl is-enabled servicename.service #查询服务是否开机启动 
systemctl enable *.service #开机运行服务 
systemctl disable *.service #取消开机运行 
systemctl start *.service #启动服务 
systemctl stop *.service #停止服务 
systemctl restart *.service #重启服务 
systemctl reload *.service #重新加载服务配置文件 
systemctl status *.service #查询服务运行状态 
systemctl –failed #显示启动失败的服务

注:*代表某个服务的名字,如http的服务名为httpd

CentOS6防火墙开启80,3306端口

$ sudo vi /etc/sysconfig/iptables

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙)

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙)

特别提示:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,正确的应该是添加到默认的22端口这条规则的下面

添加好之后防火墙规则如下所示:

代码如下:

Firewall configuration written by system-config-firewall

Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT

-A INPUT -j REJECT –reject-with icmp-host-prohibited

-A FORWARD -j REJECT –reject-with icmp-host-prohibited

COMMIT

最后重启防火墙使配置生效

$ sudo /etc/init.d/iptables restart

附录:Linux常用命令

1、用户和组

一、LINUX(UBUNTU/CENTOS)用户添加删除修改

linux 创建用户

1、建用户:

adduser web //新建web用户

useradd web -m #添加web 用户

passwd web //给web用户设置密码

useradd web -g admin -n -m //新建web用户并指定用户组为 admin用户组,并自动建立登录目录

passwd web //给web 用户设置密码

useradd(选项)(参数)

-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;

-d<登入目录>:指定用户登入时的启始目录;

-D:变更预设值;

-e<有效期限>:指定帐号的有效期限;

-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;

-g<群组>:指定用户所属的群组;

-G<群组>:指定用户所属的附加群组;

-m:自动建立用户的登入目录;

-M:不要自动建立用户的登入目录;

-n:取消建立以用户名称为名的群组;

-r:建立系统帐号;

-s:指定用户登入后所使用的shell;

-u:指定用户id。

2、给已有的用户增加工作组

usermod -G admin web #给web用户设置admin附属用户组

#给用户设置添加多个用户组

usermod -g web -G admin,www web #给web用户设置主用户组web组,admin,www附属用户组

gpasswd -a web admin #给web用户设置admin用户组

3、新建用户同时增加工作组

useradd -g admin web //新建web用户并增加到admin工作组

注::-g 所属组 -d 家目录 -s 所用的SHELL

4、临时关闭

方法一

/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上*就可以了。想恢复该用户,去掉*即可。

方法二

使用命令关闭用户账号:

passwd web –l

重新释放:

passwd web –u

5、永久性删除用户账号

userdel web

groupdel web

usermod –G web web (强制删除该用户的主目录和主目录下的所有文件和子目录)

7、从组中删除用户

编辑/etc/group 找到用户组admin那一行,删除用户名web

或者用命令

gpasswd -d A web

8、显示用户信息

id user

cat /etc/passwd

二、用户组 LINUX(UBUNTU/CENTOS) 添加删除修改

1、建工作组

groupadd admin //新建admin工作组

2、修改用户组

groupmod -n newadmin admin #修改admin用户组名称改为newadmin

3、删除用户组

groupdel admin #删除admin用户组

4.查看用户的用户组信息

groups web

2、目录和文件cd,ls,ll,rmdir,mkdir,pwd

\1)        pwd命令

用途:查看工作目录(PrintWorking Directory)

例:

[root@web03 home]# pwd

/home

pwd命令一般单独使用,无需特别注意命令格式;

\2)        cd命令

用途:切换工作目录(Change Directory)

格式:cd  [目录位置]

例:

         [root@localhost~]# cd /etc/httpd

[root@localhost httpd]# cd conf

[root@localhost conf]# cd ~benet

      目录位置(包括文件位置)可以使用绝对路径,也可以使用相对路径

绝对路径:以“/”开始的路径,表示从Linux目录结构的最顶点算起

相对路径:不“/”开始的路径,可以相对于当前目录、父目录、其他用户的目录等作为起始点,使用形式如下:

直接使用文件名/目录名;

以“.”或 “…” 开始的路径;

以“~用户名”的形式开始的路径

  例:

       cd:切换目录,Change Directory

cd :不带任何参数表示切换回当前用户的家目录

cd /path/to/dir :切换到指定目录

cd - :表示在上一个目录和这个目录来回切换,类似于电视遥控器上的返回之前

cd ~ :切换回当前的家目录。

cd ~student :表示切换到别人的家目录

cd … :可以切换到当前目录的父目录

cd …/… :可以切换到当前目录父目录的父目录

cd命令指定短横线“-”作为参数时,表示切换到前一次(执行cd命令前)所在的工作目录

\3)        ls命令

用途:用于显示某一个文件的属性,或者某一个目录旗下子目录的属性。

格式:ls  [选项]…  [目录或文件名]

常用命令选项

-l :以长格式显示

-a:显示所有子目录和文件的信息,包括隐藏文件

-d:显示目录本身的属性

-A:类似于“-a”,但不显示“.”和“…”目录的信息

-h:以更易读的字节单位(K、M等)显示信息

Human readable

-R:递归显示内容

–color:以颜色区分不同类型文件

例:

ls /etc/inittab 直接显示这个文件

ls /:直接显示根下的文件和子目录

ls /etc 显示文件夹含有的目录

-l :显示目录/文件内详细信息。比如 ls-l /etc 则显示etc目录的详细信息

ls -l后:这里面显示的是元数据信息,他们本身不属于文件内容的部分,但是却跟文件本身息息相关,称之为属性信息,我们都将他称之为元数据信息。

-h : 将文件信息中的大小变成人类易读的

-a : 显示所有文件,包括隐藏文件

-d : 显示的是目录自身的属性,而不是目录中文件或者子目录的属性

-r : 显示目录,将以逆序的方式进行排序。从Z-A

-R : 递归现实,显示目录下的每一个文件和子目录,如果目录还有子目录,则继续显示子目录下的文件和子目录,直到显示完全。

Linux的文件类型:

a)        普通文件:开头用“-”表示的

b)        目录文件:开头用“d”表示的

c)        符号链接文件(软连接文件):开头用“l”表示

d)        设备文件:

             i.             块设备,用 b 表示。按照随机存取。通常一次存取一个块。(硬盘)

             ii.             字符设备,用 c 表示,通常按照线性(有顺序)的方式进行存储,一次存取的一个单位是字节。比如键盘,鼠标显示器等。字符存储是串行的。

e)        套接字文件:开头用“s”  表示 sock

f)         命令管道文件:开头用“p”表示

\4)        mkdir命令

用途:创建新的目录(Make Directory)

格式:mkdir   [-p]  [/路径/]目录名

例:

         [root@localhost~]# mkdir -p mydir/level1/level2

mkdir命令用于创建新的空目录,可以同时创建多个目录

较常用到的选项为“-p”,该命令用于创建嵌套的多层目录结构

若不使用“-p”选项,则只能在已经存在的目录中创建其他子目录

\5)        du命令

用途:统计目录及文件的空间占用情况(estimate file space usage)

格式:du  [选项]…  [目录或文件名]

常用命令选项

-a:统计时包括所有的文件,而不仅仅只统计目录

-h:以更易读的字节单位(K、M等)显示信息

-s:

例:

      [root@localhost~]# du -sh /etc/httpd/

du命令的“-s”、“-h”选项通常结合在一起使用,以统计指定文件夹总占用空间的大小

2、文本编辑vi

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

1、什么是 vim?

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。vim 键盘图:

2、vi/vim 的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)。 这三种模式的作用分别是:

命令模式:

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式:

在命令模式下按下i就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式:

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式。

简单的说,我们可以将这三个模式想成底下的图标来表示:

3、vi/vim 使用实例

使用 vi/vim 进入一般模式

如果你想要使用 vi 来建立一个名为 test.txt 的文件时,你可以这样做:

$ vi runoob.txt

直接输入 vi 文件名 就能够进入 vi 的一般模式了。请注意,记得 vi 后面一定要加文件名,不管该文件存在与否!

按下 i 进入输入模式(也称为编辑模式),开始编辑文字

在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!

在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。

这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑。

按下 ESC 按钮回到一般模式

好了,假设我已经按照上面的样式给他编辑完毕了,那么应该要如何退出呢?是的!没错!就是给他按下 Esc 这个按钮即可!马上你就会发现画面左下角的 – INSERT – 不见了!

在一般模式中按下 :wq 储存后离开 vi

OK,我们要存档了,存盘并离开的指令很简单,输入 :wq 即可保存离开!

OK! 这样我们就成功创建了一个 runoob.txt 的文件。

4、vi/vim 按键说明

除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。

第一部份:一般模式可用的光标移动、复制粘贴、搜索替换等

移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 行(常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

第二部份:一般模式切换到编辑模式的可用的按钮说明

进入输入或取代的编辑模式
i, I 进入输入模式(Insert mode):
i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
a, A 进入输入模式(Insert mode):
a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode):
这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R 进入取代模式(Replace mode):
r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
[Esc] 退出编辑模式,回到一般模式中(常用)

第三部份:一般模式切换到指令行模式的可用的按钮说明

指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如
『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
vim 环境的变更
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!

特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。

举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。

3、软件包安装yum和rpm

一、源代码形式

1.      绝大多数开源软件都是直接以原码形式发布的

2.      源代码一般会被打成.tar.gz的归档压缩文件

3.      源代码需要编译成为二进制形式之后才能够运行使用

4.      源代码基本编译流程:

1).configure 检查编译环境;

2)make对源代码进行编译;

3)make insall 将生成的可执行文件安装到当前计算机中

二、RPM

1.源代码形式的特点:操作复杂、编译时间长、极易出现问题、依赖关系复杂

2.为了方便,RPM(redhat package manager)

3.RPM通过将代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理。针对不同的系统设定不同的包

4.常用命令规范:linuxcast-1.2.0-30.el6.1686.rpm 包名-版本号-适用平台-32/64-rpm

5.使用rpm –i software.rpm(安装);

rpm -e software.rpm(卸载);

rpm –U software.rpm(升级形式安装);

rpm –ivh http://www.linuxcast.net/software.rpm(支持通过http\ftp协议形式安装)

-v 显示详细信息;-h显示进度条

查询功能:rpm –qa 列出全部已经安装的.rpm软件  rpm –qa |grep ***

三:YUM

1.      rpm软件包形式的管理虽然方便,但是需要手工解决软件包的依赖关系。很多时候安装一个软件安装一个软件需要安装1个或者多个其他软件,手动解决时,很复杂,yum解决这些问题。Yum是rpm的前端程序,主要目的是设计用来自动解决rpm的依赖关系,其特点:

1)  自动解决依赖关系;2)可以对rpm进行分组,基于组进行安装操作;3)引入仓库概念,支持多个仓库;4)配置简单

2.      yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时,需要依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、统一的网络仓库。

3.      仓库的配置文件/etc/yum.repos.d目录下

4.      使用:1)yum install 安装;

2)yum remove卸载;

3)yum update 升级制定软件

5.      安装的时候,会下载软件包.Rpm在安装,所以用国内仓库

改变镜像源1)访问地址http://mirrors.163.com/;2)点centos使用帮助;3)按步骤来

6.      查询软件:可以使用yumsearch

Yum: 即Yellowdog Update Modifier,是一种基于rpm的包管理工具

yum命令使用示例

显示yum仓库

显示所有仓库

yum repolist all

显示可用的仓库

repolist enabled

显示可用的仓库

repolist disabled

显示应用程序包

显示所有的程序包

yum list

yum list all

[vathe@localhost ~]$yum list tre?

Installed Packages

tree.x86_64 1.6.0-10.el7 @base

还支持通配符格式的查询

显示可安装的程序包

yum list available

[vathe@localhost ~]$yum list available php

Available Packages

php.x86_64 5.4.16-42.el7 base

显示可更新或已安装的程序包

yum list updates

yum list installed

显示仓库中最近增加的程序包

yum list recent

安装程序包

#安装 tree 程序

yum install tree

升级程序包

yum update tree

卸载程序包

yum remove tree

yum erase tree

查看程序包信息

yum info tree

查看文件的来源

查看某一文件来自于那个程序包

[vathe@localhost ~]$yum provides /bin/mv

coreutils-8.22-18.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts

Repo : base

Matched from:

Filename : /bin/mv

#表示/bin/mv文件来自于coreutils-8.22-18.el7.x86_64程序包

清理本地缓存

yum clean all

#清楚插件缓存

yum clean plugins

构建缓存

yum makecache

搜索

[vathe@localhost ~]$yum search php

============================================== N/S matched: php ===============================================

graphviz-php.x86_64 : PHP extension for graphviz

php.x86_64 : PHP scripting language for creating dynamic web sites

php-bcmath.x86_64 : A module for PHP applications for using the bcmath library

查看指定包所依赖的capabilities

[vathe@localhost ~]$yum deplist php

package: php.x86_64 5.4.16-42.el7

dependency: httpd

provider: httpd.x86_64 2.4.6-45.el7.centos

查看yum事务历史

[root@localhost ~]# yum history

Repository ‘base’ is missing name in configuration, using id

ID | Login user | Date and time | Action(s) | Altered

-------------------------------------------------------------------------------

2 | Vathe Su | 2017-04-17 17:07 | Install | 1

1 | System | 2017-03-23 22:19 | Install | 1405

history list

包组相关的命令

yum groupinstall # 安装包组

yum groupupdate #更新包组

yum grouplist #显示包组

yum groupremove #移除包组

yum groupinfo #查看包组信息

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum的命令形式一般是如下:yum [options] [command] [package …]

其中的[options]是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。[command]为所要进行的操作,[package …]是操作的对象。

概括了部分常用的命令包括:

自动搜索最快镜像插件: yum install yum-fastestmirror

安装yum图形窗口插件: yum install yumex

查看可能批量安装的列表: yum grouplist

1 安装

yum install 全部安装

yum install package1 安装指定的安装包package1

yum groupinsall group1 安装程序组group1

2 更新和升级

yum update 全部更新

yum update package1 更新指定程序包package1

yum check-update 检查可更新的程序

yum upgrade package1 升级指定程序包package1

yum groupupdate group1 升级程序组group1

3 查找和显示

yum info package1 显示安装包信息package1

yum list 显示所有已经安装和可以安装的程序包

yum list package1 显示指定程序包安装情况package1

yum groupinfo group1 显示程序组group1信息yum search string 根据关键字string查找安装包

4 删除程序

yum remove | erase package1 删除程序包package1

yum groupremove group1 删除程序组group1

yum deplist package1 查看程序package1依赖情况

5 清除缓存

yum clean packages 清除缓存目录下的软件包

yum clean headers 清除缓存目录下的 headers

yum clean oldheaders 清除缓存目录下旧的 headers

yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers

比如,要安装游戏程序组,首先进行查找:

#:yum grouplist

可以发现,可安装的游戏程序包名字是”Games and Entertainment“,这样就可以进行安装:

#:yum groupinstall “Games and Entertainment”

所 有的游戏程序包就自动安装了。在这里Games and Entertainment的名字必须用双引号选定,因为linux下面遇到空格会认为文件名结束了,因此必须告诉系统安装的程序包的名字是“Games and Entertainment”而不是“Games"。

yum,是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow dog updater),后经杜克大学的Linux@Duke开发团队进行改进,遂有此名。yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header, header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。

1.yum的一切配置信息都储存在一个叫yum.conf的配置文件中,通常位于/etc目 录下,这是整个yum系统的重中之重,我在的F9中查看了这一文件,大家一起来看下:

[hanlong@localhost F9常用文档]$ sudo more /etc/yum.conf

[main]

cachedir=/var/cache/yum

keepcache=0

debuglevel=2

logfile=/var/log/yum.log

exactarch=1

obsoletes=1

gpgcheck=1

plugins=1

metadata_expire=1800

PUT YOUR REPOS HERE OR IN separate files named file.repo

in /etc/yum.repos.d

下面简单的对这一文件作简要的说明:

cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum。

debuglevel:除错级别,0──10,默认是2

logfile:yum的日志文件,默认是/var/log/yum.log。

exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用686的包来升级。

gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认好像也是检查的。

2.好了,接下来就是yum的使用了,首先用yum来升级软件,yum的操作大都须有超级用户的权限,当然可以用sudo。

yum update,这一步是必须的,yum会从服务器的header目录下载rpm的header,放在本地的缓存中,这可能会花费一定的时间,但比起yum 给我们带来方便,这些时间的花费又算的了什么呢?header下载完毕,yum会判断是否有可更新的软件包,如果有,它会询问你的意见,是否更新,还是说 y吧,把系统始终up to date总是不错的,这时yum开始下载软件包并使用调用rpm安装,这可能要一定时间,取决于要更新软件的数目和网络状况,万一网络断了,也没关系,再 进行一次就可以了。升级完毕,以后每天只要使用yum check-update检查一下有无跟新,如果有,就用yum update进行跟新,时刻保持系统为最新,堵住一切发现的漏洞。用yum update packagename 对某个单独包进行升级。

现在简单的把yum软件升级的一些命令罗列一下:

(更新:我在安装wine的时候是用rpm一个一个安装的,先安装以来关系,然后在安装wine的主包,但是刚刚在论坛上发现来一个好的帖子,就yum的本地安装。参数是-localinstall

$yum localinstall wine-*

这样的话,yum会自动安装所有的依赖关系,而不用rpm一个一个的安装了,省了好多工作。

还有一个与他类似的参数:

$yum localupdate wine-*

如果有wine的新版本,而且你也下载到来本地,就可以这样本地更新wine了。)

1.列出所有可更新的软件清单

命令:yum check-update

2.安装所有更新软件

命令:yum update

3.仅安装指定的软件

命令:yum install

4.仅更新指定的软件

命令:yum update

5.列出所有可安裝的软件清单

命令:yum list

3.使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的。

安装的命令是,yum install xxx,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断

删除的命令是,yum remove xxx,同安装一样,yum也会查询数据库,给出解决依赖关系的提示。

1.用YUM安装软件包

命令:yum install

2.用YUM删除软件包

命令:yum remove

4.用yum查询想安装的软件

我们常会碰到这样的情况,想要安装一个软件,只知道它和某方面有关,但又不能确切知道它的名字。这时yum的查询功能就起作用了。你可以用 yum search keyword这样的命令来进行搜索,比如我们要则安装一个Instant Messenger,但又不知到底有哪些,这时不妨用 yum search messenger这样的指令进行搜索,yum会搜索所有可用rpm的描述,列出所有描述中和messeger有关的rpm包,于是我们可能得到 gaim,kopete等等,并从中选择。

有时我们还会碰到安装了一个包,但又不知道其用途,我们可以用yum info packagename这个指令来获取信息。

1.使用YUM查找软件包

命令:yum search

2.列出所有可安装的软件包

命令:yum list

3.列出所有可更新的软件包

命令:yum list updates

4.列出所有已安装的软件包

命令:yum list installed

5.列出所有已安装但不在 Yum Repository 內的软件包

命令:yum list extras

6.列出所指定的软件包

命令:yum list 7.使用YUM获取软件包信息

命令:yum info 8.列出所有软件包的信息

命令:yum info

9.列出所有可更新的软件包信息

命令:yum info updates

10.列出所有已安裝的软件包信息

命令:yum info installed

11.列出所有已安裝但不在 Yum Repository 內的软件包信息

命令:yum info extras

12.列出软件包提供哪些文件

命令:yum provides

5.清除YUM缓存

yum 会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all 清除所有

1.清除缓存目录(/var/cache/yum)下的软件包

命令:yum clean packages

2.清除缓存目录(/var/cache/yum)下的 headers

命令:yum clean headers

3.清除缓存目录(/var/cache/yum)下旧的 headers

命令:yum clean oldheaders

4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers

命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders)

以上所有命令参数的使用都可以用man来查看:

1、安装图形版yumex:yum install yumex。

2、安装额外的软件仓库:

rpm.livna.org 的软件包仓库:

rpm -ivh http://livna-dl.reloumirrors.net … ease-7-2.noarch.rpm

freshrpms.net 的软件包仓库:

rpm –ivh http://ftp.freshrpms.net/pub/fre … 1.1-1.fc.noarch.rpm

3、安装最快源 yum install yum-fastestmirror

资源真的是非常丰富,从Centos到Ubuntu,ISO镜像、升级包,应有尽有,上交的兄弟们真是幸福,羡慕啊。不过还好,我们好歹也算是在教育网内,凑合着也可以沾点光,下载一些。

网址为:ftp://ftp.sjtu.edu.cn/

相应的yum的repo为

[updates]

name=Fedora updates

baseurl=ftp://ftp.sjtu.edu.cn/fedora/linux/updates/$releasever/$basearch/

enabled=1

gpgcheck=0

[fedora]

name=Fedora $releasever - $basearch

baseurl=ftp://ftp.sjtu.edu.cn/fedora/linux/releases/$releasever/Everything/$basearch/os/

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY

如果在机器上安装了apt管理器,则相应的源为

repomd ftp://ftp.sjtu.edu.cn/ fedora/linux/updates/$(VERSION)/$(ARCH)/

repomd ftp://ftp.sjtu.edu.cn/ fedora/linux/releases/$(VERSION)/Everything/$(ARCH)/os/

4、压缩解压缩tar,zip

本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress 、uncompress、 zip、 unzip、rar、unrar等程式,以及如何使用它们对.tar、.gz 、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、. tar.Z、.zip、.rar这10种压缩文件进行操作

Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法:

tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面来举例说明一下:

?

1

tar -cf all.tar *.jpg

这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包 ,-f指定包的文件名。

?

1

tar -rf all.tar *.gif

这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

?

1

tar -uf all.tar logo.gif

这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

?

1

tar -tf all.tar

这条命令是列出all.tar包中所有文件,-t是列出文件的意思

?

1

tar -xf all.tar

这条命令是解出all.tar包中所有文件,-x是解开的意思

以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序,比如调用gzip、bzip2等。

\1) tar调用

gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip 相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下:

?

1

tar -czf all.tar.gz *.jpg

这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz

?

1

tar -xzf all.tar.gz

这条命令是将上面产生的包解开。

\2) tar调用bzip2

bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。

与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下:

?

1

tar -cjf all.tar.bz2 *.jpg

这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为all.tar.bz2

?

1

tar -xjf all.tar.bz2

这条命令是将上面产生的包解开。

3)tar调用compress

compress也是一个压缩程序,但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与 compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用compress。下面来举例说明一下:

?

1

tar -cZf all.tar.Z *.jpg

这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z

?

1

tar -xZf all.tar.Z

这条命令是将上面产生的包解开

有了上面的知识,你应该可以解开多种压缩文件了,下面对于tar系列的压缩文件作一个小结:

1)对于.tar结尾的文件

tar -xf all.tar

2)对于.gz结尾的文件

gzip -d all.gz

gunzip all.gz

3)对于.tgz或.tar.gz结尾的文件

tar -xzf all.tar.gz

tar -xzf all.tgz

4)对于.bz2结尾的文件

bzip2 -d all.bz2

bunzip2 all.bz2

5)对于tar.bz2结尾的文件

tar -xjf all.tar.bz2

6)对于.Z结尾的文件

uncompress all.Z

7)对于.tar.Z结尾的文件

tar -xZf all.tar.z

另外对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们:

1)对于.zip

linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

?

1

zip all.zip *.jpg

这条命令是将所有.jpg的文件压缩成一个zip包

?

1

unzip all.zip

这条命令是将all.zip中的所有文件解压出来

2)对于.rar

要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux 不是免费的;可从http://www.rarsoft.com/download.htm下载RARfor Linux 3.2.

0,然后安装:

?

1

2

3

tar -xzpvf rarlinux-3.2.0.tar.gz

cd rar

make

这样就安装好了,安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

?

1

rar a all *.jpg

这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar 扩展名将自动附加到包名后。

?

1

unrar e all.rar

这条命令是将all.rar中的所有文件解压出来

到此为至,我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress 、 uncompress、 zip、unzip、rar、unrar等程式,你应该已经能够使用它们对.tar 、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar这10种压缩文

件进行解压了,以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。

5、用户和权限chmod,chown

Linux下数字表示文件的操作权限(777,755,…)

Linux下。查看某路径下用(ls -l)查看全部文件的具体属性列表时。会看到文件的操作权限。类似“drwxr-xr-x”的字符串。

这串字符能够分成4段理解。结构为“d + 文件全部者操作权限 + 文件全部者所在组操作权限 + 其余人的操作权限”:

1,第一段:样例中字母“d”,表示文件所在文件夹

2,第二段:样例中字符串“rwx”,表示文件全部者对此文件的操作权限

3,第三段。样例中字符串“r-x”。表示文件全部者所在组对些文件的操作权限

4。第四段。样例中字符串“r-x”,表示除2、3两种外的不论什么人对此文件的操作权限

通经常使用三个数字来表示文件的读取、写入、运行权限:

运行:1

写入:2

读取:4

随便写个数字:755,这个3位数分别相应前面所说的分段:7相应第二段,5相应第三段,5相应第四段。

含义:

7:表示文件全部者的权限,4+2+1=7,即文件全部者对该文件有生杀大权,读、写、运行随便。

5:表示文件全部者所在组的权限:4+1=5。即文件全部者所在组对文件有读、运行权限。没有写权限。

5:同上,其余人对该文件仅仅有读、运行权限,没有写权限。

指令名称 : chmod

使用权限 : 全部使用者

使用方式 : chmod [-cfvR] [–help] [–version] mode file…

说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其它。利用 chmod 能够藉以控制档案怎样被他人所调用。

參数 :

mode : 权限设定字串,格式例如以下 : [ugoa…][[±=][rwxX]…][,…],当中

u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其它以外的人,a 表示这三者皆是。

+ 表示添加权限、- 表示取消权限、= 表示唯一设定权限。

r 表示可读取。w 表示可写入,x 表示可运行。X 表示仅仅有当该档案是个子文件夹或者该档案已经被设定过为可运行。

-c : 若该档案权限确实已经更改,才显示其更修改作

-f : 若该档案权限无法被更改也不要显示错误讯息

-v : 显示权限变更的具体资料

-R : 对眼下文件夹下的全部档案与子文件夹进行同样的权限变更(即以递回的方式逐个变更)

–help : 显示辅助说明

–version : 显示版本号

范例 :将档案 file1.txt 设为全部人皆可读取 :

chmod ugo+r file1.txt

将档案 file1.txt 设为全部人皆可读取 :

chmod a+r file1.txt

将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其它以外的人则不可写入 :

chmod ug+w,o-w file1.txt file2.txt

ex1.py 设定为仅仅有该档案拥有者能够运行 :

chmod u+x ex1.py

将眼下文件夹下的全部档案与子文件夹皆设为不论什么人可读取 :

chmod -R a+r *

此外chmod也能够用数字来表示权限如 chmod 777 file

语法为:chmod abc file

当中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1

若要rwx属性则4+2+1=7;

若要rw-属性则4+2=6;

若要r-x属性则4+1=5。

范例:

chmod a=rwx file

chmod 777 file

效果同样

chmod ug=rwx,o=x file

chmod 771 file

效果同样

若用chmod 4755 filename可使此程序具有root的权限.

指令名称 : chown

使用权限 : root

使用方式 : chown [-cfhvR] [–help] [–version] user[] file…

说明 : Linux/Unix 是多人多工作业系统,全部的档案皆有拥有者。利用 chown 能够将档案的拥有者加以改变。

一般来说,这个指令仅仅有是由系统管理者(root)所使用。一般使用者没有权限能够改变别人的档案拥有者,也没有权限能够自己的档案拥有者改设为别人。

仅仅有系统管理者(root)才有这种权限。

參数 :

user : 新的档案拥有者的使用者

IDgroup : 新的档案拥有者的使用者群体(group)

-c : 若该档案拥有者确实已经更改,才显示其更修改作

-f : 若该档案拥有者无法被更改也不要显示错误讯息

-h : 仅仅对于连结(link)进行变更。而非该 link 真正指向的档案

-v : 显示拥有者变更的具体资料

-R : 对眼下文件夹下的全部档案与子文件夹进行同样的拥有者变更(即以递回的方式逐个变更)

–help : 显示辅助说明

–version : 显示版本号

范例 :

将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :

chown jessie:users file1.txt

将眼下文件夹下的全部档案与子文件夹的拥有者皆设为 users 群体的使用者 lamport :

chmod -R lamport:users *

-rw------- (600) – 仅仅有属主有读写权限。

-rw-r–r-- (644) – 仅仅有属主有读写权限;而属组用户和其它用户仅仅有读权限。

-rwx------ (700) – 仅仅有属主有读、写、运行权限。

-rwxr-xr-x (755) – 属主有读、写、运行权限。而属组用户和其它用户仅仅有读、运行权限。

-rwx–x–x (711) – 属主有读、写、运行权限;而属组用户和其它用户仅仅有运行权限。

-rw-rw-rw- (666) – 全部用户都有文件读、写权限。

这样的做法不可取。

-rwxrwxrwx (777) – 全部用户都有读、写、运行权限。更不可取的做法。

下面是对文件夹的两个普通设定:

drwx------ (700) - 仅仅有属主可在文件夹中读、写。

drwxr-xr-x (755) - 全部用户可读该文件夹,但仅仅有属主才干改变文件夹中的内容。

--------------------------------------------------------------------------

执行 .sh 文件类型的文件:

用file命令測试一下看是什么类型的

file xxxx.sh

假设是Bourne-Again shell script 能够sh xxxx.sh 或者chmod +x xxxx.sh 再./xxx.sh

一般 .sh 的直接加入x(可运行属性) chmod +x xxx.sh 然后./xxx.sh就能够了

chmod是一个改变用户拥有指定文件的权限的命令.r:仅仅读,w:写,x运行.也能够用数字

6、系统管理systemd

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。历史上,Linux 的启动一直采用init进程。下面的命令用来启动服务。

$ sudo /etc/init.d/apache2 start

或者

$ service apache2 start

这种方法有两个缺点。一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

1、Systemd 概述

Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。

1
$ systemctl --version

上面的命令查看 Systemd 的版本。

Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix 哲学。

图1 Systemd 架构图

2、系统管理

Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

2.1 systemctl

systemctl是 Systemd 的主命令,用于管理系统。

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
# 重启系统

$ sudo systemctl reboot

# 关闭系统,切断电源

$ sudo systemctl poweroff

# CPU停止工作

$ sudo systemctl halt

# 暂停系统

$ sudo systemctl suspend

# 让系统进入冬眠状态

$ sudo systemctl hibernate

# 让系统进入交互式休眠状态

$ sudo systemctl hybrid-sleep

# 启动进入救援状态(单用户状态)

$ sudo systemctl rescue

2.2 systemd-analyze

systemd-analyze命令用于查看启动耗时。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看启动耗时

$ systemd-analyze

# 查看每个服务的启动耗时

$ systemd-analyze blame

# 显示瀑布状的启动过程流

$ systemd-analyze critical-chain

# 显示指定服务的启动流

$ systemd-analyze critical-chain atd.service

2.3 hostnamectl

hostnamectl命令用于查看当前主机的信息。

1
2
3
4
5
6
7
# 显示当前主机的信息

$ hostnamectl

# 设置主机名。

$ sudo hostnamectl set-hostname rhel7

2.4 localectl

localectl命令用于查看本地化设置。

1
2
3
4
5
6
7
8
9
# 查看本地化设置

$ localectl

# 设置本地化参数。

$ sudo localectl set-locale LANG=en\_GB.utf8

$ sudo localectl set-keymap en\_GB

2.5 timedatectl

timedatectl命令用于查看当前时区设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看当前时区设置

$ timedatectl

# 显示所有可用的时区

$ timedatectl list-timezones

# 设置当前时区

$ sudo timedatectl set-timezone America/New\_York

$ sudo timedatectl set-time YYYY-MM-DD

$ sudo timedatectl set-time HH:MM:SS

2.6 loginctl

loginctl命令用于查看当前登录的用户。

1
2
3
4
5
6
7
8
9
10
11
# 列出当前session

$ loginctl list-sessions

# 列出当前登录用户

$ loginctl list-users

# 列出显示指定用户的信息

$ loginctl show-user ruanyf

3、Unit

3.1 含义

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。

Unit 一共分成12种。

  • Service unit:系统服务
  • Target unit:多个 Unit 构成的一个组
  • Device Unit:硬件设备
  • Mount Unit:文件系统的挂载点
  • Automount Unit:自动挂载点
  • Path Unit:文件或路径
  • Scope Unit:不是由 Systemd 启动的外部进程
  • Slice Unit:进程组
  • Snapshot Unit:Systemd 快照,可以切回某个快照
  • Socket Unit:进程间通信的 socket
  • Swap Unit:swap 文件
  • Timer Unit:定时器

systemctl list-units命令可以查看当前系统的所有 Unit 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 列出正在运行的 Unit

$ systemctl list-units

# 列出所有Unit,包括没有找到配置文件的或者启动失败的

$ systemctl list-units --all

# 列出所有没有运行的 Unit

$ systemctl list-units --all --state=inactive

# 列出所有加载失败的 Unit

$ systemctl list-units --failed

# 列出所有正在运行的、类型为 service 的 Unit

$ systemctl list-units --type=service

3.2 Unit 的状态

systemctl status命令用于查看系统状态和单个 Unit 的状态。

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
# 显示系统状态

$ systemctl status

# 显示单个 Unit 的状态

$ sysystemctl status bluetooth.service

# 显示远程主机的某个 Unit 的状态

$ systemctl -H root@rhel7.example.com status httpd.service

除了status命令,systemctl还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用。

# 显示某个 Unit 是否正在运行

$ systemctl is-active application.service

# 显示某个 Unit 是否处于启动失败状态

$ systemctl is-failed application.service

# 显示某个 Unit 服务是否建立了启动链接

$ systemctl is-enabled application.service

3.3 Unit 管理

对于用户来说,最常用的是下面这些命令,用于启动和停止 Unit(主要是 service)。

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
32
33
34
35
# 立即启动一个服务

$ sudo systemctl start apache.service

# 立即停止一个服务

$ sudo systemctl stop apache.service

# 重启一个服务

$ sudo systemctl restart apache.service

# 杀死一个服务的所有子进程

$ sudo systemctl kill apache.service

# 重新加载一个服务的配置文件

$ sudo systemctl reload apache.service

# 重载所有修改过的配置文件

$ sudo systemctl daemon-reload

# 显示某个 Unit 的所有底层参数

$ systemctl show httpd.service

# 显示某个 Unit 的指定属性的值

$ systemctl show -p CPUShares httpd.service

# 设置某个 Unit 的指定属性

$ sudo systemctl set-property httpd.service CPUShares=500

3.4 依赖关系

Unit 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。

systemctl list-dependencies命令列出一个 Unit 的所有依赖。

1
$ systemctl list-dependencies nginx.service

上面命令的输出结果之中,有些依赖是 Target 类型(详见下文),默认不会展开显示。如果要展开 Target,就需要使用–all参数。

1
$ systemctl list-dependencies --all nginx.service

4、Unit 的配置文件

4.1 概述

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。

Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

1
$ sudo systemctl enable clamd@scan.service

等同于

$ sudo ln -s ‘/usr/lib/systemd/system/clamd@scan.service’ ‘/etc/systemd/system/multi-user.target.wants/clamd@scan.service’

如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。

与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。

1
$ sudo systemctl disable clamd@scan.service

配置文件的后缀名,就是该 Unit 的种类,比如sshd.socket。如果省略,Systemd 默认后缀名为.service,所以sshd会被理解成sshd.service。

4.2 配置文件的状态

systemctl list-unit-files命令用于列出所有配置文件。

1
2
3
4
5
6
7
# 列出所有配置文件

$ systemctl list-unit-files

# 列出指定类型的配置文件

$ systemctl list-unit-files --type=service

这个命令会输出一个列表。

$ systemctl list-unit-files

UNIT FILE STATE

chronyd.service enabled

clamd@.service static

clamd@scan.service disabled

这个列表显示每个配置文件的状态,一共有四种。

  • enabled:已建立启动链接
  • disabled:没建立启动链接
  • static:该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖
  • masked:该配置文件被禁止建立启动链接

注意,从配置文件的状态无法看出,该 Unit 是否正在运行。这必须执行前面提到的systemctl status命令。

1
2
3
4
5
6
7
$ systemctl status bluetooth.service

一旦修改配置文件,就要让 SystemD 重新加载配置文件,然后重新启动,否则修改不会生效。

$ sudo systemctl daemon-reload

$ sudo systemctl restart httpd.service

4.3 配置文件的格式

配置文件就是普通的文本文件,可以用文本编辑器打开。

systemctl cat命令可以查看配置文件的内容。

$ systemctl cat atd.service

[Unit]

Description=ATD daemon

[Service]

Type=forking

ExecStart=/usr/bin/atd

[Install]

WantedBy=multi-user.target

从上面的输出可以看到,配置文件分成几个区块。每个区块的第一行,是用方括号表示的区别名,比如[Unit]。注意,配置文件的区块名和字段名,都是大小写敏感的。

每个区块内部是一些等号连接的键值对。

[Section]

Directive1=value

Directive2=value

注意,键值对的等号两侧不能有空格。

4.4 配置文件的区块

[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。

  • Description:简短描述
  • Documentation:文档地址
  • Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
  • Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
  • BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
  • Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
  • After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
  • Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行
  • Condition…:当前 Unit 运行必须满足的条件,否则不会运行
  • Assert…:当前 Unit 运行必须满足的条件,否则会报启动失败

[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。

  • WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中
  • RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
  • Alias:当前 Unit 可用于启动的别名
  • Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit

[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。

  • Type:定义启动时的进程行为。它有以下几种值。
  • Type=simple:默认值,执行ExecStart指定的命令,启动主进程
  • Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
  • Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
  • Type=dbus:当前服务通过D-Bus启动
  • Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
  • Type=idle:若有其他任务执行完毕,当前服务才会运行
  • ExecStart:启动当前服务的命令
  • ExecStartPre:启动当前服务之前执行的命令
  • ExecStartPost:启动当前服务之后执行的命令
  • ExecReload:重启当前服务时执行的命令
  • ExecStop:停止当前服务时执行的命令
  • ExecStopPost:停止当其服务之后执行的命令
  • RestartSec:自动重启当前服务间隔的秒数
  • Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
  • TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
  • Environment:指定环境变量

Unit 配置文件的完整字段清单,请参考官方文档。

5、Target

启动计算机的时候,需要启动大量的 Unit。如果每一次启动,都要一一写明本次启动需要哪些 Unit,显然非常不方便。Systemd 的解决方案就是 Target。

简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状态。

传统的init启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。不同的是,RunLevel 是互斥的,不可能多个 RunLevel 同时启动,但是多个 Target 可以同时启动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看当前系统的所有 Target

$ systemctl list-unit-files --type=target

# 查看一个 Target 包含的所有 Unit

$ systemctl list-dependencies multi-user.target

# 查看启动时的默认 Target

$ systemctl get-default

# 设置启动时的默认 Target

$ sudo systemctl set-default multi-user.target

# 切换 Target 时,默认不关闭前一个 Target 启动的进程,

# systemctl isolate 命令改变这种行为,

# 关闭前一个 Target 里面所有不属于后一个 Target 的进程

$ sudo systemctl isolate multi-user.target

Target 与 传统 RunLevel 的对应关系如下。

Traditional runlevel New target name Symbolically linked to…

Runlevel 0 | runlevel0.target -> poweroff.target

Runlevel 1 | runlevel1.target -> rescue.target

Runlevel 2 | runlevel2.target -> multi-user.target

Runlevel 3 | runlevel3.target -> multi-user.target

Runlevel 4 | runlevel4.target -> multi-user.target

Runlevel 5 | runlevel5.target -> graphical.target

Runlevel 6 | runlevel6.target -> reboot.target

它与init进程的主要差别如下。

(1)默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。

(2)启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。

(3)配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。

6、日志管理

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf。

journalctl功能强大,用法非常多。

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# 查看所有日志(默认情况下 ,只保存本次启动的日志)

$ sudo journalctl

# 查看内核日志(不显示应用日志)

$ sudo journalctl -k

# 查看系统本次启动的日志

$ sudo journalctl -b

$ sudo journalctl -b -0

# 查看上一次启动的日志(需更改设置)

$ sudo journalctl -b -1

# 查看指定时间的日志

$ sudo journalctl --since="2012-10-30 18:17:16"

$ sudo journalctl --since "20 min ago"

$ sudo journalctl --since yesterday

$ sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00"

$ sudo journalctl --since 09:00 --until "1 hour ago"

# 显示尾部的最新10行日志

$ sudo journalctl -n

# 显示尾部指定行数的日志

$ sudo journalctl -n 20

# 实时滚动显示最新日志

$ sudo journalctl -f

# 查看指定服务的日志

$ sudo journalctl /usr/lib/systemd/systemd

# 查看指定进程的日志

$ sudo journalctl \_PID=1

# 查看某个路径的脚本的日志

$ sudo journalctl /usr/bin/bash

# 查看指定用户的日志

$ sudo journalctl \_UID=33 --since today

# 查看某个 Unit 的日志

$ sudo journalctl -u nginx.service

$ sudo journalctl -u nginx.service --since today

# 实时滚动显示某个 Unit 的最新日志

$ sudo journalctl -u nginx.service -f

# 合并显示多个 Unit 的日志

$ journalctl -u nginx.service -u php-fpm.service --since today

# 查看指定优先级(及其以上级别)的日志,共有8级

# 0: emerg

# 1: alert

# 2: crit

# 3: err

# 4: warning

# 5: notice

# 6: info

# 7: debug

$ sudo journalctl -p err -b

# 日志默认分页输出,--no-pager 改为正常的标准输出

$ sudo journalctl --no-pager

# 以 JSON 格式(单行)输出

$ sudo journalctl -b -u nginx.service -o json

# 以 JSON 格式(多行)输出,可读性更好

$ sudo journalctl -b -u nginx.serviceqq

` `-o json-pretty

# 显示日志占据的硬盘空间

$ sudo journalctl --disk-usage

# 指定日志文件占据的最大空间

$ sudo journalctl --vacuum-size=1G

# 指定日志文件保存多久

$ sudo journalctl --vacuum-time=1years

7、操作实例

7.1 开机启动

对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。

如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。

$ sudo systemctl enable httpd

上面的命令相当于在/etc/systemd/system目录添加一个符号链接,指向/usr/lib/systemd/system里面的httpd.service文件。

这是因为开机时,Systemd只执行/etc/systemd/system目录里面的配置文件。这也意味着,如果把修改后的配置文件放在该目录,就可以达到覆盖原始配置的效果。

7.2 启动服务

设置开机启动以后,软件并不会立即启动,必须等到下一次开机。如果想现在就运行该软件,那么要执行systemctl start命令。

$ sudo systemctl start httpd

执行上面的命令以后,有可能启动失败,因此要用systemctl status命令查看一下该服务的状态。

$ sudo systemctl status httpd

httpd.service - The Apache HTTP Server

Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)

Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago

Main PID: 4349 (httpd)

Status: “Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec”

CGroup: /system.slice/httpd.service

├─4349 /usr/sbin/httpd -DFOREGROUND

├─4350 /usr/sbin/httpd -DFOREGROUND

├─4351 /usr/sbin/httpd -DFOREGROUND

├─4352 /usr/sbin/httpd -DFOREGROUND

├─4353 /usr/sbin/httpd -DFOREGROUND

└─4354 /usr/sbin/httpd -DFOREGROUND

12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server

12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.

12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.

上面的输出结果含义如下。

  • Loaded行:配置文件的位置,是否设为开机启动
  • Active行:表示正在运行
  • Main PID行:主进程ID
  • Status行:由应用本身(这里是 httpd )提供的软件当前状态
  • CGroup块:应用的所有子进程
  • 日志块:应用的日志

7.3 停止服务

终止正在运行的服务,需要执行systemctl stop命令。

1
$ sudo systemctl stop httpd.service

有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出kill信号。

1
$ sudo systemctl kill httpd.service

此外,重启服务要执行systemctl restart命令。

1
$ sudo systemctl restart httpd.service

7.4 读懂配置文件

一个服务怎么启动,完全由它的配置文件决定。下面就来看,配置文件有些什么内容。

前面说过,配置文件主要放在/usr/lib/systemd/system目录,也可能在/etc/systemd/system目录。找到配置文件以后,使用文本编辑器打开即可。

systemctl cat命令可以用来查看配置文件,下面以sshd.service文件为例,它的作用是启动一个 SSH 服务器,供其他用户以 SSH 方式登录。

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
$ systemctl cat sshd.service

[Unit]

Description=OpenSSH server daemon

Documentation=man:sshd(8) man:sshd\_config(5)

After=network.target sshd-keygen.service

Wants=sshd-keygen.service

[Service]

EnvironmentFile=/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -D $OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

Type=simple

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

可以看到,配置文件分成几个区块,每个区块包含若干条键值对。

下面依次解释每个区块的内容。

7.5 [Unit] 区块:启动顺序与依赖关系。

Unit区块的Description字段给出当前服务的简单描述,Documentation字段给出文档位置。

接下来的设置是启动顺序和依赖关系,这个比较重要。

After字段:表示如果network.target或sshd-keygen.service需要启动,那么sshd.service应该在它们之后启动。

相应地,还有一个Before字段,定义sshd.service应该在哪些服务之前启动。

注意,After和Before字段只涉及启动顺序,不涉及依赖关系。

举例来说,某 Web 应用需要 postgresql 数据库储存数据。在配置文件中,它只定义要在 postgresql 之后启动,而没有定义依赖 postgresql 。上线后,由于某种原因,postgresql 需要重新启动,在停止服务期间,该 Web 应用就会无法建立数据库连接。

设置依赖关系,需要使用Wants字段和Requires字段。

Wants字段:表示sshd.service与sshd-keygen.service之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响sshd.service继续执行。

Requires字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service也必须退出。

注意,Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。

7.6 [Service] 区块:启动行为

Service区块定义如何启动当前服务。

7.6.1 启动命令

许多软件都有自己的环境参数文件,该文件可以用EnvironmentFile字段读取。

EnvironmentFile字段:指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取。

上面的例子中,sshd 的环境参数文件是/etc/sysconfig/sshd。

配置文件里面最重要的字段是ExecStart。

ExecStart字段:定义启动进程时执行的命令。

上面的例子中,启动sshd,执行的命令是/usr/sbin/sshd -D $OPTIONS,其中的变量$OPTIONS就来自EnvironmentFile字段指定的环境参数文件。

与之作用相似的,还有如下这些字段。

  • ExecReload字段:重启服务时执行的命令
  • ExecStop字段:停止服务时执行的命令
  • ExecStartPre字段:启动服务之前执行的命令
  • ExecStartPost字段:启动服务之后执行的命令
  • ExecStopPost字段:停止服务之后执行的命令

请看下面的例子。

1
2
3
4
5
6
7
8
9
10
11
[Service]

ExecStart=/bin/echo execstart1

ExecStart=

ExecStart=/bin/echo execstart2

ExecStartPost=/bin/echo post1

ExecStartPost=/bin/echo post2

上面这个配置文件,第二行ExecStart设为空值,等于取消了第一行的设置,运行结果如下。

execstart2

post1

post2

所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。

7.6.2 启动类型

Type字段定义启动类型。它可以设置的值如下。

  • simple(默认值):ExecStart字段启动的进程为主进程
  • forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
  • oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
  • dbus:类似于simple,但会等待 D-Bus 信号后启动
  • notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
  • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

下面是一个oneshot的例子,笔记本电脑启动时,要把触摸板关掉,配置文件可以这样写。

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]

Description=Switch-off Touchpad

[Service]

Type=oneshot

ExecStart=/usr/bin/touchpad-off

[Install]

WantedBy=multi-user.target

上面的配置文件,启动类型设为oneshot,就表明这个服务只要运行一次就够了,不需要长期运行。

如果关闭以后,将来某个时候还想打开,配置文件修改如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]

Description=Switch-off Touchpad

[Service]

Type=oneshot

ExecStart=/usr/bin/touchpad-off start

ExecStop=/usr/bin/touchpad-off stop

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

上面配置文件中,RemainAfterExit字段设为yes,表示进程退出以后,服务仍然保持执行。这样的话,一旦使用systemctl stop命令停止服务,ExecStop指定的命令就会执行,从而重新开启触摸板。

7.6.3 重启行为

Service区块有一些字段,定义了重启行为。

KillMode字段:定义 Systemd 如何停止 sshd 服务。

上面这个例子中,将KillMode设为process,表示只停止主进程,不停止任何sshd 子进程,即子进程打开的 SSH session 仍然保持连接。这个设置不太常见,但对 sshd 很重要,否则你停止服务的时候,会连自己打开的 SSH session 一起杀掉。

KillMode字段可以设置的值如下。

1
2
3
4
- control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
- process:只杀主进程
- mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
- none:没有进程会被杀掉,只是执行服务的 stop 命令。

接下来是Restart字段。

Restart字段:定义了 sshd 退出后,Systemd 的重启方式。

上面的例子中,Restart设为on-failure,表示任何意外的失败,就将重启sshd。如果 sshd 正常停止(比如执行systemctl stop命令),它就不会重启。

Restart字段可以设置的值如下。

1
2
3
4
5
6
7
- no(默认值):退出后不会重启
- on-success:只有正常退出时(退出状态码为0),才会重启
- on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
- on-abnormal:只有被信号终止和超时,才会重启
- on-abort:只有在收到没有捕捉到的信号终止时,才会重启
- on-watchdog:超时退出,才会重启
- always:不管是什么退出原因,总是重启

对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。

最后是RestartSec字段。

RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。上面的例子设为等待42秒。

7.7 [Install] 区块

Install区块,定义如何安装这个配置文件,即怎样做到开机启动。

WantedBy字段:表示该服务所在的 Target。

Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,sshd 所在的 Target 是multi-user.target。

这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

Systemd 有默认的启动 Target。

1
2
3
$ systemctl get-default

multi-user.target

上面的结果表示,默认的启动 Target 是multi-user.target。在这个组里的所有服务,都将开机启动。这就是为什么systemctl enable命令能设置开机启动的原因。

使用 Target 的时候,systemctl list-dependencies命令和systemctl isolate命令也很有用。

1
2
3
4
5
6
7
8
9
# 查看 multi-user.target 包含的所有服务

$ systemctl list-dependencies multi-user.target

# 切换到另一个 target

# shutdown.target 就是关机状态

$ sudo systemctl isolate shutdown.target

一般来说,常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。官方文档有一张非常清晰的 Target 依赖关系图。

7.8 Target 的配置文件

Target 也有自己的配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ systemctl cat multi-user.target

[Unit]

Description=Multi-User System

Documentation=man:systemd.special(7)

Requires=basic.target

Conflicts=rescue.service rescue.target

After=basic.target rescue.service rescue.target

AllowIsolate=yes

注意,Target 配置文件里面没有启动命令。

上面输出结果中,主要字段含义如下。

Requires字段:要求basic.target一起运行。

Conflicts字段:冲突字段。如果rescue.service或rescue.target正在运行,multi-user.target就不能运行,反之亦然。

After:表示multi-user.target在basic.target 、 rescue.service、 rescue.target之后启动,如果它们有启动的话。

AllowIsolate:允许使用systemctl isolate命令切换到multi-user.target。

7.9 修改配置文件后重启

修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。

1
2
3
4
5
6
7
# 重新加载配置文件

$ sudo systemctl daemon-reload

# 重启相关服务

$ sudo systemctl restart foobar

7、查看设置时区

一、GMT、UTC、CST、DST 时间

  • UTC

   整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。

  • GMT

   格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)

  • CST

   中国标准时间 (China Standard Time)

1 GMT + 8 = UTC + 8 = CST
  • DST

   夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。(中国不使用)

二、硬件时间和系统时间

  • 硬件时间

RTC(Real-Time Clock)或CMOS时间,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。

  • 系统时间

一般在服务器启动时复制RTC时间,之后独立运行,保存了时间、时区和夏令时设置。

三、timedatectl 命令

3.1使用指南

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# timedatectl -h
timedatectl [OPTIONS...] COMMAND ...

Query or change system time and date settings.

-h --help Show this help message
--version Show package version
--no-pager Do not pipe output into a pager
--no-ask-password Do not prompt for password
-H --host=[USER@]HOST Operate on remote host
-M --machine=CONTAINER Operate on local container

3.2命令示例(查看当前系统时间)

1
2
#timedatectl
#timedatectl status

3.3设置当前时间

1
2
3
timedatectl set-time "YYYY-MM-DD HH:MM:SS"
timedatectl set-time "YYYY-MM-DD"
timedatectl set-time "HH:MM:SS"

3.4查看所有可用的时区

1
2
3
timedatectl list-timezones
# 亚洲
timedatectl list-timezones | grep -E "Asia/S.*"

3.5设置时区

1
timedatectl set-timezone Asia/Shanghai

3.6设置硬件时间

1
2
3
4
# 硬件时间默认为UTC
timedatectl set-local-rtc 1
# hwclock --systohc --localtime
# 两条命令效果等同

3.7启动自动同步时间

1
2
timedatectl set-ntp yes
# yes或no; 1或0也可以

四、Chrony 服务器

Chrony:是网络时间协议的 (NTP) 的另一种实现,由两个程序组成,分别是chronyd和chronyc。

chronyd:是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。

chronyc:提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

优势:

  • 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,这对于并非全天 24 小时运行的台式计算机或系统而言非常有用。
  • 能够更好地响应时钟频率的快速变化,这对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用。
  • 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响。
  • 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性。
  • 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟。

注意:在CentOS7下为标配的时间同步服务,当然也可以使用以前的NTP同步方式,不过要安装NTP服务。

服务端

4.1安装使用

1
2
3
yum install chrony
systemctl start chronyd
systemctl enable chronyd

4.2配置文件修改

当Chrony启动时,它会读取/etc/chrony.conf配置文件中的设置。也就是锁,如果需要更改时间同步的服务器,修改此配置文件即可。

4.3客户端配置

客户端的配置文件是同一个文件(/etc/chrony.conf),删掉那些没用的server xxxxxxxxxx iburst

4.4常用命令

1
2
3
4
5
6
7
- accheck 检查NTP访问是否对特定主机可用
- activity 该命令会显示有多少NTP源在线/离线
- add server 手动添加一台新的NTP服务器
- clients 在客户端报告已访问到服务器
- delete 手动移除NTP服务器或对等服务器
- settime 手动设置守护进程时间
- tracking 显示系统时间信息

4.5案例介绍

查看当前时间服务器状态

1
2
[root@localhost ~]# chronyc 
chronyc> activity #查看当前服务器状态,如下服务器有两个NTP源在线

查看时间同步的信息来源

1
2
3
4
5
[root@localhost ~]# chronyc  sources
210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
^* time5.aliyun.com 2 6 377 31 +267us[ +573us] +/- 3769us
^- 203.107.6.88 2 6 377 31 -2586us[-2586us] +/- 38ms

五、日常使用案例

centos7从外网同步时间和时区设置

1
2
3
4
5
6
7
8
9
10
# 安装
yum install chrony
# 启用
systemctl start chronyd
systemctl enable chronyd
# 设置亚洲时区
timedatectl set-timezone Asia/Shanghai
# 启用NTP同步
timedatectl set-ntp yes

也可以用NTP同步时间(不推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装ntp服务
yum install ntp
# 开机启动服务
systemctl enable ntpd
# 启动服务
systemctl start ntpd
# 设置亚洲时区
timedatectl set-timezone Asia/Shanghai
# 启用NTP同步
timedatectl set-ntp yes
# 重启ntp服务
systemctl restart ntpd
# 手动同步时间
ntpq -p

常见问题:

1、#date看到上的时间和#timedatectl看到的本地时间不同,需要我们注意一样。

2、(Real-Time Clock)或CMOS时间和本地时间不同,需要执行timedatectl set-local-rtc 0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# date
Thu Apr 5 17:22:34 CST 2018
[root@localhost ~]# timedatectl
Local time: Thu 2018-04-05 17:22:38 CST
Universal time: Thu 2018-04-05 09:22:38 UTC
RTC time: Thu 2018-04-05 17:22:35
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: yes
DST active: n/a

Warning: The system is configured to read the RTC time in the local time zone.
This mode can not be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.

参考:https://www.jianshu.com/p/fb32239ccf2b

8、 常用Linux命令

2.1.1 命令帮助

CentOS安装完成,今后的操作都是基于命令行的,后续内容只列出操作命令,不解释该命令的使用方法,可查阅相关手册。可以用下列方法了解具体命令的使用方法和参数。

列出某个命令的使用手册,PgUp - PgDn翻页,q退出

1
$ man tar

命令帮助,后面加上 | more或者 | less使内容分页,空格键翻页,q退出

1
2
3
$ tar --help | more

$ tar --help | less

一般在VMware虚机(或者阿里云这类的远程虚机)和主机之间,可以用鼠标右键进行命令行的文本粘贴。

2.1.2 文本编辑器vi

对文本文件或脚本文件的编辑,一般用vi编辑器,简要介绍如下:

1、编辑某文件,如果此文件不存在,则新建一个

1
$ vi /etc/abc.txt

2、打开文件后,默认为命令模式,按键“i”进入编辑模式,左下角会出现 – INSERT – 字样。在输入模式中,可以使用以下按键:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
•	字符按键以及Shift组合,输入字符

• ENTER,回车键,换行

• BACK SPACE,退格键,删除光标前一个字符

• DEL,删除键,删除光标后一个字符

• 方向键,在文本中移动光标

• HOME/END,移动光标到行首/行尾

• Page Up/Page Down,上/下翻页

• Insert,切换光标为输入/替换模式,光标将变成竖线/下划线

• ESC,退出输入模式,切换到命令模式

3、编辑完成后ESC,退出输入模式,切换到命令模式。在命令模式下按下:(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

常用的有 :w 保存,:wq 保存后退出,:q 直接退出。

一般在VMware虚机(或者阿里云这类的远程虚机)和主机之间,可以用鼠标右键进行文本粘贴。

2.1.3 压缩解压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
最常用的压缩解压缩的命令是tar

#这条命令是解出all.tar包中所有文件,-x是解开的意思

$ tar -xf all.tar

#这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

$ tar -cf all.tar \*.jpg

#这条命令是将所有.gif的文件增加到all.tar的包里面去

$ tar -rf all.tar \*.gif

#这条命令是更新原来tar包all.tar中logo.gif文件

$ tar -uf all.tar logo.gif

#这条命令是列出all.tar包中所有文件

$ tar -tf all.tar

常用压缩文件的处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1、\*.tar 用 tar -xvf 解压

2、\*.gz 用 gzip -d或者gunzip 解压

3、\*.tar.gz和\*.tgz 用 tar -xzf 解压

4、\*.bz2 用 bzip2 -d或者用bunzip2 解压

5、\*.tar.bz2用tar -xjf 解压

6、\*.Z 用 uncompress 解压

7、\*.tar.Z 用tar -xZf 解压

8、\*.rar 用 unrar e解压

9、\*.zip 用 unzip 解压

2.1.4 软件包安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
yum和rpm是紧密相关的安装命令。

#查询perl包安装了没有

$ rpm -q perl

#查询含perl关键词的包安装了没有

$ rpm -qa | grep perl

#安装abc.rpm包

$ rpm -ivh abc.rpm

#升级abc.rpm包

$ rpm -Uvh abc.rpm

$ yum install perl gcc kernel-devel wget

9、系统命令

命令信息

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
32
33
34
35
36
37
38
39
winver 检查windows版本

arch 显示机器的处理器架构(1)

uname -m 显示机器的处理器架构(2)

uname -r 显示正在使用的内核版本

dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)

hdparm -i /dev/hda 罗列一个磁盘的架构特性

hdparm -tT /dev/sda 在磁盘上执行测试性读取操作

cat /proc/cpuinfo 显示CPU info的信息

cat /proc/interrupts 显示中断

cat /proc/meminfo 校验内存使用

cat /proc/swaps 显示哪些swap被使用

cat /proc/version 显示内核的版本

cat /proc/net/dev 显示网络适配器及统计

cat /proc/mounts 显示已加载的文件系统

lspci -tv 罗列 PCI 设备

lsusb -tv 显示 USB 设备

date 显示系统日期

cal 2007 显示2007年的日历表

date 041217002007.00 设置日期和时间 - 月日时分年.秒

clock -w 将时间修改保存到 BIOS

关机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
shutdown -h now 关闭系统(1)

init 0 关闭系统(2)

telinit 0 关闭系统(3)

shutdown -h hours:minutes & 按预定时间关闭系统

shutdown -c 取消按预定时间关闭系统

shutdown -r now 重启(1)

reboot 重启(2)

logout 注销

文件目录

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
cd /home 进入 '/ home' 目录'

cd .. 返回上一级目录

cd ../.. 返回上两级目录

cd 进入个人的主目录

cd ~user1 进入个人的主目录

cd - 返回上次所在的目录

pwd 显示工作路径

ls 查看目录中的文件

ls -F 查看目录中的文件

ls -l 显示文件和目录的详细资料

ls -a 显示隐藏文件

ls -R 显示目录结构和目录内文件

ls \*[0-9]\* 显示包含数字的文件名和目录名

tree 显示文件和目录由根目录开始的树形结构(1)

lstree 显示文件和目录由根目录开始的树形结构(2)

mkdir dir1 创建一个叫做 'dir1' 的目录'

mkdir dir1 dir2 同时创建两个目录

mkdir -p /tmp/dir1/dir2 创建一个目录树

rm -f file1 删除一个叫做 'file1' 的文件'

rmdir dir1 删除一个叫做 'dir1' 的目录'

rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容

rm -rf dir1 dir2 同时删除两个目录及它们的内容

mv dir1 new\_dir 重命名/移动 一个目录

cp file1 file2 复制一个文件

cp dir/\* . 复制一个目录下的所有文件到当前工作目录

cp -a /tmp/dir1 . 复制一个目录到当前工作目录

cp -a dir1 dir2 复制一个目录

ln -s file1 lnk1 创建一个指向文件或目录的软链接

ln file1 lnk1 创建一个指向文件或目录的物理链接

touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)

文件搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录

find / -user user1 搜索属于用户 'user1' 的文件和目录

find /home/user1 -name \\*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件

find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件

find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
find / -name \\*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限

find / -xdev -name \\*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
locate \\*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
whereis halt 显示一个二进制文件、源码或man的位置
which halt 显示一个二进制文件或可执行文件的完整路径

文件系统

1
2
3
4
5
6
7
8
9
10
11
mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在
umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出
fuser -km /mnt/hda2 当设备繁忙时强制卸载
umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用
mount /dev/fd0 /mnt/floppy 挂载一个软盘
mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom
mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom
mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件
mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统
mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个网络共享

磁盘空间

1
2
3
4
5
6
7
8
9
10
df -h 显示已经挂载的分区列表

ls -lSr |more 以尺寸大小排列文件和目录

du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'

du -sk \* | sort -rn 以容量大小为依据依次显示文件和目录的大小

rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的 空间 (ubuntu, debian类系统)
 评论
评论插件加载失败
正在加载评论插件