Linux 基础入门

Linux 简介

Linux 是一种自由和开放源码的类 UNIX 操作系统。

Linux 英文解释为 Linux is not Unix。

Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux 的发行版

Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。

Linux

Linux 应用领域

今天各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,

通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合。

目前 Linux 不仅在家庭与企业中使用,并且在政府中也很受欢迎。

Linux vs Windows

比较WindowsLinux
界面界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。
驱动程序驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。
使用使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。图形界面使用简单,容易入门。文字界面,需要学习才能掌握。
学习系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。
软件每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。大部分软件都可以自由获取,同样功能的软件选择较少。

Linux 系统目录结构

你会看到如下图所示:

Linux 目录结构

树状目录结构:

Linux 目录结构

Linux 目录结构

以下是对这些目录的解释:

  • /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

pwd

定位当前所在位置

lhz@lhz-deepin:~$

用户lhz登录lhz-deepin这台主机上

~代表当前位置处于当前用户主目录或者称之为当前用户家目录

/home/lhz

ls

显示当前目录下的文件和目录

ls -l 以长格式显示文件和目录的详细信息,包括权限、所有者、大小、修改时间等

ls -a 显示所有文件和目录,包括隐藏文件,注意:在Linux下 以点开始的文件或者目录代表隐藏

ls -al 多个参数可以联合使用

ls 
ls -l
ls -l /
ls 
ls -a
ls -a -l
ls -al

Linux 命令 ls

clear

clear 清屏

ctrl + l 清屏
ctrl + u 清空当前行内容(撤销)

cd

change directory 目录切换
绝对路径与相对路径
相对路径参数:
./ 当前目录 在当前目录./可以省略
../ 父级目录
- 返回上一级目录 从哪儿来回哪儿去
~ 返回当前用户主目录

Linux 命令 cd 目录切换

[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]#

mkdir

# make directory 创建目录
mkdir /a

# 递归创建 -p
mkdir -p /b/bb

# 可以同时创建多个目录
mkdir -p /c/cc /d/dd /e/ee

Linux 命令 mkdir 创建目录

[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 /]#

rmdir

# 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' 失败: 目录非空

Linux 命令rmdir 删除空目录

touch

创建空文件

Linux 命令 touch 创建空文件

rm

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

Linux 命令  rm 删除文件

cp

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

Linux 命令 cp 复制

ln

软连接

ln -s 原文件路径 目标文件路径

注意:如果不加 -s 参数 代表硬链接 效果相当于 cp

ln -s a.txt aa.txt

mv

move 移动

实现类似 剪切和重命名的效果

当源文件和目标文件在同一目录下 表现效果如同重命名

cp -r  opt/maven/ ~/
mv ~/maven/ ~/Documents/
mv ~/Documents/maven/ ~/Documents/mvn

cat

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

more

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

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

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。

参数:

  • -q 隐藏文件名
  • -v 显示文件名
  • -c<数目> 显示的字节数。
  • -n<行数> 显示的行数。

tail

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

vi/vim

所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在。

但是目前我们使用比较多的是 vim 编辑器。

vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的文本处理器,不过功能已经很齐全了,但是还是有可以进步的地方。

vim 则可以说是程序开发者的一项很好用的工具。

vim 键盘图:

Linux 命令 vi vim

vi/vim 的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)。 这三种模式的作用分别是:

命令模式:

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

编辑模式|输入模式

在命令模式下按下i就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式
末行模式|底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式。

简单的说,我们可以将这三个模式想成底下的图标来表示:

Linux 命令 vi vim

vi/vim 按键说明

