Linux 是一种自由和开放源码的类 UNIX 操作系统。
Linux 英文解释为 Linux is not Unix。
Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。
今天各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,
通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。
目前 Linux 不仅在家庭与企业中使用,并且在政府中也很受欢迎。
比较 | Windows | Linux |
---|---|---|
界面 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 | 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。 |
驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 | 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。 |
使用 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 | 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。 |
学习 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 |
软件 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |
你会看到如下图所示:
树状目录结构:
/bin:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
/boot:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
/lib:
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
/opt:
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
/selinux:
这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:
该目录存放一些服务启动之后需要提取的数据。
/sys:
这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
/usr:
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/usr/bin:
系统用户使用的应用程序。
/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:
内核源代码默认的放置目录。
/var:
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
值得提出的是 /bin、/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
命令 + 参数 + 路径
shutdown -h now
reboot
定位当前所在位置
lhz@lhz-deepin:~$
用户lhz登录lhz-deepin这台主机上
~代表当前位置处于当前用户主目录或者称之为当前用户家目录
/home/lhz
显示当前目录下的文件和目录
ls -l 以长格式显示文件和目录的详细信息,包括权限、所有者、大小、修改时间等
ls -a 显示所有文件和目录,包括隐藏文件,注意:在Linux下 以点开始的文件或者目录代表隐藏
ls -al 多个参数可以联合使用
ls
ls -l
ls -l /
ls
ls -a
ls -a -l
ls -al
clear 清屏
ctrl + l 清屏
ctrl + u 清空当前行内容(撤销)
change directory 目录切换
绝对路径与相对路径
相对路径参数:
./ 当前目录 在当前目录./可以省略
../ 父级目录
- 返回上一级目录 从哪儿来回哪儿去
~ 返回当前用户主目录
[root@lihaozhe ~]# cd /etc/selinux/
[root@lihaozhe selinux]# cd /etc/sysconfig/
[root@lihaozhe sysconfig]# ls
anaconda cpupower init kernel network-scripts selinux
authconfig crond ip6tables-config man-db rdisc sshd
cbq ebtables-config iptables-config modules readonly-root wpa_supplicant
chronyd firewalld irqbalance netconsole rsyslog
console grub kdump network run-parts
[root@lihaozhe sysconfig]# cd ./network-scripts/
[root@lihaozhe network-scripts]# ls
ifcfg-ens32 ifdown-ipv6 ifdown-Team ifup-eth ifup-post ifup-tunnel
ifcfg-lo ifdown-isdn ifdown-TeamPort ifup-ippp ifup-ppp ifup-wireless
ifdown ifdown-post ifdown-tunnel ifup-ipv6 ifup-routes init.ipv6-global
ifdown-bnep ifdown-ppp ifup ifup-isdn ifup-sit network-functions
ifdown-eth ifdown-routes ifup-aliases ifup-plip ifup-Team network-functions-ipv6
ifdown-ippp ifdown-sit ifup-bnep ifup-plusb ifup-TeamPort
[root@lihaozhe network-scripts]# cd ../
[root@lihaozhe sysconfig]# cd -
/etc/sysconfig/network-scripts
[root@lihaozhe network-scripts]# cd ~
[root@lihaozhe ~]# pwd
/root
[root@lihaozhe ~]# cd -
/etc/sysconfig/network-scripts
[root@lihaozhe network-scripts]#
# make directory 创建目录
mkdir /a
# 递归创建 -p
mkdir -p /b/bb
# 可以同时创建多个目录
mkdir -p /c/cc /d/dd /e/ee
[root@lihaozhe /]# mkdir /a
[root@lihaozhe /]# ls
a boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
[root@lihaozhe /]# mkdir /a/aa
[root@lihaozhe /]# mkdir /b/bb
mkdir: cannot create directory ‘/b/bb’: No such file or directory
[root@lihaozhe /]# mkdir -p /b/bb
[root@lihaozhe /]# mkdir -p /c/cc /d/dd /e/ee
[root@lihaozhe /]# ls
a bin c dev etc lib media opt root sbin sys usr
b boot d e home lib64 mnt proc run srv tmp var
[root@lihaozhe /]#
# remove directory 删除空目录
rmdir /home/lhz/a/a1
rmdir /home/lhz/b/b1 /home/lhz/b/b2
rmdir /home/lhz/b
rmdir /home/lhz/a
# rmdir: 删除 '/home/lhz/a' 失败: 目录非空
创建空文件
remove 删除文件
-f 删除文件不会提示确认信息
-r 递归删除
rm -rf 可以删除文件也可以递归删除目录
注意:禁止在root权限下使用 rm -rf /
touch b c
rm b
rm -f c
mkdir -p a/a1 a/a2
rm a
# rm: 无法删除'a': 是一个目录
rm -rf a
copy 拷贝
cp 源文件路径 目标文件路径
-v 显示拷贝过程
-r 递归复制目录及其子目录内的所有内容
mkdir a b
touch a/a.txt
cp a/a.txt b
# 目标文件与源文件同名 注意 如果存在目标文件存在同名文件则覆盖目标同名文件
cp -f a/a.txt b
cp a/a.txt b/b.txt
软连接
ln -s 原文件路径 目标文件路径
注意:如果不加 -s 参数 代表硬链接 效果相当于 cp
ln -s a.txt aa.txt
move 移动
实现类似 剪切和重命名的效果
当源文件和目标文件在同一目录下 表现效果如同重命名
cp -r opt/maven/ ~/
mv ~/maven/ ~/Documents/
mv ~/Documents/maven/ ~/Documents/mvn
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
参数说明:
-n 或 --number:由 1 开始对所有输出的行数编号。-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;
cat settings.xml
cat -n settings.xml
cat -b settings.xml
cat -s settings.xml
cat -sn settings.xml
cat -sb settings.xml
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,
而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,
而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
参数:
- -num 一次显示的行数
- -d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
- -l 取消遇见特殊字元 ^L时会暂停的功能
- -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
- -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
- -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
- -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
- -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
- +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
- +num 从第 num 行开始显示
- fileNames 欲显示内容的文档,可为复数个数
常用操作命令
- Enter 向下n行,需要定义。默认为1行
- Ctrl+F 向下滚动一屏
- 空格键 向下滚动一屏
- Ctrl+D 向下滚动半屏
- Ctrl+B 返回上一屏
- = 输出当前行的行号
- :f 输出文件名和当前行的行号
- V 调用vi编辑器
- !命令 调用Shell,并执行命令
- q 退出more
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。
参数说明:
- -b <缓冲区大小> 设置缓冲区的大小
- -e 当文件显示结束后,自动离开
- -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
- -g 只标志最后搜索的关键词
- -i 忽略搜索时的大小写
- -m 显示类似more命令的百分比
- -N 显示每行的行号
- -o <文件名> 将less 输出的内容在指定文件中保存起来
- -Q 不使用警告音
- -s 显示连续空行为一行
- -S 行过长时间将超出部分舍弃
- -x <数字> 将"tab"键显示为规定的数字空格
- /字符串:向下搜索"字符串"的功能
- ?字符串:向上搜索"字符串"的功能
- n:重复前一个搜索(与 / 或 ? 有关)
- N:反向重复前一个搜索(与 / 或 ? 有关)
- b 向上翻一页
- d 向后翻半页
- h 显示帮助界面
- Q 退出less 命令
- u 向前滚动半页
- y 向前滚动一行
- 空格键 滚动一页
- 回车键 滚动一行
- [pagedown]: 向下翻动一页
- [pageup]: 向上翻动一页
1.全屏导航
- ctrl + F - 向前移动一屏
- ctrl + B - 向后移动一屏
- ctrl + D - 向前移动半屏
- ctrl + U - 向后移动半屏
2.单行导航
- j - 下一行
- k - 上一行
3.其它导航
- G - 移动到最后一行
- g - 移动到第一行
- q / ZZ - 退出 less 命令
4.其它有用的命令
- v - 使用配置的编辑器编辑当前文件
- h - 显示 less 的帮助文档
- &pattern - 仅显示匹配模式的行,而不是整个文件
5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
- ma - 使用 a 标记文本的当前位置
- 'a - 导航到标记 a 处
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
参数:
- -q 隐藏文件名
- -v 显示文件名
- -c<数目> 显示的字节数。
- -n<行数> 显示的行数。
tail 命令可用于查看文件的内容,有一个常用的参数 **-f*F常用于查阅正在改变的日志文件。
tail -F filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
- -q, --quiet, --silent 从不输出给出文件名的首部
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
tail -F catalina.out
echo "我爱你中国"
echo "我爱你中国" > love.txt
echo "亲爱的母亲" > love.txt
echo "" > love.txt
echo "我爱你中国" > love.txt
echo "亲爱的母亲" >> love.txt
所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的文本处理器,不过功能已经很齐全了,但是还是有可以进步的地方。
vim 则可以说是程序开发者的一项很好用的工具。
vim 键盘图:
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
按ESC键可随时退出底线命令模式。
简单的说,我们可以将这三个模式想成底下的图标来表示:
除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。
yy 拷贝光标所在行
nyy 光标所在行向下拷贝n行 包括光标所在行
p 粘贴yy的内容
数字n p粘贴n次yy的内容
移动光标的方法 | |
---|---|
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 或 :%s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) |
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
删除、复制与贴上 | |
x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd | 剪切游标所在的那一整行(常用),用 p/P 可以粘贴。 |
ndd | n 为数字。剪切光标所在的向下 n 行,例如 20dd 则是剪切 20 行(常用),用 p/P 可以粘贴。 |
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 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出) |
ZQ | 不保存,强制退出。效果等同于 :q!。 |
: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↓』即可。
ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
ps -aux 是以BSD方式显示
a 显示所有用户的进程(show processes for all users)
u 显示用户(display the process’s user/owner)
x 显示无控制终端的进程(also show processes not attached to a terminal)
ps -ef 是以System V方式显示,该种方式比BSD方式显示的多
e 显示所有用户的进程(all processes)此参数的效果和指定"a"参数相同 f 用ASCII字符显示树状结构,
表达程序间的相互关系(ASCII art forest)
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- USER: 进程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的记忆体使用率
- VSZ: 占用的虚拟记忆体大小
- RSS: 占用的记忆体大小
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
ps -aux
1、USER 哪个用户启动了这个命令
2、PID 进程ID
3、CPU CPU占用率
4、MEM 内存使用量
5、VSZ 如果一个程序完全驻留在内存的话需要占用多少内存空间
6、RSS 当前实际占用了多少内存
7、TTY: 终端的次要装置号码 (minor device number of tty)
8、STAT 进程当前的状态(“S”:中断 sleeping,进程处在睡眠状态,表明这些进程在等待某些事件发生–可能是用户输入或者系统资源的可用性;“D”:不可中断 uninterruptible sleep;“R”:运行 runnable;“T”:停止 traced or stopped;“Z”:僵死 a defunct zombie process)
9、START 启动命令的时间点
10、TIME 进程执行起到现在总的CPU暂用时间 11、COMMAND 启动这个进程的命令
ps -ef
1、UID 用户号
2、PID 进程ID
3、PPID 父进程号
4、C CPU占用率
5、TTY 终端的次要装置号码 (minor device number of tty)
6、TIME 进程执行起到现在总的CPU占用时间
7、COMMAND 启动这个进程的命令
ps -aux | tomcat
kill -9 id
c 创建新的 tar 文件
f 指定文件名称
v 显示详细过程
t 不解压查看tar包的内容
r 追加文件
x 解包 tar 文件
z 通过gzip压缩或解压
j 通过bzip2命令压缩或解压
C 指定解压路径
touch a.txt b.txt c.txt
tar -cvf aa.tar a.txt b.txt
tar -tvf aa.tar
tar -rvf aa.tar c.txt
rm -f *.txt
tar -xvf aa.tar
tar -zcvf aa.tar.gz a.txt b.txt c.txt
rm -f *.txt
tar -zxvf aa.tar.gz
mkdir lihaozhe
tar -zxvf aa.tar.gz -C lihaozhe
tar -zcvf aa.tar.bz2 a.txt b.txt c.txt
rm -rf lihaozhe & mkdir lihaozhe
tar -jxvf aa.tar.bz2 -C lihaozhe
zip | unzip
zip aa.zip a.txt b.txt c.txt
rm -f *.txt
unzip aa.zip
查看主机名
hostname
临时修改主机名
hostname 主机名
hostname lhz
永久修改主机名 命令方式
hostnamectl set-hostname 主机名
hostnamectl set-hostname lhz
永久修改主机名 修改配置文件方式
修改 /etc/hostname
vi /etc/hostname
查看时间、日期
date
修改时间
语法:date -s “时:分:秒”
date -s "17:20:30"
修改日期、时间
语法:date -s “年-月-日 时:分:秒”
date -s "2019-01-11 14:21:30"
注意:设置时间需要使用双引号括起来,否则会报错。
hwclock -w 将时间写入BIOS,以免重启服务器后,设置的时间丢失。
hwclock -w
查看系统时区
date -R
修改时区为亚洲上海
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
centos7 新增
timedatectl
timedatectl set-timezone Asia/Shanghai
新建用户组
groupadd bigdata
tail -3 /etc/group
删除用户组
groupdel bigdata
tail -3 /etc/group
修改用户组名称
groupadd java
tail -3 /etc/group
groupmod -n 新用户组名称 旧用户组名称
groupmod -n web java
tail -3 /etc/group
-g 指定 用户组id
groupadd -g 10001 bigdata
tail -3 /etc/group
groupmod -g 10002 bigdata
tail -3 /etc/group
groupmod -g 10003 -n java bigdata
tail -3 /etc/group
新建用户
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
useradd bigdata
tail -3 /etc/passwd
tail -3 /etc/group
新建用户 指定 用户主目录路径
useradd java -d /javaweb
tail -3 /etc/passwd
tail -3 /etc/group
删除用户 默认不会删除用户主目录
userdel bigdata
tail -3 /etc/passwd
tail -3 /etc/group
ls /home
删除用户 连同 用户主目录一起删除
userdel -r java
tail -3 /etc/passwd
tail -3 /etc/group
ls /
-g 指定 用户所属的用户组
-G 指定 用户所属的附加用户组
groupadd bigdata
groupadd java
groupadd web
useradd user01 -g java -G bigdata,web
useradd user02 -g bigdata -G java,web
tail -3 /etc/group
bigdata:x:1000:user01
java:x:1001:user02
web:x:1002:user01,user02
修改用户密码 su 用户名
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。
[root@lihaozhe ~]# passwd user01
Changing password for user user01.
New password:
BAD PASSWORD: The password is shorter than 7 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@lihaozhe ~]#
锁定用户
passwd -l user01
[root@lihaozhe ~]# passwd -l user01
Locking password for user user01.
passwd: Success
[root@lihaozhe ~]#
解锁用户
passwd -u user01
[root@lihaozhe ~]# passwd -u user01
Unlocking password for user user01.
passwd: Success
[root@lihaozhe ~]#
[root@lihaozhe ~]# passwd -u user01
Unlocking password for user user01.
passwd: Success
[root@lihaozhe ~]#
groupadd nginx
# -M 不创建用户主目录
# -s 指定用户的登录Shell
useradd nginx -g nginx -M -s /sbin/nologin
uid
id 用户名 查看用户信息
id 用户uid 查看用户信息
id user01
id 1000
[root@lihaozhe ~]# id user01
uid=1000(user01) gid=1001(java) groups=1001(java),1000(bigdata),1002(web)
[root@lihaozhe ~]# id 1000
uid=1000(user01) gid=1001(java) groups=1001(java),1000(bigdata),1002(web)
[root@lihaozhe ~]#
创建用户并指定uid
useradd -u 用户id 用户名
useradd -u 20003 user03
修改用户名
usermod -l 新用户名 旧用户名
usermod -l user05 user03
修改用户 uid
usermod -u 用户id 用户名
usermod -u 20005 user05
修改用户主目录
usermod -d 户主目录 用户名
usermod -d /user user05
tail -3 /etc/group
groupmod -g 10003 -n java bigdata
tail -3 /etc/group
修改所属权限
chown 用户:用户组 文件或目录
chown -R 用户:用户组 文件或目录
修改权限
chmod + 权限
chmod - 权限
chmod 数字
r 读取权限
w 编写权限
x 执行权限
u 所属用户 | g 文件所属用户所在用户组的其他用户 | o 其他用户 |
---|---|---|
r | r | r |
w | w | w |
x | x | x |
[root@lihaozhe ~]# chmod u+x /a
[root@lihaozhe ~]# ls -l /a
-rwxr--r--. 1 root root 0 Oct 25 15:07 /a
[root@lihaozhe ~]# chmod u-x /a
[root@lihaozhe ~]# ls -l /a
-rw-r--r--. 1 root root 0 Oct 25 15:07 /a
[root@lihaozhe ~]# chmod g+x /a
[root@lihaozhe ~]# ls -l /a
-rw-r-xr--. 1 root root 0 Oct 25 15:07 /a
[root@lihaozhe ~]# chmod g-x /a
[root@lihaozhe ~]# chmod g+w /a
[root@lihaozhe ~]# ls -l /a
-rw-rw-r--. 1 root root 0 Oct 25 15:07 /a
[root@lihaozhe ~]# chmod o+w /a
[root@lihaozhe ~]# ls -l /a
-rw-rw-rw-. 1 root root 0 Oct 25 15:07 /a
[root@lihaozhe ~]#
r | w | x |
---|---|---|
4 | 2 | 1 |
[root@lihaozhe ~]# ls -l /a
-rw-rw-rw-. 1 root root 0 Oct 25 15:07 /a
[root@lihaozhe ~]# chmod 755 /a
[root@lihaozhe ~]# ls -l /a
-rwxr-xr-x. 1 root root 0 Oct 25 15:07 /a
[root@lihaozhe ~]#
新建目录 新建文件默认权限
[root@lihaozhe ~]# umask
0022
[root@lihaozhe ~]#
umask 0022
新建文件 666-022=644
新建目录 777-022=755
umask 0002
[root@lihaozhe ~]# ls
anaconda-ks.cfg
[root@lihaozhe ~]# mkdir a
[root@lihaozhe ~]# touch aa
[root@lihaozhe ~]# ls -l
total 4
drwxr-xr-x. 2 root root 6 Oct 26 08:03 a
-rw-r--r--. 1 root root 0 Oct 26 08:03 aa
-rw-------. 1 root root 1326 Oct 25 14:33 anaconda-ks.cfg
[root@lihaozhe ~]# umask
0022
[root@lihaozhe ~]# umask 0002
[root@lihaozhe ~]# touch bb
[root@lihaozhe ~]# mkdir b
[root@lihaozhe ~]# ls -l
total 4
drwxr-xr-x. 2 root root 6 Oct 26 08:03 a
-rw-r--r--. 1 root root 0 Oct 26 08:03 aa
-rw-------. 1 root root 1326 Oct 25 14:33 anaconda-ks.cfg
drwxrwxr-x. 2 root root 6 Oct 26 08:06 b
-rw-rw-r--. 1 root root 0 Oct 26 08:06 bb
[root@lihaozhe ~]# umask 0022
[root@lihaozhe ~]#
mkdir -p /mnt/cdrom
但是系统重启后挂载失效
mount /dev/cdrom /mnt/cdrom
取消光驱挂载
umount /mnt/cdrom
临时挂载光驱
mount /dev/cdrom /mnt/cdrom
编写配置文件/etc/fstab
vi /etc/fstab
追加以下内容:
/dev/cdrom /mnt/cdrom iso9660 defaults 0 0
完整内容如下:
ifconfig
sudo ifconfig ens32 down
sudo ifconfig ens32 up
ip address
查看网络状态
systemctl status network
重启网络服务
systemctl restart network
service network restart
禁用网络服务
systemctl stop network
service network stop
启用网络服务
systemctl start network
service network start
修改配置文件
cd /etc/sysconfig/network-scripts/
ls
vi ifcfg-ens32
vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="61b382ca-cdf2-47dc-b9b4-01ea57c805d7"
DEVICE="ens32"
ONBOOT="yes"
IPADDR="192.168.171.130"
PREFIX="24"
GATEWAY="192.168.171.2"
DNS1="192.168.171.2"
IPV6_PRIVACY="no"
systemctl restart network
NetworkManager
常用的 nmcli 命令包括:
nmcli
显示系统网络状态
nmcli general status
要获得网络接口的简要摘要
nmcli device status
nmcli dev status
要列出系统上的所有活动接口
nmcli connection show
nmcli con show
nmcli connection show --active
仅显示
DEVICE
和DEVICE TYPE
nmcli -f DEVICE,TYPE device
p(pretty)选项,您可以以一种更易于阅读的格式显示输出,其中值和标题可以很好地对齐。
nmcli -p device
添加静态IP地址
nmcli con add type ethernet con-name "static-ip" ifname ens32 ipv4.addresses 192.168.171.128/24 gw4 192.168.172.2
禁用dhcp
nmcli con add type ethernet con-name "static-ip" ifname ens32 ipv4.method manual ipv4.addresses 192.168.171.128/24 gw4 192.168.172.2
配置DNS
nmcli con mod static-ip ipv4.dns "223.5.5.5"
激活连接
nmcli con up static-ip ifname ens32
删除静态IP地址
nmcli con del type ethernet con-name "static-ip" ifname ens32 ipv4.addresses 192.168.171.128/24
禁用网络连接
nmcli con down id "static-ip" ifname ens32
启动网络连接
nmcli con up id "static-ip" ifname ens32
nmcli con up id "static-ip"
修改静态IP地址
nmcli con mod ens32 ipv4.method manual ipv4.addresses 192.168.171.128/24 gw4 192.168.172.2
nmcli con mod ens32 ipv4.dns "223.5.5.5"
nmcli con up ens32
图形化配置
nmtui
nmcli connection show
cd /etc/NetworkManager/system-connections
sudo cat "有线连接 1.nmconnection"
nmcli connection delete "有线连接 1"
sudo systemctl restart NetworkManager
nmcli connection add type ethernet con-name ens33 ifname ens33 connection.autoconnect yes
sudo diff "有线连接 1.nmconnection" ens33.nmconnection
nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.95.95/24 ipv4.gateway 192.168.95.1 ipv4.dns 192.168.95.1 connection.autoconnect yes
nmcli connection up ens33
[connection]
id=有线连接
uuid=967d6337-e89f-936f-b444-777b34d84ac3
type=ethernet
permissions=
timestamp=1652408881
[ethernet]
mac-address-blacklist=
[ipv4]
address1=192.168.161.121/24,192.168.161.1
dns=223.5.5.5;114.114.114.114;
dns-search=
ignore-auto-dns=true
method=manual
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto
[connection]
id=有线连接
uuid=967d6337-e89f-936f-b444-777b34d84ac3
type=ethernet
permissions=
timestamp=1652408933
[ethernet]
mac-address-blacklist=
[ipv4]
dns-search=
method=auto
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto
Linux 查看端口占用情况可以使用 lsof 和 netstat 命令。
lsof(list open files)是一个列出当前系统打开文件的工具。
lsof 查看端口占用语法格式:
lsof -i:端口号
多 lsof 的命令如下:
lsof -i:8080:查看8080端口占用
lsof abc.txt:显示开启文件abc.txt的进程
lsof -c abc:显示abc进程现在打开的文件
lsof -c -p 1234:列出进程号为1234的进程所打开的文件
lsof -g gid:显示归属gid的进程情况
lsof +d /usr/local/:显示目录下被进程开启的文件
lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
lsof -d 4:显示使用fd为4的进程
lsof -i -U:显示所有打开的端口和UNIX domain文件
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
netstat 查看端口占用语法格式:
netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
参数说明:
-a或–all 显示所有连线中的Socket。
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
-c或–continuous 持续列出网络状态。
-C或–cache 显示路由器配置的快取信息。
-e或–extend 显示网络其他相关信息。
-F或–fib 显示路由缓存。
-g或–groups 显示多重广播功能群组组员名单。
-h或–help 在线帮助。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的Socket。
-M或–masquerade 显示伪装的网络连线。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o或–timers 显示计时器。
-p或–programs 显示正在使用Socket的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistics 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
-V或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定"-A unix"参数相同。
–ip或–inet 此参数的效果和指定"-A inet"参数相同。
rpm redhat package manager
deb debain package
sudo dpkg -i wps-office_11.1.0.11704_amd64.deb
dpkg -I 查看安装包相信信息
dpkg -c 查看安装安装后的位置dpkg -P来卸载软件。
因为dpkg --remove只是删除安装的文件,但不删除配置文件。
而dpkg --purge则安装文件和配置文件都删除。
RPM(Red Hat Package Manager)是一种用于在Linux系统上进行软件包管理的工具。它可以用于安装、升级、查询和删除软件包。下面是一些常用的RPM命令及其详细解释:
rpm -i
:安装一个RPM软件包。
- 示例:rpm -i package.rpm
- 多数情况下会与 v 和 h 配置使用 rpm -ivh package.rpm
rpm -U
:升级一个已安装的RPM软件包。
- 示例:rpm -U package.rpm
rpm -e :卸载一个已安装的RPM软件包。
- 示例:rpm -e package
rpm -q :查询一个已安装的RPM软件包。
- 示例:rpm -q package
rpm -qa:列出所有已安装的RPM软件包。
- 示例:rpm -qa
rpm -ql :列出一个已安装的RPM软件包的文件列表。
- 示例:rpm -ql package
rpm -qd :列出一个已安装的RPM软件包的文档文件列表。
- 示例:rpm -qd package
rpm -qi :显示一个已安装的RPM软件包的详细信息。
- 示例:rpm -qi package
rpm -qf :查询一个文件属于哪个RPM软件包。
- 示例:rpm -qf /path/to/file
rpm -qc :列出一个已安装的RPM软件包的配置文件列表。
- 示例:rpm -qc package
rpm -qR :列出一个已安装的RPM软件包的依赖关系。
- 示例:rpm -qR package
rpm -q --whatprovides :查询提供某个功能的RPM软件包。
- 示例:rpm -q --whatprovides /bin/ls
rpm -v --verbose provide more detailed output。
- 示例:rpm -q --whatprovides /bin/ls
rpm -h --hash print hash marks as package installs (good with -v)。
- 示例:rpm -q --whatprovides /bin/ls
这些命令可以帮助你在Linux系统上管理RPM软件包。请注意,上述命令中的"
“和”"应替换为实际的软件包名称或文件名。
安装
rpm -qa | grep jdk
curl https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
rpm -ivh jdk-21_linux-x64_bin.rpm
rpm -qa | grep jdk
java -version
卸载
rpm -qa | grep jdk
rpm -e --nodeps jdk-21-21.0.1-12.x86_64
xargs -n1 每次传入一个参数
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa | grep jdk
java -version
解压后直接运行
curl https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
cd /usr/local/
ls
mv jdk-21.0.1 jdk-21
printenv
vi /etc/profile.d/my_env.sh
export JAVA_HOME=/usr/local/jdk-21
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile.d/my_env.sh
curl https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
curl https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.15/bin/apache-tomcat-10.1.15.tar.gz
tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
tar -zxvf apache-tomcat-10.1.15.tar.gz -C /usr/local/
mv /usr/local/jdk-21.0.1/ /usr/local/jdk-21
mv /usr/local/apache-tomcat-10.1.15 /usr/local/tomcat-10
其中tomcat.pid文件本身不存在,设置之后,启动Tomcat会自动生成
vi /usr/local/tomcat-10/bin/catalina.sh
# 定位文件第140行找到 PRGDIR=`dirname "$PRG"` 并在该行下追加以下内容
CATALINA_PID="/usr/local/tomcat-10/bin/tomcat.pid"
vi /etc/profile.d/my_env.sh
export JAVA_HOME=/usr/local/jdk-21
export CATALINA_BASE=/usr/local/tomcat-10
export CATALINA_HOME=/usr/local/tomcat-10
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_BASE/bin:$CATALINA_HOME/bin
source /etc/profile.d/my_env.sh
cd /usr/lib/systemd/system
vi tomcat-10.service
[Unit]
Description=tomcat-server
After=network.target
[Service]
Type=forking
# 因为服务启动时,是不会读取全局变量的(/etc/profile),因此全局变量中配置的属性是读取不到的需要注意。
# 所以需要在这里配置Tomcat 启动需要的JDK,指定JDK路径
Environment="JAVA_HOME=/usr/local/jdk-21"
# 此文件是在第一步时配置的,如果type是后台运行,建议将此属性加上,指定pid。
PIDFile=/usr/local/tomcat-10/bin/tomcat.pid
# 需要注意的就是下面这一行,如果路径错了,那就无法自动启动,下面会有图文解释
# 整个 ExecStart 脚本,相当于是让系统开机时自动帮你在终端输入等号后面的命令
ExecStart=/usr/local/tomcat-10/bin/startup.sh
ExecReload=/usr/local/tomcat-10/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start tomcat-10.service
systemctl enable tomcat-10.service
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
reboot
http://服务器IP地址:8080
yum
apt
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
列出所有可更新的软件清单命令:yum check-update
更新所有软件命令:yum update
仅安装指定的软件命令:yum install
仅更新指定的软件命令:yum update
列出所有可安裝的软件清单命令:yum list
删除软件包命令:yum remove
查找软件包命令:yum search
清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
列出所有可更新的软件清单命令:sudo apt update
升级软件包:sudo apt upgrade
列出可更新的软件包及版本信息:apt list --upgradeable
升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade
安装指定的软件命令:sudo apt install
安装多个软件包:sudo apt install
更新指定的软件命令:sudo apt update
显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show
删除软件包命令:sudo apt remove
清理不再使用的依赖和库文件: sudo apt autoremove
移除软件包及配置文件: sudo apt purge
查找软件包命令: sudo apt search
列出所有已安装的包:apt list --installed
列出所有已安装的包的版本信息:apt list --all-versions
挂载光驱
mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
vi /etc/fstab
追加以下内容:
/dev/cdrom /mnt/cdrom iso9660 defaults 0 0
手动修改CentOS-Base.repo
备份 yum 源配置文件
mv /etc/yum.repos.d/ /etc/yum.repos.d.bak
重新创建 yum 源配置文件目录
mkdir -p /etc/yum.repos.d
进入yum源配置文件所在位置
cd /etc/yum.repos.d/
编辑 CentOS-Base.repo
vi CentOS-Base.repo
[local_server]
name=mylocal_server
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
使本地 yum 源 生效
清空 yum 缓存
yum clean all
缓存本地yum源
yum makecache
查看yum仓库列表
yum repolist
查看本地源的所有软件
yum list
在线安装 httpd
yum -y install httpd net-tools vim
开启 httpd 服务
systemctl start httpd
关闭 httpd 服务
systemctl stop httpd
重启 httpd 服务
systemctl restart httpd
重载 httpd 服务
systemctl reload httpd
开机自启动 httpd 服务
systemctl enable httpd
开机禁用 httpd 服务
systemctl disable httpd
防火墙开放端口
–zone 作用域
–add-port=80/tcp 添加端口
–permanent 永久生效
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
http://服务器IP地址
cd /var/www/html
vim demo.html
DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>李昊哲title>
head>
<body>
<h1>铭记历史,勿忘国耻h1>
body>
html>
服务器ip | 客户端ip |
---|---|
192.168.171.128 | 192.168.171.129 |
服务器端
挂载光驱
安装httpd服务
httpd 发布 软件目录
ln -s /mnt/cdrom /var/www/html/yum-centos-7
客户端
修改 yum 源 配置文件
备份 yum 源配置文件
mv /etc/yum.repos.d/ /etc/yum.repos.d.bak
重新创建 yum 源配置文件目录
mkdir -p /etc/yum.repos.d
进入yum源配置文件所在位置
cd /etc/yum.repos.d/
编辑 CentOS-Base.repo
vi CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://192.168.171.128/yum-centos-7/
enabled=1
gpgcheck=0
使局域网 yum 源 生效
清空 yum 缓存
yum clean all
缓存本地yum源
yum makecache
查看yum仓库列表
yum repolist
查看本地源的所有软件
yum list
安装 net-tools 和 vim
yum -y install net-tools vim
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum -y update
yum -y install gcc gcc-c++ make cmake zlib zlib-devel openssl openssl-devel pcre-devel vim net-tools man wget tar
groupadd nginx
useradd nginx -g nginx -s /sbin/nologin -M
下载
wget https://nginx.org/download/nginx-1.24.0.tar.gz
解压
tar -zxvf nginx-1.24.0.tar.gz
进入nginx源代码目录
cd nginx-1.24.0
预编译
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_stub_status_module --with-http_ssl_module \
--with-http_realip_module --with-http_gzip_static_module \
--with-file-aio --with-http_realip_module
验证 是否 成功
echo $?
编译
make -j4
验证 是否 成功
echo $?
安装
make -j4 install
验证 是否 成功
echo $?
ls 以下为验证程序步骤可忽略
/usr/local/nginx/sbin/nginx -v
/usr/local/nginx/sbin/nginx -t
# 启动nginx
/usr/local/nginx/sbin/nginx
# 重新载入配置文件
/usr/local/nginx/sbin/nginx -s reload
# 快速关闭 Nginx
/usr/local/nginx/sbin/nginx -s stop
# 关闭Nginx
/usr/local/nginx/sbin/nginx -s quit
cd /usr/lib/systemd/system/
vim nginx.service
[Unit]
Description=nginx
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPost=/bin/sleep 0.1
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# systemctl start|stop|reload|restart|status nginx.service
# 重新加载服务文件
systemctl daemon-reload
# 启动 nginx 服务
systemctl start nginx.service
# 开机自启:
systemctl enable nginx.service
# 关闭开机自启:
systemctl disable nginx.service
–zone 作用域
–add-port=80/tcp 添加端口
–permanent 永久生效
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
http://服务器IP地址