admin 管理员组

文章数量: 887021

Linux大全

  • 一、Linux上下五千年
    • 1.1 历史长河
    • 1.2 下载安装
    • 1.3 目录介绍
    • 1.4 网络配置
      • 1.4.1 三种网络模式
      • 1.4.2 ifconfig
      • 1.4.3 ping
      • 1.4.4 修改 IP 地址
      • 1.4.5 主机名称
      • 1.4.6 远程登录
    • 1.5 系统管理
      • 1.5.1 Linux 中的进程和服务
      • 1.5.2 systemctl
      • 1.5.3 systemctl 设置后台服务的自启配置
      • 1.5.4 系统运行级别
      • 1.5.5 防火墙
      • 1.5.6 关机
    • 1.6 软件管理
      • 1.6.1 RPM
      • 1.6.2 YUM
  • 二、Linux命令大汇总
    • 2.1 帮助命令
      • 2.1.1 man 获得帮助信息
      • 2.1.2 help 获得 shell 内置命令的帮助信息
      • 2.1.3 ctrl + c 停止进程
      • 2.1.4 ctrl+l 清屏,等同于 clear
      • 2.1.5 reset 彻底清屏
      • 2.1.6 tab键 提示(更重要的是可以防止敲错)
      • 2.1.7 上下键 查找执行过的命令
    • 2.2 文件目录类
      • 2.2.1 pwd 显示当前工作目录的绝对路径
      • 2.2.2 ls 列出目录的内容
      • 2.2.3 cd 切换目录
      • 2.2.4 mkdir 创建一个新的目录
      • 2.2.5 rmdir 删除一个空的目录
      • 2.2.6 touch 创建空文件
      • 2.2.7 cp 复制文件或目录
      • 2.2.8 rm 删除文件或目录
      • 2.2.9 mv 移动文件与目录或重命名
      • 2.2.10 cat 查看文件内容
      • 2.2.11 more 文件内容分屏查看器
      • 2.2.12 less 分屏显示文件内容
      • 2.2.13 echo 输出内容到控制台
      • 2.2.14 head 显示文件头部内容
      • 2.2.15 tail 输出文件尾部内容
      • 2.2.16 > 输出重定向和 >> 追加
      • 2.2.17 ln 软链接
      • 2.2.18 history 查看已经执行过历史命令
    • 2.3 时间日期类
      • 2.3.1 date 显示当前时间
      • 2.3.2 date 显示非当前时间
      • 2.3.3 date 设置系统时间
      • 2.3.4 cal 查看日历
    • 2.4 用户管理命令
      • 2.4.1 useradd 添加新用户
      • 2.4.2 passwd 设置用户密码
      • 2.4.3 id 查看用户是否存在
      • 2.4.4 cat /etc/passwd 查看创建了哪些用户
      • 2.4.5 su 切换用户
      • 2.4.6 userdel 删除用户
      • 2.4.7 who 查看登录用户信息
      • 2.4.8 sudo 设置普通用户具有 root 权限
      • 2.4.9 usermod 修改用户
    • 2.5 用户组管理命令
      • 2.5.1 groupadd 新增组
      • 2.5.2 groupdel 删除组
      • 2.5.3 groupmod 修改组
      • 2.5.4 cat /etc/group 查看创建了哪些组
    • 2.6 文件权限类
      • 2.6.1 文件属性
      • 2.6.2 chmod 改变权限
      • 2.6.3 chown 改变所有者
      • 2.6.4 chgrp 改变所属组
    • 2.7 搜索查找类
      • 2.7.1 find 查找文件或者目录
      • 2.7.2 locate 快速定位文件路径
      • 2.7.3 grep 过滤查找及“|”管道符
    • 2.8 压缩和解压类
      • 2.8.1 gzip/gunzip 压缩
      • 2.8.2 zip/unzip 压缩
      • 2.8.3 tar 打包
    • 2.9 磁盘查看和分区类
      • 2.9.1 du 查看文件和目录占用的磁盘空间
      • 2.9.2 df 查看磁盘空间使用情况
      • 2.9.3 lsblk 查看设备挂载情况
      • 2.9.4 mount/umount 挂载/卸载
      • 2.9.5 fdisk 分区
    • 2.10 进程管理类
      • 2.10.1 ps 查看当前系统进程状态
      • 2.10.2 kill 终止进程
      • 2.10.3 pstree 查看进程树
      • 2.10.4 top 实时监控系统进程状态
      • 2.10.5 netstat 显示网络状态和端口占用信息
    • 2.11 crontab 系统定时任务
  • 三、编译器之神~vim
    • 3.1 一般模式
    • 3.2 编辑模式
    • 3.3 指令模式
  • 四、脚本之魂~shell
    • 4.1 简介
    • 4.2 脚本格式
    • 4.3 变量
      • 4.3.1 系统预定义变量
      • 4.3.2 自定义变量
      • 4.3.3 特殊变量
    • 4.4 运算符
    • 4.5 条件判断
    • 4.6 流程控制
      • 4.6.1 if 判断
      • 4.6.2 case 语句
      • 4.6.3 for 循环
      • 4.6.4 while 循环
    • 4.7 read 读取控制台输入
    • 4.8 函数
      • 4.8.1 系统函数
      • 4.8.2 自定义函数
    • 4.9 正则表达式

