Linux | 笔记

Linux的目录结构是一个树型结构
Windows 系统可以拥有多个盘符, 如 C盘、D盘、E盘
Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面 解压缩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-c 创建一个新tar文件
-v 显示运行过程的信息
-f 指定文件名
-z 调用gzip压缩命令进行压缩
-x 解开tar文件

# 解压
tar -zxvf 压缩文件 [-C] [指定解压目录]

# 压缩
tar -c[z]vf 压缩文件 目录

tar -cvf test1.tar /root/test1 #打包
tar -czvf test2.tar.gz /root/test2 #打包并压缩
系统管理

进程

1
2
3
ps -ef #查看所有进程

kill -9 12345 #立即杀死pid为12345的进程

管道

将一命令输出作为另一命令输入
1
ps -ef | grep php #查询名称中包含php的进程
用户
1
2
3
4
5
6
7
8
# 创建用户
useradd 用户名

# 设置密码
passwd 用户名

# 删除用户 -r 同时删除此用户关联的目录 /home/用户名
userdel [-r] 用户名
权限管理 Linux: 多任务多用户
用户管理包括 用户与组管理
Linux对于不同的系统资源拥有不同的使用权限,Linux对文件创建者(所属用户),所属用户组,其他用户都赋予不同的权限。 所属用户: 文件的创建者 所属用户组: 和所属用户在同一组的用户 其他用户: 既不是所属用户,也不是所属用户组
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
ls -lh

第一位字符 文件类型
- 普通文件
d 文件夹
l 连接文件

剩余 9 字符
3位1组

[属主][属组][其他用户]

每一组
[rwx] 读r写w执行x

r-- 代表仅有读权限,-代表无此权限

7 = 4读 + 2写 + 1执行

chmod 761 1.txt
给 属主7, 属组6, 其他1 的权限 在 1.txt 文件

chmod u+x 2.txt
给属主 赋予增加执行 在 2.txt

chmod u=rwx,g=rw,o=x 3.txt
给 属主 赋予rwx, 属组赋予rw, 其他x 在 3.txt

文件权限
更改文件/目录 权限 更改文件所有者
chown username file|directory
change own own 拥有者 更改文件所属组
chgrp groupname file|directory
change group 网络管理
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
# 查看主机ip地址
ifconfig

# systemctl

# systemctl 命令是用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态,在Centos7.0之前,使用的是service命令,在Centos7.0之后,使用systemctl命令来进行服务控制

# systemctl 操作 服务名
# systemctl start 服务名 开启服务
# systemctl stop 服务名 关闭服务
# systemctl status 服务名 显示服务状态
# systemctl enable 服务名 设置开机自启动
# systemctl disable 服务名 关闭开机自启动

# systemctl
systemctl start network
systemctl stop network
systemctl restart network
# 重启网络

# ctl = control

# 防火墙操作
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
systemctl status firewalld.service #查看防火墙状态


traceroute
追溯路由
traceroute [选项] 目的主机名或IP地址
traceroute 10.22.48.46

ping –c 5 www.aust.edu.cn

# netstat [选项]
netstat -nr
当前路由表的详细信息

# stat = statitics
# 统计

ifconfig 网络接口设备名 [up|down]
up 开
down 关
简写 ifup/ifdown
ifup 网络接口设备名

ifconfig
没有指定网络接口,
ifconfig将返回系统所有的网络设备的TCP/IP参数,包括回环网络接口的信息,
否则返回指定的接口参数

临时生效,临时改网络配置,如需永久,则改网络配置文件

修改域名服务器
vim /etc/resolv.conf
修改 nameserver

/etc/hosts
供本地使用的域名,IP映射表
/etc/hosts 优先级 高于 nameserver


route
后到的route拥有更高的优先级
route add | del -net 网络地址 netmask 网络掩码 [gw 网关地址] [dev 网络接口]

yum
yum install java
yum remove java

network文件
hostnamectl set-hostname xxxx
进程 进程 间 并发 分配资源 单位 程序 静态 指令集 进程是 动态 进程 是 程序 执行过程 调度(Schedule)
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
# 控制进程间优先级