除了上面简易范例的 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移动到这个档案的最后一行(常用)
nGn 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg移动到这个档案的第一行,相当于 1G 啊! (常用)
nn 为数字。光标向下移动 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/gn1 与 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] 亦即是退格键) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd剪切游标所在的那一整行(常用),用 p/P 可以粘贴。
nddn 为数字。剪切光标所在的向下 n 行,例如 20dd 则是剪切 20 行(常用),用 p/P 可以粘贴。
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行的所有数据
d$删除游标所在处,到该行的最后一个字符
d0那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy复制游标所在的那一行(常用)
nyyn 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G复制游标所在行到第一行的所有数据
yG复制游标所在行到最后一行的所有数据
y0复制光标所在的那个字符到该行行首的所有数据
y$复制光标所在的那个字符到该行行尾的所有数据
p, Pp 为将已复制的数据在光标下一行贴上,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

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 启动这个进程的命令

管道符 |

grep

ps -aux | tomcat
kill -9 id

tar

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

主机名

  1. 查看主机名

    hostname
    
  2. 临时修改主机名

    hostname 主机名

    hostname lhz
    
  3. 永久修改主机名 命令方式

    hostnamectl set-hostname 主机名

    hostnamectl set-hostname lhz
    
  4. 永久修改主机名 修改配置文件方式

    修改 /etc/hostname

    vi /etc/hostname
    

日期时间

  1. 查看时间、日期

    date
    
  2. 修改时间

    语法:date -s “时:分:秒”

    date -s "17:20:30"
    
  3. 修改日期、时间

    语法:date -s “年-月-日 时:分:秒”

    date -s "2019-01-11 14:21:30"
    

注意:设置时间需要使用双引号括起来,否则会报错。

  1. hwclock -w  将时间写入BIOS,以免重启服务器后,设置的时间丢失。

    hwclock -w
    
  2. 查看系统时区

    date -R
    
  3. 修改时区为亚洲上海

    cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
  4. 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 用户:用户组 文件或目录

chown -R 用户:用户组 文件或目录

chmod

修改权限

chmod + 权限

chmod - 权限

chmod 数字

r 读取权限

w 编写权限

x 执行权限

u 所属用户g 文件所属用户所在用户组的其他用户o 其他用户
rrr
www
xxx
[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 ~]# 

rwx
421
[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 ~]# 

umask

新建目录 新建文件默认权限

[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 ~]# 

Linux 命令 umask

光驱自动挂载

创建光驱挂载目录

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

ifconfig
sudo ifconfig ens32 down
sudo ifconfig ens32 up

ip address

ip address

查看网络状态

systemctl status network

重启网络服务

systemctl restart network
service network restart

禁用网络服务

systemctl stop network
service network stop

启用网络服务

systemctl start network
service network start

修改IP地址

修改配置文件

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

nmcli

NetworkManager

常用的 nmcli 命令包括:

  • nmcli device show:显示所有网络接口及其状态。
  • nmcli connection show:列出所有网络连接及其状态。
  • nmcli connection add:创建新的网络连接。
  • nmcli connection modify:修改现有的网络连接。
  • nmcli connection delete:删除某个网络连接。
  • nmcli radio wifi on/off:开启或关闭 Wi-Fi 网络。
nmcli

显示系统网络状态

nmcli general status

要获得网络接口的简要摘要

nmcli device status
nmcli dev status

要列出系统上的所有活动接口

nmcli connection show
nmcli con show
nmcli connection show --active

仅显示 DEVICEDEVICE 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

Linux 命令 nmtui 网络管理

Linux 命令 nmtui 修改IP地址

Linux 命令 nmtui 修改IP地址

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 查看端口占用情况

Linux 查看端口占用情况可以使用 lsofnetstat 命令。