一、Linux上下五千年

1.1 历史长河

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布。

它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。

Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

Linux内核版本

内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。

Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:

  1. 稳定版
    具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
  2. 开发版
    由于要试验各种解决方案,所以变化很快。
    内核源码网址:http://www.kernel 所有来自全世界的对Linux源码的修改最终都会汇总到这个网站,由Linus领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。

Linux发行版本

Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。

目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。

Linux 和 Windows 区别

1.2 下载安装

  1. 下载VirtualBox —> 官网下载入口
  2. 下载Linux镜像(这里以centos7为例) —> 官网下载入口
  3. 打开VirtualBox,点击新建,输入名称、类型和版本

  1. 分配内存大小

  1. 创建虚拟硬盘

  1. 选择第一个


7. 选择动态分配

  1. 选择位置和大小

  1. 创建之后,选择设置 —> 存储,选择盘片

  1. 设置网络,选择桥接网络

  1. 启动linux系统,会进入安装页面,这里需要将时间设置成亚洲/上海,选择最小安装(无桌面)

踩坑秘籍

输入ifconfig没有这个指令

  • yum search ifconfig
  • yum install net-tools.x86_64

输入ifconfig发现没有分配IP

  • vi /etc/sysconfig/network-scripts/ifcfg-ens33
  • 将ONBOOT=no 改为ONBOOT=yes(是否开机启用的意思)

linux重启之后IP发生变化

  1. vim /etc/sysconfig/network-scripts/ifcfg-ens33

  2. 将 BOOTPORTO=dhcp 改为 BOOTPORTO=static 原本是自动获取ip,现在改成固定ip

  3. ONBOOT=yes 这个是no的话就改为yes,表示修改配置后自动启用网卡

  4. 如果你是192.168.x.x网段的,就添加这几行配置, 比如这里我把ip固定为192.168.1.6 IPADDR=192.168.1.6 NETMASK=255.255.255.0 GATEWAY=192.168.1.1

  5. 如果你是10.x.x.x网段的,就添加这几行配置,比如这里我把ip固定为10.0.0.6 IPADDR=10.0.0.6 NETMASK=255.255.255.0 GATEWAY=10.0.0.1

  6. 然后重启网络配置service network restart 之后,ifconfig查看ip,这里ip就是192.168.1.6了,然后ping www.baidu ,可以ping通,重启Linux后ip就不会改变了。

1.3 目录介绍

  1. /
    根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
  2. /bin:
    /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
  3. /boot
    放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。
  4. /dev
    存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
  5. /etc
    系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
  6. /home
    系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,edu 表示用户 edu 的家目录。
  7. /lib:
    /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
  8. /lost+fount
    系统异常产生错误时,会将一些遗失的片段放置于此目录下。
  9. /mnt: /media
    光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
  10. /opt
    给主机额外安装软件所摆放的目录。
  11. /proc
    此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
  12. /root
    系统管理员root的家目录。
  13. /sbin:
    /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。
  14. /tmp
    一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
  15. /srv
    服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
  16. /usr
    应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
  17. /var
    放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