nice
nice [-priority] 程序名

priority 优先级,取值 -20-19
nice -18
nice --18

优先级数值越小 越高
-20 优先级最高, 19 最低

默认优先级 0

ps = process show
ps -l
-l = list 以列表形式
验证nice命令执行结果
PID 进程ID
PPID = parent pid 父进程ID
ps -l

renice
在 RedHat Linux 9 系统中

如果进程启动后需重新 调整优先级,可以使用 renice 命令
renice -10 pid

父进程、子进程

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
ps

ps -f
所有进程信息

ps -a

系统中与 tty 相关的 所有进程 的信息
TTY: 该进程建立时 所对应的终端

? 表示 该进程不占用终端

ps -r
正在运行 进程

ps -u
面向用户的格式

ps -x
所有终端上的进程信息

ps aux | grep java
查询 名为java的进程

# 中断进程
前台进程
kill -9 pid
杀死进程

-9 立刻
在某些情况下,也可能无法杀死
ctrl + c

后台进程
kill

路径

1
2
3
4
5
6
路径
相对
绝对
只要第一个字符为 / 就一定为绝对
. 一个点 当前目录
.. 两个点 当前的上一级目录

通配符

通配符
    *
        任意(数量)字符或字符串
    ?
        任意一个字符
    PS
        注意:在Linux中以.句点打头的文件是隐藏文件,不能与*匹配
        若要匹配这些特殊符号,则用反斜杠 \ 转义
文件系统 按照 一定规则组织 的文件结构,用于管理机器上的文件和目录,使之能够被有效地存取。

相关知识

目录

/:Linux系统的根目录,包含Linux系统的所有目录和文件。 /etc:有关系统设备与管理的配置文件。 /sbin:存放系统启动时所需的运行程序。 /bin:该目录中含有常用的命令文件,不能包含子目录。 /boot:操作系统启动时的核心文件。 /usr/local:存放用户后期安装的应用程序文件。 /root:超级用户主目录。 /dev:接口设备文件目录,保存外围设备代号。 /mnt:设备文件的挂接点,默认有/mnt/cdrom和/mnt/floppy两个目录,分别用于挂载光驱和软驱。 /home:用户的宿主目录,通常将其设置在独立的分区。 vim 底行模式 :w 文件 另存为
:w 保存(ctrl + s)
:q 退出, 如果没有保存,不允许退出
:q! 强行退出, 不保存退出
:wq 保存并退出
:x 保存并退出 常用配置文件
1
2
修改域名服务器  修改 nameserver
vim /etc/resolv.conf
1
2
3
供本地使用的域名,IP映射表
/etc/hosts 优先级 高于 nameserver
/etc/hosts
查看内存占用情况相关命令 参考: 感谢帮助! Centos 7 查看内存占用情况相关命令_赵彦军-CSDN博客_centos查看内存使用情况 总结Linux下查看内存使用情况的多种方法 | 《Linux就该这么学》 linux 查看内存和硬盘(free -m|df -h)及释放缓存_cnds_li的博客-CSDN博客

1. top

top命令经常用来监控linux的系统状况,比如cpu、内存的使用
按 q 退出
1
top

2. free: 内存占用

1
free -m
主要看第一行 Mem 总共 919 MB , 使用了 624 MB , 剩余空闲 82 MB
1
free -h

3. df -h: 硬盘占用

1
df -h
查看哪个进程占用了端口 参考: CentOS查看进程端口号以及kill操作__世纪末的魔术师_的博客-CSDN博客_centos 查看进程端口 查看哪个进程占用了 5123 端口
1
netstat -apn  | grep 5123
可以看到,是Pid为 19912 进程为 java占用的 查询 19912 进程
1
ps aux | grep 19912
杀死 19912 进程
1
kill -9 19912
补充

查找所有nologin用户

1
2
查找所有nologin用户
grep nologin /etc/passwd

查找所有使用bash的用户

