CentOS 基础


centos-7

SSH 连接

要对服务器进行控制操作,首先需要使用 SSH 连接到服务器。

SSH 的基本使用形式:

ssh 用户@主机

用户 即为登录服务器使用的用户名,@符号右边是服务器的主机名或者 IP 地址。

使用 SSH 远程登录到 Linux 服务器主要有两种难用户身份的方法:

  • 用户名 + 密码
  • 密钥

在服务器端,可以通过配置 SSH 服务,让用户只能使用某种方法验证身份。相比用户名+密码登录,密钥登录是一种更为安全的做法,因此一些服务器会禁用用户名+密码登录,只允许使用密钥登录。

密钥 ssh-key

SSH 密钥,即在本机电脑上使用命令生成一对密钥,一个私钥(Private Key),一个公钥(Public Key),然后将公钥告诉服务器,以后在登录服务器的时候,服务器端的公钥会与本机电脑端的私钥进行匹配,如果匹配,则通过验证。

生成密钥

密钥一般只需要生成一次,最好也只生成一次。

生成密钥前,可以先检查一下之前是否有生成过密钥。一般密钥会放置在用户主目录下的 .ssh 这个目录下面,可使用 ls ~/.ssh 命令查看这个目录下是否存在密钥文件。如果是空白,或者显示没有这个目录,那就说明之前没有生成过 SSH-KEY,如果里面有两个文件,id_rsa 和 id_rsa.pub,说明已经有了 SSH-KEY。

如果没有,生成 SSH-KEY,执行命令:

ssh-keygen

命令会返回信息问将密钥放在哪里,输入密码等,可以不设置,直接回车即可。

需要注意的是,生成的密钥只对当前登录到系统的这个用户有效。

使用密钥

配置服务器使用 SSH-KEY 方式登录,需要将生成的公钥告诉服务器。

查看公钥文件里的内容,执行:

cat ~/.ssh/id_rsa.pub

复制返回密钥,然后登录的服务器,编辑当前登录用户主目录下面的 .ssh/authorized_keys,如果没这个文件,可以创建一个。然后把刚复制的公钥内容插入到 authorizes_keys 文件里面。这样下次再使用服务上的这个用户登录到服务器的时候,就不再需要输入密码。

用户权限

root

root 这个用户是系统的超级管理员,拥有最高级别的权限。一般的工作,我们不直接使用 root,可以创建一个普通用户,当需要 root 权限的时候,再切换到 root 身份去执行任务。可以配置普通用户拥有使用 sudo 的权限,这样在任务前添加一个 sudo,就可以以 root 的身份执行任务了。

添加用户

useradd 可以在系统里添加新用户:

useradd ryan

如果当前登录用户不是超级管理员(root),可以在命令前添加 sudo

sudo useradd ryan

设置密码

passwd 可以设置用记的密码:

sudo passwd ryan

服务器上的密码要尽量复杂,可以使用工具生成随机密码。

切换用户

使用 su 命令切换用户的身份,命令后面如果不加具体的用户名,就是切换到 root 用户:

sudo su

查看当前用记的身份,可以使用以下命令:

echo $USER

sudo / wheel

让普通用户使用 root 身份去执行任务,让用户拥有使用 sudo 的权限,需要将用户添加到 wheel 这个用户群组中:

sudo gpaswwd -a ryan wheel

成功后会返回信息:

Adding user ryan to group wheel

之后这个用户就可以使用 sudo 权限了。

可以使用以下命令查看用户所属群组:

groups ryan

群组

把用户放到用户群组里,可设置文件与目录的所属群组的权限。

查看用户所属群组:

groups 用户

创建群组:

groupadd 群组名

把用户放到群组中:

usermod -a -G 群组 用户

修改用户主群组:

usermod -g 主群组 用户

修改所有权:chown

使用 chown(change owner)命令可修改文件与目录的所有权:

chown 用户:群组 文件/目录

如果想修改某个目录以及它里面所包含的所有子目录的所有要,可以加上 -R 选项:

chown -R 用户:群组 文件/目录

修改权限:chmod

系统上的一个用户,对某个文件或目录能做的有三个动作:

  • r:read(读取)
  • w:write(写入)
  • x:excute(执行)

对于文件与目录来说,有三种人:

  • 拥有者(owner)
  • 用户组(group)
  • 其它人(others)

在列出目录内容的时候,使用 -l 选项,可以显示内容的权限。

权限可以使用数字表示:

  • r:4
  • w:2
  • x:1
  • r+x:5
  • r+w:6
  • r+w+x:7

可以使用命令 chmod 来修改文件与目录的权限:

chmod 权限 目录/文件

修改的权限可以使用数字表示,用三个数字分别表示拥有都者所属用户组以及其它人的权限。比如把一个目录的权限修改成 755:

chmod 755 目录

修改权限时也可以使用字母,r 是读取,w 是写入,x 是执行。u 表示拥有者,g 表示所属用户组,o 表示其它人,a 表示所有人。另外可以配合使用 + 与 – 号,去添加或去掉权限。

包(Packages)管理

Packages 就是系统上用的软件包,管理这些包用的是系统的包管理工具。Linux 系统的不同的发行版本都有自己的包管理工具,CentOS 用的是 yum,Ubuntu 用的是 apt-get

仓库 Repository

仓库 Repository ,可以使用包管理工具安装的软件包的列表。系统自带一些仓库,如需要安装一些系统仓库中不存在的包,需要安装额外的仓库。

查看系统上的仓库列表,执行命令:

yum repolist

第三方仓库