1.4 网络配置

1.4.1 三种网络模式

  1. 桥接
    在网络网卡上安装了一个桥接协议,让这块网卡处于混杂模式,可以同时连接多个网络的做法。 桥接下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样查在这个交换机当中,所以所有桥接下网卡与网卡都是交换模式的,相互可以访问而不干扰。

  2. NAT
    虚拟机使用VMnet8网卡与主机单独组网,主机对于虚拟机相当于路由器,VMnet8网卡通过NAT地址转换协议与物理机网卡通信

  3. Host-only(仅与主机通信)【不常用】
    虚拟机使用VMnet1网卡与主机单独组网,主机对于虚拟机相当于路由器

1.4.2 ifconfig

功能描述:显示所有网络接口的配置信息

1.4.3 ping

功能描述:测试当前服务器是否可以连接目的主机

1.4.4 修改 IP 地址

  1. 查看 IP 配置文件
    vim /etc/sysconfig/network-scripts/${ifcfg-ens33}
  2. 以下标红的项必须修改,有值的按照下面的值修改,没有该项的要增加
TYPE="Ethernet" #网络类型(通常是 Ethemet) 
PROXY_METHOD="none" 
BROWSER_ONLY="no" 
BOOTPROTO="static" #IP 的配置方法[none|static|bootp|dhcp](引导 时不 使用协议|静态分配 IP|BOOTP 协议|DHCP 协议) 
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="ens33" 
UUID="e83804c1-3257-4584-81bb-660665ac22f6" #随机 id 
DEVICE="ens33" #接口名(设备,网卡) 
ONBOOT="yes" #系统启动的时候网络接口是否有效(yes/no) 
#IP 地址 
IPADDR=192.168.1.100 
#网关 
GATEWAY=192.168.1.2 
#域名解析器 
DNS1=192.168.1.2
  1. 编辑完后,按键盘 esc ,然后输入 :wq 回车即可
  2. 执行 service network restart 重启网络

修改 IP 地址后可能会遇到的问题:

  1. 物理机能 ping 通虚拟机,但是虚拟机 ping 不通物理机,一般都是因为物理机的 防火墙问题,把防火墙关闭就行
  2. 虚拟机能 Ping 通物理机,但是虚拟机 Ping 不通外网,一般都是因为 DNS 的设置有问题
  3. 虚拟机 Ping www.baidu 显示域名未知等信息,一般查看 GATEWAY 和 DNS 设 置是否正确
  4. 如果以上全部设置完还是不行,需要关闭 NetworkManager 服务
    • systemctl stop NetworkManager 关闭
    • systemctl disable NetworkManager 禁用
  5. 如果检查发现 systemctl status network 有问题 需要检查 ifcfg-ens33

1.4.5 主机名称

修改主机名称

  1. 查看当前服务器主机名称
    hostname
  2. 如果感觉此主机名不合适,我们可以进行修改。通过编辑/etc/hostname 文件
    vi /etc/hostname
  3. 修改完成后重启生效

修改 hosts 映射文件
3. vim /etc/hosts
4. 192.168.2.101 localhost

1.4.6 远程登录

通常在工作过程中,公司中使用的真实服务器或者是云服务器,都不允许除运维人员之外的员工直接接触,因此就需要通过远程登录的方式来操作。

所以,远程登录工具就是必不可缺的,目前,比较主流的有 Xshell, SSH Secure Shell, SecureCRT,FinalShell 等,可以根据自己的习惯自行选择。【我用的是FinalShell】

1.5 系统管理

1.5.1 Linux 中的进程和服务

  1. 计算机中,一个正在执行的程序或命令,被叫做“进程”(process)
  2. 启动之后一直存在、常驻内存的进程,一般被称作“服务”(service)

1.5.2 systemctl