lsof

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

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命令及其详细解释:

  1. rpm -i <package.rpm>:安装一个RPM软件包。

    • 示例:rpm -i package.rpm
    • 多数情况下会与 v 和 h 配置使用 rpm -ivh package.rpm
  2. rpm -U <package.rpm>:升级一个已安装的RPM软件包。

    • 示例:rpm -U package.rpm
  3. rpm -e :卸载一个已安装的RPM软件包。

    • 示例:rpm -e package
  4. rpm -q :查询一个已安装的RPM软件包。

    • 示例:rpm -q package
  5. rpm -qa:列出所有已安装的RPM软件包。

    • 示例:rpm -qa
  6. rpm -ql :列出一个已安装的RPM软件包的文件列表。

    • 示例:rpm -ql package
  7. rpm -qd :列出一个已安装的RPM软件包的文档文件列表。

    • 示例:rpm -qd package
  8. rpm -qi :显示一个已安装的RPM软件包的详细信息。

    • 示例:rpm -qi package
  9. rpm -qf :查询一个文件属于哪个RPM软件包。

    • 示例:rpm -qf /path/to/file
  10. rpm -qc :列出一个已安装的RPM软件包的配置文件列表。

    • 示例:rpm -qc package
  11. rpm -qR :列出一个已安装的RPM软件包的依赖关系。

    • 示例:rpm -qR package
  12. rpm -q --whatprovides :查询提供某个功能的RPM软件包。

    • 示例:rpm -q --whatprovides /bin/ls
  13. rpm -v --verbose provide more detailed output。

    • 示例:rpm -q --whatprovides /bin/ls
  14. rpm -h --hash print hash marks as package installs (good with -v)。

    • 示例:rpm -q --whatprovides /bin/ls

这些命令可以帮助你在Linux系统上管理RPM软件包。请注意,上述命令中的"<package.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

Linux 命令 rpm包安装JDK

编译后的二进制文件

解压后直接运行

安装 JDK

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

安装 tomcat 并设置开机自启动

下载jdk和tomcat
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
解压jdk和tomcat并修改目录名称
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.pid文件本身不存在,设置之后,启动Tomcat会自动生成

vi /usr/local/tomcat-10/bin/catalina.sh
# 定位文件第140行找到 PRGDIR=`dirname "$PRG"` 并在该行下追加以下内容
CATALINA_PID="/usr/local/tomcat-10/bin/tomcat.pid"

Linux 命令 tomcat 开机自启动

配置环境变量
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

Linux 安装 tomcat

包管理器安装

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常用命令
  1. 列出所有可更新的软件清单命令:yum check-update

  2. 更新所有软件命令:yum update

  3. 仅安装指定的软件命令:yum install <package_name>

  4. 仅更新指定的软件命令:yum update <package_name>

  5. 列出所有可安裝的软件清单命令:yum list

  6. 删除软件包命令:yum remove <package_name>

  7. 查找软件包命令:yum search

  8. 清除缓存命令:

yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers

apt 常用命令

列出所有可更新的软件清单命令:sudo apt update

升级软件包:sudo apt upgrade

列出可更新的软件包及版本信息:apt list --upgradeable

升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade

安装指定的软件命令:sudo apt install <package_name>

安装多个软件包:sudo apt install <package_1> <package_2> <package_3>

更新指定的软件命令:sudo apt update <package_name>

显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>

删除软件包命令:sudo apt remove <package_name>

清理不再使用的依赖和库文件: sudo apt autoremove

移除软件包及配置文件: sudo apt purge <package_name>

查找软件包命令: sudo apt search

列出所有已安装的包:apt list --installed

列出所有已安装的包的版本信息:apt list --all-versions

在线安装 httpd

修改 yum 源
  1. 挂载光驱

    mkdir -p /mnt/cdrom 
    
    mount /dev/cdrom /mnt/cdrom
    
    vi /etc/fstab
    

    追加以下内容:

    /dev/cdrom  /mnt/cdrom   iso9660  defaults  0 0
    
  2. 手动修改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
    
  3. 使本地 yum 源 生效

    清空 yum 缓存

    yum clean all
    

    缓存本地yum源

    yum makecache
    

    查看yum仓库列表

    yum repolist
    

    查看本地源的所有软件

    yum list
    
包管理器在线安装 httpd

在线安装 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地址

Linux 安装 httpd apache2

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>