如果需要安装的包在自带仓库中没有或者版本比较低,可以选择安装第三方仓库。常用的第三方仓库有 IUSEPEL等,它里面包含了很多比较新的软件包。

安装 ius 仓库:

sudo yum install https://centos7.iuscommunity.org/ius-release.rpm -y

epel 是 ius 仓库依赖的一个仓库,所以安装 ius 的时候也是 epel 一起安装好了。

如果想单独安装 epel 仓库:

sudo yum install epel-release -y

或者:

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y

yum:CentOS 系统上的包管理工具

搜索包:

yum search 关键词

查看包详情:

yum info 包的名字

安装包:

yum install 包的名字

删除已安装的包:

yum remove 包的名字

更新安装包:

yum update

列出可更新的包:

yum list updates

列出已安装的包:

yum list installed

yum 参考手册:https://access.redhat.com

服务:servic

systemctl 是管理服务用的工具。

启动服务:

sudo systemctl start 服务

启动服务需要管理员权限,如果当前用户不是管理员,需要在命令前加上 sudo

停止服务:

sudo systemctl stop 服务

查看服务状态:

sudo systemctl status 服务

重启服务:

sudo systemctl restart 服务

重新加载服务:

sudo systemctl reload 服务

让服务开机启动可以用 enable 启用一下这个服务,这样每次重启服务器后,这个服务会自动启动。禁用服务 disable 就是不让服务开机启动。

启用:

sudo systemctl enable 服务

禁用:

sudo systemctl disable 服务

打包与解压:tar

tar 一些常用的选项:

  • c(create):创建
  • z(gzip):一种压缩格式
  • f(file):文件
  • x(extract):解压

打包需要 create file 两个选项,打包生成的文件一般用 .tar 后缀:

tar --create--file 生成的打包文件.tar 要打包的文件/目录

或者可以简化为:

tar -cf 生成的打包文件.tar 要打包的文件/目录

打包并压缩需要使用 create gzip file 这三个选项,生成的压缩文件一般用 tar.gz 后缀:

tar -czf 生成的打包文件.tar.gz 要打包的文件/目录

解包需要用 extract file 这两个选项:

 tar -xf 要解包的文件.tar.gz

传输数据:curl

curl 可以通过各种形式的地址传输数据。

常用的选项:

  • o(–output):写入到文件
  • O(–remote-name):写入到文件(用远程文件的名字)

输出地址内容:

curl 地址

把地址内容下载到某个文件里:

curl -o 文件名 地址

如果想用远程地址是文件,把文件下载下来,文件名使用远程文件的名字,可以这样:

curl -O 文件地址

目录同步:rsync

要两个目录保持同步,可以使用 rsync(remote sync)。要同步的目录可以是本地之间的目录,也可以是本地与远程之间的目录:

rsync 选项 源 目标

常用的 rsync 选项:

  • r(recursive): 递归复制,复制同步的文件不保留文件的权限,创建与修改时间。
  • a(archive):存档模式,可以递归复制,保留文件替身,复制同步的文件会保留文件的拥有者、用户名、时间、权限。
  • z(compress):压缩传输,传输文件时会压缩文件。
  • n(dry-run):假装同步,看看都有什么东西可以同步的,但不会真正执行同步。
  • h(human-readable):用人类都看懂的方式显示数字。
  • P(progress):进度。

执行同步之后在目标目录上删除掉在源上被删除掉的内容:

rsync -a -P --delete 源 目标

如果是同步远程文件:

rsync -a -P 用户@主机:源 目标

远程同步前需要配置好用户身份的验证。

文件传输:scp

scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。

当使用 scp 拷贝一个文件到另一台主机上的时候,如果目标文件已经存在,那么默认会将目标文件的内容替换为拷贝来的文件的内容;如果目标文件不存在,系统会先创建一个空的目标文件,然后再将拷贝文件的内容填充到新创建的目标文件中。

scp 命令基本格式

scp [可选参数] file_source file_target

下面是一些 scp 命令常用的参数:

  • -B:使用批处理模式(传输之前不再询问密码或者口令)
  • -C:启用压缩模式,将-C传递给ssh协议,从而打开压缩功能
  • -p:保留源文件的修改时间、访问时间还有访问权限
  • -q:禁用传输进度条
  • -r:递归拷贝指定的整个文件夹
  • -P:Port,这里的P是大写,指定连接远程主机用的端口

其他可选参数可以使用 scp --help 查看。

使用示例

获取远程服务器上的文件,格式为:

scp remote_username@remote_ip:remote_path/remote_file local_file

例如:

scp root@192.168.33.10:/home/test.txt /home/test.txt

这个命令表示将上机 192.168.33.10 上文件 test.txt,下载到本地 /home/test.txt

上述命令中指定了用户名 root,会提示需要输入密码(如果用户使用 SSH 验证则不需要密码),如果不指定用户名,需要手动输入用户名和密码。

获取远程服务器上的目录,格式为:

scp -r remote_username@remote_ip:remote_path local_path

例如:

scp -r root@192.168.33.10:/home/test /home/test

-r 参数表示递归复制,即复制该目录下面的文件和目录。如果本地目录不存在,会先创建该文件夹。

将本地文件或目录上传到服务器,只需将路径参数调换顺序即可:

scp local_path/local_file remote_username@remote_ip:remote_path

例如:

scp -P 22222 /home/test.txt root@192.168.33.10:/home/test.txt

-P 参数表示 SSH 端口,如果没有更改默认的 SSH 端口,则不需要添加该参数。

需要注意的是,scp 命令所使用的用户要具有可读取远程主机相应文件的权限。

#EOF