systemctl start | stop | restart | status 服务名

  1. 查看防火墙服务的状态
    systemctl status firewalld
  2. 停止防火墙服务
    systemctl stop firewalld
  3. 启动防火墙服务
    systemctl start firewalld
  4. 重启防火墙服务
    systemctl restart firewalld

1.5.3 systemctl 设置后台服务的自启配置

  1. 查看服务开机启动状态
    systemctl list-unit-files
  2. 关掉指定服务的自动启动
    systemctl disable service_name
  3. 开启指定服务的自动启动
    systemctl enable service_name

查看服务的方法:

  1. /usr/lib/systemd/system
  2. ls -al

1.5.4 系统运行级别

  1. CentOS7 的运行级别为:
    1. multi-user.target(多用户有网,无图形界面)
    2. graphical.target (多用户有网,有图形界面)
  2. 查看当前运行级别:
    systemctl get-default
  3. 修改当前运行级别
    systemctl set-default TARGET.target (这里 TARGET 取 multi-user 或者 graphical)

1.5.5 防火墙

临时关闭防火墙

  1. 查看防火墙状态
    systemctl status firewalld
  2. 临时关闭防火墙
    systemctl stop firewalld

开机启动时关闭防火墙
3. 查看防火墙开机启动状态
systemctl enable firewalld.service
4. 2. 设置开机时关闭防火墙
systemctl disable firewalld.service

1.5.6 关机

在 linux 领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

Linux 系统中为了提高磁盘的读写效率,对磁盘采取了 “预读迟写”操作方式。当用户 保存文件时,Linux 核心并不一定立即将保存数据写入物理磁盘中,而是将数据保存在缓冲区中,等缓冲区满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率。

但是, 也带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导 致数据丢失。使用 sync 指令可以立即将缓冲区的数据写入磁盘。

  1. sync(功能描述:将数据由内存同步到硬盘中)
  2. halt (功能描述:停机,关闭系统,但不断电)
  3. poweroff (功能描述:关机,断电)
  4. reboot(功能描述:就是重启,等同于 shutdown -r now)
  5. shutdown [选项] 时间
选项功能
-H相当于–halt,停机
-f-r=reboot 重启
参数功能
now立刻关机
时间等待多久后关机(时间单位是分钟)
(1)将数据由内存同步到硬盘中 
[root@]#sync 
(2)重启 
[root@]# reboot 
(3)停机(不断电) 
[root@]#halt 
(4)计算机将在 1 分钟后关机,并且会显示在登录用户的当前屏幕中 
[root@]#shutdown -h 1 ‘This server will shutdown after 1 mins’ 
(5)立马关机(等同于 poweroff) 
[root@]# shutdown -h now 
(6)系统立马重启(等同于 reboot) 
[root@]# shutdown -r now

1.6 软件管理

1.6.1 RPM

RPM(RedHat Package Manager),RedHat软件包管理工具,是Linux这系列操作系统里面的打包安装工具。

RPM包的名称格式
Apache-1.3.23-11.i386.rpm - “apache” 软件名称

  • “1.3.23-11”软件的版本号,主版本和此版本
  • “i386”是软件所运行的硬件平台,Intel 32位处理器的统称
  • “rpm”文件扩展名,代表RPM包