httpd 搭建局域网 yum 源
服务器ip客户端ip
192.168.171.128192.168.171.129

服务器端

  1. 挂载光驱

  2. 安装httpd服务

  3. httpd 发布 软件目录

    ln -s /mnt/cdrom /var/www/html/yum-centos-7
    

客户端

  1. 修改 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
    
  2. 使局域网 yum 源 生效

    清空 yum 缓存

    yum clean all
    

    缓存本地yum源

    yum makecache
    

    查看yum仓库列表

    yum repolist
    

    查看本地源的所有软件

    yum list
    

    安装 net-tools 和 vim

    yum -y install net-tools vim
    

源代码编译安装

修改 yum 源地址为 阿里云
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地址

Linux 源码编译安装 nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/109721.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的n省出口基地公共信息服务平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Spring Cloud Gateway + Knife4j 4.3 实现微服务网关聚合接口文档

目录 前言Spring Cloud 整合 Knife4jpom.xmlapplication.ymlSwaggerConfig.java访问单服务接口文档 Spring Cloud Gateway 网关聚合pom.xmlapplication.yml访问网关聚合接口文档 接口测试登录认证获取登录用户信息 结语源码 前言 youlai-mall 开源微服务商城新版本基于 Spring…

评估在线不平衡学习的PAUC

评估在线不平衡学习的PAUC 原始论文《Prequential AUC: properties of the area under the ROC curve for data streams with concept drift》 由于正常的AUC需要计算整体数据集上&#xff0c;每个数据的预测置信度的排名。那么我们首先要求我们的在线学习算法在进行预测时也返…

node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)

文章目录 ⭐前言⭐ 环境准备⭐ 实现过程⭐ mysql 配置⭐路由前的准备⭐账号注册生成token⭐账号登录生成token⭐token登录 ⭐ 自测过程截图⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于node实战——后端koa项目配置jwt实现登录注册&#xff08;n…

博客模板博客模板

xservices-bpm-6.2.1.1.jar 本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》作者 公众号&#xff1a;山峯草堂&#xff0c;非技术多篇文章&#xff0c;专注于天道酬勤的 Java 开发问题、中国国学、传统文化和代码爱…

智慧矿山AI算法助力护帮板支护监测,提升安全与效率

在智慧矿山AI算法系列中&#xff0c;护帮板支护监测是保障矿山安全和提高生产效率的重要环节。护帮板作为矿山支护体系中的重要组成部分&#xff0c;在矿山生产中起到了关键的作用。那么&#xff0c;护帮板在哪种状态下是正常打开的呢&#xff1f;本文将对此进行介绍。 护帮板的…

LeetCode热题100 240.搜索二维矩阵||

题目描述&#xff1a; 编写一个高效的算法来搜索 m*n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,2…

「实验记录」CS144 Lab0 networking warmup

文章目录 一、Motivation二、SolutionsS1 - Writing webgetS2 - An in-memory reliable byte stream 三、Results四、Source 一、Motivation 第一个小测试 webget 是想让我们体验并模拟一下在浏览器中键入 URL 后获得远程服务器传来的内容&#xff0c;这并没有太大的难度&…

【IDEA】设置sql提示

第一步&#xff1a;注入SQL语言 1.首先选择任意一条sql语句&#xff0c;右击&#xff0c;选择 ‘显示上下文操作’ 2.选择 ‘注入语言或引用’ 3. 往下翻&#xff0c;找到MySQL 第二步&#xff1a;配置MySQL数据库连接 1.首先点击侧边的数据库&#xff0c;再点击上面的加号 2…

OpenCV官方教程中文版 —— Hough 圆环变换

OpenCV官方教程中文版 —— Hough 圆环变换 前言Hough 圆环变换 前言 目标 • 学习使用霍夫变换在图像中找圆形&#xff08;环&#xff09; • 学习函数&#xff1a;cv2.HoughCircles() Hough 圆环变换 opencv_logo.png&#xff1a; # -*- coding: utf-8 -*- import cv2 …

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的PWM(脉冲宽度调制)应用

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的PWM&#xff08;脉冲宽度调制&#xff09;应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC…

