一、ssh连接操作
1.1 Powershell客户端
在Window10上打开 PowerShell 命令窗口
1.2 连接服务器
ssh 用户名@主机IP地址或名称
ssh root@10.36.174.53
如果没有免密码的情况下,提示输入root用户的口令,如root.
1.3 免密方式
1.3.1 生成公钥
在powershell(客户端)生成公钥和私钥文件,命令如下:
ssh-keygen
根据提示,一步步向下回车即可。
【注意】powershell中执行命令失败之后,可以尝试使用“以管理员身份运行”打开powershell终端。
1.3.2 scp上传
再通过scp命令 将公钥文件(id_rsa.pub)上传到远程主机上(linux主机: 自己虚拟机、其他人机器、云主机)
scp 文件名 root@host1:/root/
1.3.3 写入授权
在远程主机上, 将公钥写入到授权文件(~/.ssh/authorized_keys)中
cat id_rsa.pub >> .ssh/authorized_keys
二、Linux中常用命令
2.1 文件操作
Linux操作系统中的文件目录结构:
/ 根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放,类同Window的根路径是各个盘符(C:、D:)
- 当前用户的home(家)目录 (非root用户是在/home/{用户名}, root用户的家目录是 /root)
/bin : 提供用户使用的基本命令, 存放二进制命令,不允许关联到独立分区,OS启动会用到里面的程序。
/boot:用于存放引导文件,内核文件,引导加载器.
/sbin:管理类的基本命令,不能关联到独立分区,OS启动时会用到的程序(重要的命令通常处于bin,不重要的则安装在sbin)。
/lib:存放系统在启动时依赖的基本共享库文件(.so)以及内核模块文件. 系统使用的函数库的目录 也存放了大量的脚本库文件 ,程序在执行过程中,需要调用时会用到
/lib64:存放64位系统上的辅助共享库文件.
/etc: 系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件 。
/home:普通用户主目录,当新建账户时,都会分配在此,建议单独分区,并分配额外空间用于存储数据。
/root: 系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
/media:便携式移动设备挂载点目录.
/mnt:临时文件系统挂载点.
/dev: 设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件 (b 随机访问,c 线性访问)
/opt:第三方应用程序的安装位置.
/srv: 服务启动之后需要访问的数据目录,存放系统上运行的服务用到的数据,如www服务需要访问的网页数据存放在/srv/www内。
/tmp:存储临时文件, 任何人都可以访问,重要数据一定不要放在此目录下。
/usr: 应用程序存放目录,/usr/bin 存放保证系统拥有完整功能而提供的应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,_/usr/local 存放软件升级包,第三方应用程序的安装位置,/usr/share/doc _系统说明文件存放目录。
/var :放置系统中经常要发生变化的文件,如日志文件。/var/log 日志目录及文件./var/tmp:保存系统两次重启之间产生的临时数据.
/proc: 用于输出内核与进程信息相关的虚拟文件系统,目录中的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间
**/sys **: 用于输出当前系统上硬件设备相关的虚拟文件系统.
2.1.1 ls命令
查看当前路径下的文件及目录
[root@localhost usr]# ls
bin games lib libexec sbin src
etc include lib64 local share tmp
【注】查看某一个命令的帮助信息: 命令 --help
以列表的方式查看文件及目录,命令:
[root@localhost ~]# ls -l
总用量 48
-rw-------. 1 root root 1266 10月 29 22:13 anaconda-ks.cfg
-rw-r--r--. 1 root root 408 12月 22 18:37 hosts
-r-xr--r--. 1 root root 404 4月 12 15:47 id_rsa.pub_disen
-rw-r--r--. 1 root root 397 4月 12 15:47 id_rsa.pub_lq
-rw-r--r--. 1 root root 401 4月 12 15:47 id_rsa.pub_LT
-rw-r--r--. 1 root root 405 4月 12 15:47 id_rsa.pub_maosheng
-rw-r--r--. 1 root root 405 4月 12 15:47 id_rsa.pub_ruby
-rw-r--r--. 1 root root 408 12月 22 11:47 id_rsa.pub-slaver1
-rw-r--r--. 1 root root 408 4月 12 16:09 id_rsa.pub_zhangkui
-rw-------. 1 root root 1679 4月 12 16:00 ls
-rw-r--r--. 1 root root 408 4月 12 16:00 ls.pub
drwxr-xr-x. 3 root root 73 11月 7 15:09 mysql
-rw-r--r--. 1 root root 3 11月 5 17:21 pwd_secure.sql
drwxr-xr-x. 2 root root 28 11月 7 15:09 sql
drwxr-xr-x. 2 root root 19 12月 22 15:47 test1
drwxr-xr-x. 2 root root 6 11月 7 15:12 th_sql
查看文件的索引编号:
ls -li
查看文件,并以大小来排序, 文件大小以K
字节表示:
ls -lS --block-size=K
SIZE => {K, M, G, T, P, E, Z, Y}
字节单位。
查看文件,并以最后修改时间排序(默认降序), 以升序方式显示:
ls -ltr
查看 /etc目录下的所有文件:
ls /etc -lS
查看当前目录所有文件(包含以点开头的隐藏文件),但不显示.
当前目录和..
父级目录信息:
ls -lA
查看当前目录文件,不显示文件名包含disen
的文件及目录:
ls -l -I *disen*
查看/etc
目录下所有的文件,文件名以逗号分隔:
ls -am
-a
显示所有的文件,包含.
和..
。
2.1.2 cd命令
切换目录位置的命令
切换到 /etc/ssh 目录,命令:
cd /etc/ssh
如果当前路径在 /etc/sysconfig/network-scripts, 回到当前用户的home目录,命令:
cd ~
假如当前用户名是 disen
, ~
代表的目录位置是/home/disen
。
设:文件目录结构如下:
- /root
|-- db (当前目录)
|-- config
|-- bin
|-- a.py
|-- b.py
在当前的db目录下,直接切换到/root/bin
目录(以相对路径):
cd ../bin
..
表示相对于当前目录的父级目录名。
【提示】绝对路径: 从根目录开始描述的路径
2.1.3 pwd命令
显示当前完整的绝对路径
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts
【重要】相对路径
.
当前路径
..
当前路径的父级目录
从当前路径切换到父级目录,命令:
cd ..
2.1.4 mkdir命令
创建文件目录(夹)
创建单个目录,命令:
mkdir ~/.ssh
代表,在当前用户的home目录下,创建.ssh
目录。
创建多级目录,命令:
mkdir -p ~/a/b/c/d/e/f
【说明】如果创建的子目录所在的父目录不存在,则通过-p
参数自动创建父目录。
创建多个同等级别的子目录:
mkdir a b c d
在当前的目录下,同时创建四个子目录。
创建data目录,并指定文件目录的权限为665
:
mkdir data -m 665
默认的权限是755
,即权限描述rwxr-xr-x
, 665则为rw-rw-r-x
。
2.1.5 rmdir 命令
删除空目录
删除单个目录
rmdir 目录位置
删除多个级联目录
rmdir -p 父级目录/子集目录
2.1.6 rm命令
删除文件及目录
删除一个不为空的目录或文件
rm -rf 文件目录位置
删除一个不为空的文件
rm -f 文件路径
删除code目录下所有的.txt文件
rm -rf *.txt
【扩展】删除文件时,可以使用*
通配符,*
表示任意多个字符
2.1.7 touch命令
创建新的文件,若文件存在,则只更新它的修改时间。
创建a.txt空文件
touch a.txt
2.1.8 echo命令
打印文本的命令
打印输出一个Hi,Linux
echo "Hi, Linux"
【扩展】将输出的内容输入到文件中,可以使用>
或>>
流重定向
echo "print(188)" > code/a.py
2.1.9 find命令
查找文件或目录
格式:
find 指定查找的目录 -name "*.py"
【说明】从当前目录及子目录查找所有 python文件,如果没有指定目录时,默认为当前目录。
find ./ -name "*.py"
【扩展】grep方式过滤文本
find . |grep .py
|
管道符号,表示将find命令查找到的所有内容,按行进行过滤,只保留包含查找的内容。
统计/opt目录下所有py文件的个数
find /opt -name '*.py' | wc -l
wc -l
按行统计个数。
统计当前目录下所有.py文件的代码行数:
find -name '*.py'|xargs cat|wc -l
2.1.10 cp命令
复制文件
复制一个文本文件(备份)
cp [-u] /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
【注意】如果目标文件已存在,则提示是否二次覆盖,输入 y
即可。
【练习】
#!/bin/bash
mkdir code
cd code
touch a
echo "hi" > a
cat a
cp a a.bak
cat a.bak
echo "good" >> a
cat a
cp -u a a.bak
cat a.bak
可以将以上的所有内容,复制或写入到一个.sh文件中,并将此文件权限修改为可执行,然后./xx.sh
.
复制一个目录
cp -r <源目录> <目标位置>
【注意】cp命令支持*
通配符的,如将当前所有.py文件复制到code2(已存在)中
cp [-u] *.py code2
2.1.11 mv命令
移动文件或目录, 具有重命名的功能
移动文件位置,如 将/root/code/a文件 移动到 /opt目录下
mv /root/code/a /opt
移动目录的位置, 如 将/root/code 移动到 /opt目录下
mv /root/code /opt/
重命名文件或目录
cd /opt/code
mv a.bak a.backup
【注】如果文件在移动时,是同一目录,则结果是文件重命名的效果。
2.1.12 cat 命令
查看文本文件的内容的命令
查看a.txt文件:
cat a.txt
2.1.13 grep命令
grep [opt] PATTERN [文件] 从文件或输入流中查找(过滤)指定PATTERN匹配的内容。
从a.txt文件中,查找disen
字符串
grep disen a.txt
从a.txt文件中,查找所有以数字开头和结束的内容:
grep -E ^[0-9]+$
【注意】grep的正则表达式分为标准正则(BRE)和扩展正则(ERE),但对正则的转义字符支持的不是特别友好。
grep命令的选项中可以使用-n
显示匹配的行号, -c
显示匹配的行数, -v
选择不匹配的部分
2.2 文件权限操作
2.2.1 文件权限组成
一个文件或目录的权限由三大部分组成的,分别是用户权限+用户组权限+其它组权限。每部分的权限又分为三小部分,分别是 r(读), w(写), x (执行),代表的数值分别是 r: 4, w:2, x: 1,如果权限值为0时,使用 -
表示。
文件权限的部分是文件描述信息中从第二位开始,如下:
-rw-r--r-- a.txt
第一位是文件类型: -
表示是文件, d
表示目录, l
文件的连接。
第一部分权限:rw-
表示用户对此文件具有读写
权限
第二部分: r--
表示用户所在组的其他用户具有读
的权限
第三部分: r--
表示其他组的用户具有读
的权限
2.2.2 修改文件权限
使用chmod 命令
2.2.2.1 字符权限
格式: chmod [ugoa] <+|-> [r|w|x]
修改a.py文件的用户权限为 rwx
chmod u+rwx a.py
为a.py文件增加其他组用户的执行权限
chmod o+x a.py
取消a.py文件的组和其它组的执行权限
chmod go-x a.py
2.2.2.2 数值权限
r: 4
w: 2ch
x: 1
所有权限位上的数值相加为 7,
777 : 代表所有用户都具有所有权限(rwxrwxrwx)
666: 代表所有用户都具有读写权限(rw-rw-rw-)
400: 代表只有用户具有读权限 (r--------)
chmod 777 a.py
2.3 服务操作
服务: 后台运行的程序(没有界面),在Window中通过 Win+R输入services.msc可以打开服务管理器。在Linux中可以执行 top命令查看正在运行的服务。这些服务提供了客户端程序,通过客户端程序和服务进行交互。
2.3.1 systemctl命令
服务的启动、停止、重启以及启用(禁用)都需要使用systemctl命令
命令格式:
systemctl <start|stop|restart|enable|disable|status> <服务名>
常用的服务名: network
(网络服务)、sshd
(远程连接服务)
- start 启动服务
- stop 停止服务
- restart 重新启动服务, 由于其服务的配置文件被更改,则需要重新加载配置文件。
- enable 启用服务(第一次使用时),启用服务之后,系统重启之后,则自动启动服务
- disable 禁用服务,系统不会自动启动服务。
- status 查看服务状态
重启网卡服务:
systemctl restart network
启动sshd服务
systemctl start sshd
2.3.2 service命令
同systemctl一样,是管理服务,不同是命令在服务名的后面。
格式: service <服务名> <start|restart|stop|status>
查看sshd命令状态
service sshd status
重启sshd服务
service sshd restart
【注意】service最终重启服务还是使用(重定向)systemctl。两者之间区别正在service执行后有相应响应信息(执行结果或提示信息),而systemctl只有存在错误时,再反馈信息。
2.3.3 netstat命令
监测到网络数据流的工具, 默认情况,Centos没有安装,需要手动安装。
安装 net-tools 工具
yum install net-tools -y
install
安装
uninstall
卸载
search
搜索
【提示】如果yum提示被占用,则等待之前的yum执行完成。或者已确定无人使用yum,但还是被占用,则重启Centos操作系统(reboot 或 init 0)。
查看网络的统计信息
netstat -s
查看所有tcp协议的程序及端口号
[root@localhost yum.repos.d]# netstat -ltpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 15134/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 22104/master
tcp6 0 0 :::22 :::* LISTEN 15134/sshd
tcp6 0 0 ::1:25 :::* LISTEN 22104/master
查询 22端口是否被占用
netstat -ltpn |grep 22
参数说明:
l
显示Listen监听进程t
代表tcp协议u
代表 udp协议a
代表所有已连接进程,包含listen和establishedp
代表进程的PID和程序名s
统计数据包相关数据n
不显示名称,显示的是索引(用户)或端口号(服务)e
显示扩展信息(extend),显示用户和INode索引节点。
2.3.4 ps命令
ps用于查看当前运行的进程
查看所有当前运行的进程信息
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:07 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --
root 2 0 0 11:07 ? 00:00:00 [kthreadd]
root 3 2 0 11:07 ? 00:00:00 [ksoftirqd/0]
结果说明:
- UID 用户名
- PID 进程ID
- PPID 父进程ID
- TTY 运行终端的描述符,
?
表示后台服务 - CMD 进程执行的命令
查看某一进程是否运行
[root@localhost ~]# ps -ef|grep sshd
root 2098 1 0 11:13 ? 00:00:00 /usr/sbin/sshd -D
root 2101 2098 0 11:13 ? 00:00:00 sshd: root@pts/0
root 2120 2098 0 11:13 ? 00:00:00 sshd: root@pts/1
root 2161 2098 0 11:16 ? 00:00:00 sshd: root@pts/2
root 2206 2098 0 11:20 ? 00:00:00 sshd: root@pts/3
root 2228 2098 0 11:21 ? 00:00:00 sshd: root@pts/4
root 2295 2098 0 11:27 ? 00:00:00 sshd: root@pts/5
root 2342 2105 0 11:30 pts/0 00:00:00 grep --color=auto sshd
[root@localhost ~]# who
root tty1 2021-04-13 11:08
root pts/0 2021-04-13 11:13 (10.36.174.51)
root pts/1 2021-04-13 11:13 (10.36.174.43)
root pts/2 2021-04-13 11:16 (10.36.174.39)
root pts/3 2021-04-13 11:20 (10.36.174.37)
root pts/4 2021-04-13 11:21 (10.36.174.66)
root pts/5 2021-04-13 11:27 (10.36.174.61)
从所有正在运行的进程中只定位 sshd相关的进程。
如果查看某进程时,不显示最后一行的grep信息
ps -ef | grep dbus | grep -v grep
2.3.5 kill命令
杀掉某一进程
命令格式: kill -<数字信号> <进程ID>
数字信号: 9 代表强制杀掉
如,强制杀掉 2295 进程
kill -9 2295