RPM 查询命令(rpm -qa
查询所安装的所有 rpm 软件包rpm -qa
由于软件包比较多,一般都会采取过滤rpm -qa | grep rpm软件包

RPM 卸载命令(rpm -e

  1. rpm -e RPM软件包
  2. rpm -e --nodeps 软件包
  • -e:卸载软件包
  • --nodeeps:卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了

RPM 安装命令(rpm -ivh
rpm -ivh RPM 包全名

  • -i:install,安装
  • -v:–verbose,显示详细信息
  • -h:–hash,进度条
  • --nodeps:安装前不检查依赖

1.6.2 YUM

YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器,基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包 并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

我的理解:yum类似maven,可以从镜像网站下载应用程序,并直接安装。

  1. 语法
    yum [选项] [参数]
  2. 选项说明
    -y:对所有提问都回答yes
  3. 参数说明

修改网络 YUM 源
默认的系统 YUM 源,需要连接国外 apache 网站,网速比较慢,可以修改关联的网络 YUM 源为国内镜像的网站,比如网易 163,aliyun 等。

  1. 安装 wget, wget 用来从指定的 URL 下载文件
    yum install wget

  2. /etc/yum.repos.d/目录下,备份默认的 repos 文件
    cp CentOS-Base.repo CentOS-Base.repo.bak

  3. 下载网易 163 或者是 aliyun 的 repos 文件,任选其一
    wget http://mirrors.aliyun/repo/Centos-7.repo //阿里云
    wget http://mirrors.163/.help/CentOS7-Base-163.repo //网易 163

  4. 使用下载好的 repos 文件替换默认的 repos 文件
    例如:用 CentOS7-Base-163.repo 替换 CentOS-Base.repo
    mv CentOS7-Base-163.repo CentOS-Base.repo

  5. 清理旧缓存数据,缓存新数据
    yum clean all
    yum makecache

二、Linux命令大汇总

先把这些记下来,面试通常会考的,嘻嘻,开心吧!!!

  1. 查看内存:top
  2. 查看磁盘存储情况:df -h
  3. 查 看磁盘 IO 读写情况:iotop(需要安装一下:yum install iotop)、 iotop -o(直接查看输出比较高的磁盘读写程序)
  4. 查看端口占用情况:netstat -tunlp | grep 端口号
  5. 查看进程:ps -aux

2.1 帮助命令

2.1.1 man 获得帮助信息

man [命令或配置文件]
man ls

2.1.2 help 获得 shell 内置命令的帮助信息

一部分基础功能的系统命令是直接内嵌在 shell 中的,系统加载启动之后会随着 shell 一起加载,常驻系统内存中。这部分命令被称为“内置(built-in)命令”;相应的其它命令 被称为“外部命令”。

help cd

2.1.3 ctrl + c 停止进程

ctrl + c

2.1.4 ctrl+l 清屏,等同于 clear

ctrl+l

2.1.5 reset 彻底清屏

reset

2.1.6 tab键 提示(更重要的是可以防止敲错)

tab

2.1.7 上下键 查找执行过的命令

👆👇

2.2 文件目录类

2.2.1 pwd 显示当前工作目录的绝对路径

pwd

2.2.2 ls 列出目录的内容

每行列出的信息依次是:

  1. 文件类型与权限
  2. 链接数
  3. 文件属主
  4. 文件属组
  5. 文件大小用byte 来表示
  6. 建立或最近修改的时间
  7. 名字
  • -a:全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
  • -l:长数据串列出,包含文件的属性与权限等等数据;等价于“ll”

2.2.3 cd 切换目录

2.2.4 mkdir 创建一个新的目录

-p:创建多层目录

2.2.5 rmdir 删除一个空的目录

rmdir

2.2.6 touch 创建空文件

touch

2.2.7 cp 复制文件或目录

cp [选项] source dest (功能描述:复制source文件到dest)

  • -r 递归复制整个文件夹

2.2.8 rm 删除文件或目录

rm [选项] deleteFile (功能描述:递归删除目录中所有内容)

  • -r 递归删除目录中所有内容
  • -f 强制执行删除操作,而不提示用于进行确认。
  • -v 显示指令的详细执行过程

2.2.9 mv 移动文件与目录或重命名

  1. mv oldNameFile newNameFile (功能描述:重命名)
  2. mv /temp/movefile /targetFolder (功能描述:移动文件)

2.2.10 cat 查看文件内容

cat [选项] 要查看的文件

  • -n 显示所有行的行号,包括空行

2.2.11 more 文件内容分屏查看器

more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件 的内容。more 指令中内置了若干快捷键,详见操作说明。

more 要查看的文件

  • 空白键 (space) 代表向下翻一页
  • Enter 代表向下翻『一行』
  • q 代表立刻离开 more ,不再显示该文件内容
  • Ctrl+F 向下滚动一屏
  • Ctrl+B 返回上一屏
  • = 输出当前行的行号
  • :f 输出文件名和当前行的行号

2.2.12 less 分屏显示文件内容

less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加 强大,支持各种显示终端。

less 指令在显示文件内容时,并不是一次将整个文件加载之后 才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

less 要查看的文件

  • 空白键 向下翻动一页;
  • [pagedown] 向下翻动一页
  • [pageup] 向上翻动一页;
  • /字串 向下搜寻『字串』的功能;n:向下查找;N:向上查找;
  • ?字串 向上搜寻『字串』的功能;n:向上查找;N:向下查找;
  • q 离开 less 这个程序;

2.2.13 echo 输出内容到控制台

echo [选项] [输出内容]

  • \\ 输出\本身
  • \n 换行符
  • \t 制表符,也就是 Tab 键

2.2.14 head 显示文件头部内容

head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容。

  • head 文件(功能描述:查看文件头10行内容)
  • head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)

2.2.15 tail 输出文件尾部内容

tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。

  • tail 文件 (功能描述:查看文件尾部10行内容)
  • tail -n 5 文件 (功能描述:查看文件尾部5行内容,5可以是任意行数)
  • tail -f 文件 (功能描述:实时追踪该文档的所有更新)

2.2.16 > 输出重定向和 >> 追加

  • ls -l > 文件 (功能描述:列表的内容写入文件 a.txt 中(覆盖写))
  • ls -al >> 文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)
  • cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件 2)
  • echo “内容” >> 文件