设备完全有效生产率TEEP对生产制造企业有什么作用?

设备完全有效生产率&#xff08;Total Effective Efficiency of Production&#xff0c;简称TEEP&#xff09;是反映企业设备效率的一项重要指标&#xff0c;用于评估生产制造企业的设备利用率和生产效率。本文将从三个方面探讨TEEP的含义、计算方法以及对生产制造企业的作用。…

回收废品抢派单小程序开源版开发

回收废品派单抢派单小程序开源版开发 在这个废品回收抢单派单小程序开源版开发中&#xff0c;我们将构建一个专业且富有趣味性的平台&#xff0c;以深度的模式来重塑废品回收体验。 我们将提供一个会员注册功能&#xff0c;用户可以通过小程序授权注册和手机号注册两种方式快…

Leetcode—2558.从数量最多的堆取走礼物【简单】

2023每日刷题&#xff08;十二&#xff09; Leetcode—2558.从数量最多的堆取走礼物 大顶堆实现代码 void swap(int *a, int *b) {int tmp *a;*a *b;*b tmp; }void downAdjustHeap(int *heap, int low, int high) {int i low;int j 2 * i 1;while(j < high) {if(j …

气膜场馆里面噪声很大怎么解决?

随着气膜结构在各个领域的广泛应用&#xff0c;人们开始意识到在这些场馆内部&#xff0c;特别是在大型活动和展览中&#xff0c;噪声问题可能会变得相当严重。传统的气膜结构通常难以提供良好的声学环境&#xff0c;这对于参与者的舒适度和活动的质量构成了挑战。为了解决气膜…

国外怎么传大文件到国内,这款传输软件跨国企业必备

从国外传输文件到国内&#xff0c;这项任务常常充满了挑战。国际之间的距离、网络延迟、数据安全和文件大小限制等问题使得这个过程异常复杂。本文将深入剖析这些挑战&#xff0c;并说明一款优秀的跨国传输软件&#xff0c;如何能够成为解决这些问题的强有力工具。 国外传输文件…

ice和Dtls 传输的创建及1个简单的SFU转发实例

ice和Dtls 传输的创建及1个简单的SFU转发实例 licode中,webrtcconn基于dtlstransport 收发,而dtlstransport通过libnice作为底层。dtlstransport 使用了srtp加解密。文末给出一个简化的sfu实例的实现。对应的,看下M98的代码,更能理解为啥这么做: IceTransportInternal 与D…

一天收入500元的货拉拉运费差项目靠谱吗?

最近的货拉拉运费差项目有点火呀&#xff01;收费也不低&#xff0c;1680-16980的比比皆是。 这个项目去年我就在某些平台看到过&#xff0c;今天就跟大家详细聊聊这个项目&#xff0c;想入坑的不妨先看看这篇文章。 一&#xff1a;项目原理 有人叫它货拉拉搬砖项目&#xf…

檢測項目簡體字

某些項目可能要求代碼中不允許使用簡體字 安裝stcheck檢查 yarn add stcheck --dev在項目根目錄創建 st.config.json 文件 {"patterns": ["./**/*.(ts|js|tsx|jsx|vue|html)","!**/node_modules/**","!.git/**"],"gitignore&q…

RabbitMQ学习05

文章目录 交换机1.Exchanges1.1 概念1.2 类型1.3 无名exchange 2. 临时队列3. 绑定&#xff08;bings&#xff09;4. Fanout4.1 介绍 5.Direct exchange5.1 介绍5.2 多重绑定5.3 实战: 6. Topics6.1 规则6.2 实战 交换机 1.Exchanges 1.1 概念 RabbitMQ 消息传递模型的核心思…
最新文章