Linux基础

基本概念

epool与select

对比项 epool select
功能 I/O多路复用,监听多个I/O事件的状态 I/O多路复用,监听多个I/O事件的状态
机制 I/O事件通知机制,支持水平触发和边沿触发 轮询机制
效率 更高 一般
并行支持 较大 较小,且无法修改

基础命令

ssh

语法

1
$ ssh username@hostname -p port

示例

例如: 主机名:192.168.0.110 端口:22 用户名:root

1
$ ssh root@192.168.0.110 -p 22

scp

语法

scp 参数 [原路径] [目标路径]

参数

-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 保留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

示例

复制文件:

命令格式:

1
$ scp -P port local_file remote_username@remote_ip:remote_folder

或者

1
$ scp -P port local_file remote_username@remote_ip:remote_file

或者

1
$ scp -P port local_file remote_ip:remote_folder

或者

1
$ scp -P port local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名

复制目录:

命令格式:

1
$ scp -r local_folder remote_username@remote_ip:remote_folder

或者

1
$ scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码。 注意:scp复制程序会把链接转变成文件。

rsync

用法同scp。

-r:递归拷贝 -l:拷贝链接 -v:显示拷贝过程。

常用配置

桌面模式和文本模式切换

  • ctrl+alt+f6:文本模式
  • ctrl+alt+f7:桌面模式

手动启动图形模式

1
$ startx

开机进入文本模式

修改/etc/default/grub文件

1
2
3
GRUB_CMDLINE_LINUX_DEFAILT="quit"  # 图形模式
GRUB_CMDLINE_LINUX_DEFAILT="text" # 文本模式
GRUB_GFXMODE=640x480 # 调整文本模式下的分辨率

更新启动项

1
$ sudo update-grub

修改主机名

1
$ echo 主机名 > /etc/hostname

Linux-设置免密登陆

生成密钥

1
$ ssh-keygen -t rsa -P ''

会生成如下: /.ssh/ /.ssh/authorized_keys # 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥 ~/.ssh/id_rsa # 生成的私钥文件 ~/.ssh/id_rsa.pub # 生成的公钥文件 ~/.ssh/know_hosts # 已知的主机公钥清单

设置本机免密登陆

1
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

设置远程免密登陆

通过ssh-copy-id的方式

语法

1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@<romte_ip>

示例

1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.10

提示

如果未安装openssh-clients,会提示:

1
-bash: ssh-copy-id: command not found

解决办法:

1
$ yum install openssh-clients

通过scp将内容写到对方的文件中

语法

1
scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys

示例

1
$ scp -p ~/.ssh/id_rsa.pub root@192.168.100.10:/root/.ssh/authorized_keys

通过Ansible实现批量免密

语法

1
$ ansible <groupname> -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k

示例

1
$ ansible node1 -m authorized_key -a "user=root key='{{ lookup('file','~/.ssh/id_rsa.pub') }}'" -k

常见错误

ECDSA host key has changed错误

问题描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ssh-copy-id root@192.168.100.11
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/iamwlb/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: SHA256:EGV0iIDO1uf/rsxSRaaCVD/2vRECD8pv0E83gBFfy9s.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /Users/iamwlb/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /Users/iamwlb/.ssh/known_hosts:4
ERROR: ECDSA host key for 192.168.100.11 has changed and you have requested strict checking.
ERROR: Host key verification failed.

解决办法

从本地机器移除192.168.100.11的缓存

1
$ ssh-keygen -R 192.168.100.11

CentOS下ifconfig command not found

CentOS7.0默认是没有安装net-tools,会导致输入ifconfig命令找不到。 解决办法:

1
2
$ yum upgrade
$ yum install net-tools

another app is currently holding the yum lock;waiting for it to exit错误

问题描述

使用yum命令时,提示“another app is currently holding the yum lock;waiting for it to exit”。

解决办法

1
$ rm -f /var/run/yum.pid

CentOS重启后NTP服务失败解决办法

问题描述

CentOS7,重启后ntp服务失败,报错如下:

1
2
$ ntpq -p
ntpq: read: Connection refused

解决办法

1
$ systemctl disable chronyd

RPMs disabled because /usr/bin/applydeltarpm not installed错误解决办法

问题描述

1
\nInstall  1 Package (+57 Dependent packages)\nUpgrade  1 Package (+ 5 Dependent packages)\n\nTotal download size: 156 M\nDownloading packages:\nDelta RPMs disabled because /usr/bin/applydeltarpm not installed.\nPublic key for ansible-tower-3.2.2-1.el7.x86_64.rpm is not installed\nPublic key for rabbitmq-server-3.6.9-1.el7.centos.noarch.rpm is not installed\n"]}

解决办法

1
2
$ yum provides '*/applydeltarpm'
$ yum install deltarpm -y

Peer reports incompatible or unsupported protocol version错误解决办法

问题描述

1
2
3
[WARNING]: Consider using get_url or uri module rather than running curl

fatal: [node2 -> None]: FAILED! => {"changed": false, "cmd": ["curl", "--cacert", "/etc/ssl/etcd/ssl/ca.pem", "--cert", "/etc/ssl/etcd/ssl/admin-node1.pem", "--key", "/etc/ssl/etcd/ssl/admin-node1-key.pem", "https://localhost:2379/v2/keys/calico/v1/ipam/v4/pool"], "delta": "0:00:00.106497", "end": "2017-12-27 14:18:18.695575", "msg": "non-zero return code", "rc": 35, "start": "2017-12-27 14:18:18.589078", "stderr": " % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\ncurl: (35) Peer reports incompatible or unsupported protocol version.", "stderr_lines": [" % Total % Received % Xferd Average Speed Time Time Time Current", " Dload Upload Total Spent Left Speed", "", " 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0", " 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0", "curl: (35) Peer reports incompatible or unsupported protocol version."], "stdout": "", "stdout_lines": []}

解决办法

1
$ curl -v --tlsv1.2 https://url

参考

  • https://github.com/voxpupuli/puppet-archive/issues/273

SSH上传提示:encountered 1 errors during the transfer错误解决办法

  • windows 的路径不能存在括号“()”, 把括号去掉 重新上传。
  • 在SSH Secure File Transfer,打开“Operation”菜单,打开“File Transfer Mode”子菜单,再选择“Binary”,OK!
  • 把服务器上同名文件删掉再传。

/bin/bash^M: bad interpreter: No such file or directory错误解决办法

问题描述

执行一个脚本xxx.sh 时, 一直是提示:

1
-bash: ./full_build.sh: /bin/bash^M: bad interpreter: No such file or directory

解决办法

Vim修改

vim打开脚本,运行

1
:set ff?

可以看到DOS字样,运行

1
:set ff=unix

存盘退出。

dos2unix转换编码

1
$ dos2unix xxx.sh

设置免密登陆后仍然需要输入密码

导入公钥位置不对

公钥的导入位置不对。以wlb用户为例,导入位置应该是:/home/wlb/.ssh/authorized_keys,而不是~/.ssh/authorized_keys。

权限设置问题

1
2
3
$ chmod 700 /home/wlb
$ chmod 700 /home/wlb/.ssh/
$ chmod 600 /home/wlb/.ssh/authorized_keys
坚持原创技术分享,您的支持将鼓励我继续创作!
0%