2.2.17 ln 软链接

软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放 了链接其他文件的路径。
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

  • 删除软链接: rm -rf 软链接名,而不是 rm -rf 软链接名/
  • 如果使用 rm -rf 软链接名/ 删除,会把软链接对应的真实目录下内容删掉
  • 查询:通过 ll 就可以查看,列表属性第 1 位是 l,尾部会有位置指向。

2.2.18 history 查看已经执行过历史命令

2.3 时间日期类

2.3.1 date 显示当前时间

  • date (功能描述:显示当前时间)
  • date +%Y (功能描述:显示当前年份)
  • date +%m(功能描述:显示当前月份)
  • date +%d (功能描述:显示当前是哪一天)
  • date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒)

2.3.2 date 显示非当前时间

  • date -d '1 days ago' (功能描述:显示前一天时间)
  • date -d '-1 days ago' (功能描述:显示明天时间)

2.3.3 date 设置系统时间

date -s "2023-06-19 20:52:18"

2.3.4 cal 查看日历

cal 2023

2.4 用户管理命令

2.4.1 useradd 添加新用户

  • useradd 用户名 (功能描述:添加新用户)
  • useradd -g 组名 用户名 (功能描述:添加新用户到某个组)

2.4.2 passwd 设置用户密码

passwd 用户名

2.4.3 id 查看用户是否存在

id username

2.4.4 cat /etc/passwd 查看创建了哪些用户

cat /etc/passwd

2.4.5 su 切换用户

  • su 用户名称 (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
  • su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)

2.4.6 userdel 删除用户

  • userdel 用户名 (功能描述:删除用户但保存用户主目录)
  • userdel -r 用户名 (功能描述:用户和用户主目录,都删除)

2.4.7 who 查看登录用户信息

  • whoami (功能描述:显示自身用户名称)
  • who am i (功能描述:显示登录用户的用户名以及登陆时间)

2.4.8 sudo 设置普通用户具有 root 权限

  • useradd issavior
  • passwd issavior
  • vim /etc/sudoers
  • 修改 /etc/sudoers 文件,找到下面一行(91 行),在 root 下面添加一行,如下所示:
## Allow root to run any commands anywhere 
root ALL=(ALL) ALL
issavior ALL=(ALL) ALL
  • 或者配置成采用 sudo 命令时,不需要输入密码
root ALL=(ALL) ALL 
issavior ALL=(ALL) NOPASSWD:ALL
  • 修改完毕,现在可以用 issavior 帐号登录,然后用命令 sudo ,即可获得 root 权限进行 操作。