1
2
查找所有使用bash的用户
grep bash /etc/passwd

查询 名为java的进程

1
2
查询 名为java的进程
ps -aux | grep java

改变目录

1
2
3
4
5
6
当前用户主目录 /home/当前用户名
注意: 如果是root,用户,则 ~ 为 /root
cd ~

当前目录上两层
cd ../..

创建目录

1
2
3
4
5
6
7
8
创建文件夹/目录
mkdir targetDir

创建多级目录
mkdir -p new_dir/x/y/z

对新建目录 设置权限
mkdir -m

删除目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14

注意:目录被删除前,
1.必须为空,

2. 有对其父目录的写权限

一. 删除目录
rmdir targetDir



二. 递归删除目录 注意: 当子目录被递归删除后,此目录已经为空的话,也一并删除
rmdir -p targetDir # 等价于 rmdir --parents

    比如我的A目录下面只有一个B目录
rmdir -p A/B
此时会先删除B目录,删除完之后B目录之后,A目录下面在没有其他子目录和文件,就会把A目录也一并删除了
    比如我的A目录下面有B目录和C目录2个子目录
rmdir -p A/B
这是只删除B这个子目录,A目录不会被删除,因为下面还有一个C子目录

合并文件

1
2
合并 file1, file2 内容 到 file3
cat file1 file2 > file3

修改文件 的 修改时间

1
2
将上例创建的file1文件的最后修改时间修改为2008年12月28日
touch -m -t "12282008" file1 # 先月日再年

使用配置文件管理网络

网络接口的配置文件
> /etc/sysconfig/network-scripts/ifcfg-eth0
采用修改此文件的方法可以 同时解决网络重启和系统重启后网络配置失效的问题 DNS客户机配置文件
用于设置DNS服务器的 IP地址 及 DNS域名,还包括了主机的域名搜索顺序
域名解析器(resolver,一个根据主机名解析IP地址的库)
> /etc/resolv.conf
文件内容主要关键字 4 个
1
2
3
4
nameserver # 定义DNS服务器的IP地址
domain # 定义本地域名
search # 定义域名的搜索列表
sortlist # 对返回的域名进行排序
PS: domain 和 search 不能共存,若同存,后出现的会被使用(即覆盖)

su root 和 su - root 有什么区别?

su 后面不加用户是默认切到 root
su 是不改变当前变量
su - 是改变为切换到用户的变量
也就是说su只能获得root的执行权限,不能获得环境变量,而su -是切换到root并获得root的环境变量及执行权限

CentOS 安装 Java

查看云端目前支持安装的jdk版本
1
yum search java|grep jdk
安装
1
yum install -y java-11-openjdk
1
yum install -y java-1.8.0-openjdk
验证
1
java -version
通过搜索java文件,查找jdk默认安装目录
1
find / -name 'java'

SSH 连接后,在后台运行程序 - screen

默认 SSH 连接后,退出连接,此终端运行的程序(寄宿在此bash进程)也会中断, 解决:使用 screen 新建一个后台运行的终端,来运行后台程序 参考: Linux screen命令 | 菜鸟教程 Linux--screen远程必备 #screen常用命令-会话的创建、恢复、删除(&重命名删除)用法_夏普通-CSDN博客_screen 删除会话
1
yum install screen
1
apt-get install screen
创建 screen 终端
1
screen
显示已创建的screen终端
1
screen -ls
第一次 -ls Attached 说明正在被连接 第二次 -ls Detached 说明已经离开 重新连接离开的 screen 终端
1
screen -r 32016
这时就进入了离开的终端内,
新建窗口,并ssh连接,再次 ls 发现已被连接 删除会话 没有重命名的直接可以
1
screen -S session_name -X quit
重命名的,需要带上id删
1
screen -S id.session_name -X quit

cmd: tracert

tracert 也被称为Windows路由跟踪实用程序,在命令提示符(cmd)中使用tracert命令可以用于确定IP数据包访问目标时所选择的路径。

远程拷贝: scp