2.4.9 usermod 修改用户

将用户加入到用户组
usermod -g 用户组 用户名

2.5 用户组管理命令

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。

不同 Linux 系统对用户组的规定有所不同, 如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group文件的更新。

2.5.1 groupadd 新增组

groupadd 组名

2.5.2 groupdel 删除组

groupdel 组名

2.5.3 groupmod 修改组

groupmod -n 新组名 老组名

2.5.4 cat /etc/group 查看创建了哪些组

cat /etc/group

2.6 文件权限类

2.6.1 文件属性

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。

为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做 了不同的规定。

在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属 的用户和组。

2.6.2 chmod 改变权限

第一种方式变更权限 chmod [{ugoa}{+-=}{rwx}] 文件或目录
第二种方式变更权限 chmod [mode=421 ] [文件或目录]

2.6.3 chown 改变所有者

chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有 者)

2.6.4 chgrp 改变所属组

chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)

2.7 搜索查找类

2.7.1 find 查找文件或者目录

find [搜索范围] [选项]

find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。

2.7.2 locate 快速定位文件路径

locate 搜索文件

locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给 定的文件。

Locate 指令无需遍历整个文件系统,查询速度较快。

为了保证查询结果的准确 度,管理员必须定期更新 locate 时刻。

2.7.3 grep 过滤查找及“|”管道符

grep 选项 查找内容 源文件

管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理

2.8 压缩和解压类

2.8.1 gzip/gunzip 压缩

gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)

gunzip 文件.gz (功能描述:解压缩文件命令)

2.8.2 zip/unzip 压缩

zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)

unzip [选项] XXX.zip (功能描述:解压缩文件)

2.8.3 tar 打包

tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的 文件格式.tar.gz)

2.9 磁盘查看和分区类

2.9.1 du 查看文件和目录占用的磁盘空间

du 目录/文件 (功能描述:显示目录下每个子目录的磁盘使用情况)

2.9.2 df 查看磁盘空间使用情况

df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占 用情况)

2.9.3 lsblk 查看设备挂载情况

lsblk (功能描述:查看设备挂载情况)

2.9.4 mount/umount 挂载/卸载

mount [-t vfstype] [-o options] device dir (功能描述:挂载设备)
umount 设备文件名或挂载点 (功能描述:卸载设备)

2.9.5 fdisk 分区

fdisk -l (功能描述:查看磁盘分区详情)
fdisk 硬盘设备名 (功能描述:对新增硬盘进行分区操作)

2.10 进程管理类

2.10.1 ps 查看当前系统进程状态

ps aux | grep xxx (功能描述:查看系统中所有进程)

ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)

2.10.2 kill 终止进程

kill [选项] 进程号 (功能描述:通过进程号杀死进程)

killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这 在系统因负载过大而变得很慢时很有用)

2.10.3 pstree 查看进程树

pstree [选项]

2.10.4 top 实时监控系统进程状态

top [选项]

2.10.5 netstat 显示网络状态和端口占用信息

netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)

netstat –nlp | grep 端口号 (功能描述:查看网络端口号占用情况)

2.11 crontab 系统定时任务

crontab [选项]

三、编译器之神~vim

VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。

VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜 色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。

3.1 一般模式

以 vi 打开一个档案就直接进入一般模式了(这是默认的模式)。

在这个模式中, 你可 以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档 案内容, 也可以使用『复制、粘贴』来处理你的文件数据。

语法功能描述
yy复制光标当前一行
y 数字 y复制一段(从第几行到第几行)
p箭头移动到目的行粘贴
u撤销上一步
dd删除光标当前行
d 数字 d删除光标(含)后多少行
x剪切一个字母,相当于 del
X剪切一个字母,相当于 Backspace
yw复制一个词
dw删除一个词
shift+6(^)移动到行头
shift+4 ($)移动到行尾
1+shift+g移动到页头,数字
shift+g移动到页尾
数字+shift+g移动到目标行

3.2 编辑模式

在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!

要等到你按下『i, I, o, O, a, A』等任何一个字母之后才会进入编辑模式。