参考: CentOS scp远程拷贝 - 我是属车的 - 博客园 scp 对拷文件夹 和 文件夹下的所有文件 对拷文件并重命名_艾欧尼亚归我了-CSDN博客_scp 文件夹 scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,
其格式为
scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录
1
yum install openssh-clients -y
主要参数
1
2
3
4
-v  显示详细的连接进度
-P 指定远程主机的 sshd 端口号
-r 用于传送文件夹
-6 使用 IPv6 协议
示例
1
2
3
4
5
6
7
8
9
# 拷贝本地文件到远程主机
[root@localhost ~]# scp myhistory.txt root@192.168.31.20:/root
root@192.168.31.20's password:
myhistory.txt 100% 23KB 337.1KB/s 00:00

# 拷贝远程主机文件到本地
[root@localhost ~]# scp root@192.168.31.20:/etc/redhat-release /root
root@192.168.31.20's password:
redhat-release 100% 38 24.4KB/s 00:00

宝塔面板 数据迁移

1. 宝塔网站基础配置迁移 (FTP,网站信息)

使用宝塔插件: 宝塔配置备份 2.0 备份信息: FTP用户密码 网站配置相关信息 防火墙配置信息 面板日志信息 还原备份: 还原FTP、网站、防火墙配置和面板日志信息,如面板中已存在,则跳过此项。

2. 网站文件数据 迁移

在目标 VPS 执行, 将网站文件远程下载过来
1
2
3
yum install screen -y
screen -S copy-wwwroot
scp -r -v root@47.xxx.xxx.xx:/www/wwwroot /www

3. Nginx 配置文件 迁移

此步可省, 在宝塔插件配置备份中, 包含 Nginx 配置
1
2
3
4
5
6
7
/www/server/panel/vhost/nginx

# Directory protection rules
/www/server/panel/vhost/nginx/dir_auth/note.moeci.com/*.conf

# Nginx 访问限制
/www/server/pass/note.moeci.com/xxx.pass

4. Supervisor 子配置文件 迁移

1
/etc/supervisord.d

dpkg

参考: 如何通过dpkg -i或apt安装deb文件? 方式1
1
2
3
4
# 安装
sudo dpkg -i google-chrome*.deb
# 补齐依赖
sudo apt-get install -f -y
方式2 gdebi 可以识别缺少的依赖项 dpkg 它不能解决依赖关系
1
2
3
sudo apt update
sudo apt-get install gdebi-core
sudo gdebi google-chrome*.deb

Ubuntu/Debian 安装中文字体

1
2
apt install -y --force-yes --no-install-recommends fonts-wqy-microhei
apt install -y --force-yes --no-install-recommends ttf-wqy-zenhei
警告:
1
W: --force-yes is deprecated, use one of the options starting with --allow instead.
可以使用如下:
1
2
apt install -y --allow --no-install-recommends fonts-wqy-microhei
apt install -y --allow --no-install-recommends ttf-wqy-zenhei

执行多条命令

参考: bash 下执行多个命令时,; && || 操作符的区别 - 张疯牛 - 博客园 bash & && || ; & 使用方法_艾-小小雨的博客-CSDN博客
cmd1 ; cmd2 cmd1 和 cmd2 都会 被执行
cmd1 && cmd2 如果 cmd1 执行 成功 则执行 cmd2
cmd1 || cmd2 如果 cmd1 执行 失败 则执行 cmd2
& 一个或多个新行的顺序可能会出现在列表中,而不是一个分号来分隔命令。 如果一个命令是由控制操作符 & 结束时,shell在子shell后台执行命令。
shell不等待命令完成,返回状态是分离的0命令;是顺序执行的;每个shell等待命令依次结束。返回状态是最后执行的命令的退出状态。 AND和OR列表是由&&和分离多管线中的一个的序列||控制运营商,分别为。AND和OR序列与左结合执行。
command1 && command2
命令2被执行,命令1必须执行状态返回值为0
command1 || command2
命令2倍执行,命令1必须执行状态返回值为非0 参考 感谢帮助 ! Linux常用工具手册 | XUranus