注意了!通常在Linux中,按下这些按键时,在画面的左下方会出现『INSERT或 REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下 『Esc』这个按键即可退出编辑模式。

进入编辑模式

按键功能
i当前光标前
a当前光标后
o当前光标行的下一行 I
A光标所在行最后
O当前光标行的上一行

按『Esc』键 退出编辑模式,之后所在的模式为一般模式。

3.3 指令模式

强制保存退出 wq!
在一般模式当中,输入『 : / ?』3个中的任何一个按钮,就可以将光标移动到最底下那 一行。

在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、 离开 vi 、显示行号等动作是在此模式中达成的!

命令功能
:w保存
:q退出
:!强制执行
/要查找的词
n查找下一个,N 往上查找
:noh取消高亮显示
:set nu显示行号
:set nonu关闭行号
:%s/old/new/g替换内容 /g 替换匹配到的所有内容

四、脚本之魂~shell

4.1 简介

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

4.2 脚本格式

脚本以#!/bin/bash 开头(指定解析器)

4.3 变量

4.3.1 系统预定义变量

常用系统变量 $HOME$PWD$SHELL$USER

4.3.2 自定义变量

  • 基本语法
    • 定义变量:变量名=变量值,注意,=号前后不能有空格
    • 撤销变量:unset 变量名
    • 声明静态变量:readonly 变量,注意:不能 unset
  • 变量定义规则
    • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建 议大写。
    • 等号两侧不能有空格
    • 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
    • 变量的值如果有空格,需要使用双引号或单引号括起来。

4.3.3 特殊变量

  1. $n (功能描述:n 为数字,$0 代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9 代表第一到第九个参数,十以 上的参数,十以上的参数需要用大括号包含,如 9{10})
  2. $# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及 加强脚本的健壮性)。
  3. $*(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
  4. $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
  5. $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一 个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明 上一个命令执行不正确了。)

4.4 运算符

“$((运算式))” 或 “$[运算式]”

4.5 条件判断

  1. test condition
  2. [ condition ](注意 condition 前后要有空格)

注意:条件非空即为 true

4.6 流程控制

4.6.1 if 判断

(1)单分支 
if [ 条件判断式 ];then 
	程序 
fi


或者 

if [ 条件判断式 ] 
then
	程序 
fi

(2)多分支 
if [ 条件判断式 ] 
then
	程序 
elif [ 条件判断式 ] 
then
	程序 
else
	程序 
fi 

4.6.2 case 语句

case $变量名 in 
"值 1")
	如果变量的值等于值 1,则执行程序 1 
;;
"值 2")
	如果变量的值等于值 2,则执行程序 2 
;; 
	…省略其他分支… 
*) 
	如果变量的值都不是以上的值,则执行此程序 
;;
esac

4.6.3 for 循环

for (( 初始值;循环控制条件;变量变化 ))
do
	程序
done

4.6.4 while 循环

while [ 条件判断式 ] 
do 
	程序 
done

4.7 read 读取控制台输入

read (选项) (参数)

4.8 函数

4.8.1 系统函数

basename

basename [string / pathname] [suffix] (功能描述:basename 命令会删掉所有的前 缀包括最后一个(‘/’)字符,然后将字符串显示出来。

dirname

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名 (非目录的部分),然后返回剩下的路径(目录的部分))

4.8.2 自定义函数

[ function ] funname[()] 
{ 
	Action; [return int;] 
}

4.9 正则表达式

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。

在很多文 本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

在 Linux 中,grep, sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。

  • ^ 匹配一行的开头
  • $ 匹配一行的结束
  • . 匹配一个任意的字符
  • * 不单独使用,他和上一个字符连用,表示匹配上一个字符 0 次或多次
  • [ ] 表示匹配某个范围内的一个字符
  • \ 表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,当我们想匹配 某一特殊字符本身时(例如,我想找出所有包含 ‘$’ 的行),就会碰到困难。此时我们就要 将转义字符和特殊字符连用,来表示特殊字符本身

本文标签: 进阶 命令 Linux vim shell