Linux基础

最近在云之梦网站学习Linux基础,发现有好多基础命令见面不相识……此篇作为学习笔记,利用零碎的时间终于完成课程学习,该篇添加常用命令以方便后续翻阅参考。

操作系统

操作系统分类

  1. 客户端操作系统
    windows 7,8,10等
  2. 服务器端操作系统
    1. windows server 2019
    2. linux操作系统
      1. centos
      2. redhat enterprise linux rhel
      3. ubuntu
      4. debian
      5. suse
      6. opensuse
      7. freebsd
      8. aliyun linux
      9. coreos
    3. unix操作系统

      常用命令

      Linux查看版本当前操作系统内核信息
      uname -a
      Linux查看当前操作系统版本信息
      cat /proc/version
      Linux查看版本当前操作系统发行版信息
      cat /etc/redhat-release
      查看centOS版本
      cat /etc/centos-release
      查看内存 free or free -m or free -g
      查看硬盘 df or df -T or df -h
      查看系统正在登录的用户 who
      查看系统最后一重要操作 last
      查看进程实时消耗的cpu和内存 top
      查看系统1分钟、5分钟和15分钟平均负载 uptime
      查看服务进程 ps -ef or pstree == !ps
      查看服务端口 netstat -tunpl
      杀掉进程 kill -9 pid or pkill pname

系统启动流程

  1. BIOS加电自检
  2. 把MBR加载到内存
  3. 加载grub
  4. Kernel自身初始化
  5. 启动第一个程序systemd
  6. 检查默认运行级别

    Linux运行级别

    0 shutdown.target(关机)  
    1 emergency.target(紧急救援模式)   
    2 rescue.target(救援模式)  
    3 multi-user.target(多用户模式|字符系统模式)  
    4 无  
    5 graphical.target(桌面系统)  
    6 无(重启) 

    常用命令

    查看运行级别 runlevel

    init命令

    `init 0` // 关机   
    `init 3` // 到达字符界面  
    `init 5` // 到达图形界面  
    `init 6` // 重启  

    systemd服务管理

    利用systemctl 进行服务控制。
    1. 查看默认级别    
    `systemctl get-default`  
     Tips: 或者使用`cd /etc/systemd/system`后`ll`查看`default.target`字段  
    2. 设置默认级别  
      `systemctl set-default multi-user.target`
    3. 查看指定服务状态
    `systemctl status sshd.service`
    4. 启动服务指定服务
    `systemctl start sshd.service`
    5. 重启服务指定服务
    `systemctl restart sshd.service`
    6. 关闭服务指定服务
    `systemctl stop sshd.service`
    7. 重载服务指定服务
    `systemctl reload sshd.service`
    8. 开机启动指定服务
    `systemctl enable sshd.service`
    9. 开机关闭指定服务
    `systemctl disable sshd.serivce`
    9. 查看指定服务是否开机启动
    `systemctl is-enabled sshd.service`
    10. 查看指定服务是否启动
    `systemctl is-active sshd.serivce`
    11. 临时切换选择分配运行级别
     `systemctl isolate multi-user.target` # 临时切换选择分配运行级别至字符系统模式
    `systemctl isolate graphical.target`   # 临时切换选择分配运行级别至桌面系统模式
    12. 列出所有target
    `systemctl list-units --type=target --all`
    13. 查看系统中所有服务的启动状态
    `systemctl list-unit-files`
  7. 启动相应级别下的所有程序服务
  8. 加载/etc/rc.d/rc.local脚本
    直接在/etc/rc.d/rc.local文件中追加即可,例如 systemctl start sshd.service
    Tips:在CentOS8版本改文件需要手动增加执行权限,使用命令chmod +x /etc/rc.d/rc.local
  9. systemd执行multi-user.target下的getty.target及登录服务
  10. systemd执行graphical需要的服务

Root用户破解流程

  1. 开机后页面 按e进入LINUX内核编辑模式
  2. 在quiet后加入 rd.break
  3. 按ctrl+x进入swtch_root模式
  4. 使用命令 mount -o remount,rw /sysroot 重新挂载根分区
  5. 使用命令 chroot /sysroot 切换根分区
  6. 使用命令 passwd root 修改root的密码,必须是8位以上复杂密码 当前设置的是 xUGZ1030
  7. 使用命令 touch /.autorelabel 让selinux在重启后更新label 不执行该句新设置密码不会保存 等到进度条加载完成后可退出 验证新密码是否有效
  8. 使用命令 exit 退出
  9. 使用命令 reboot 重启系统
  10. 最后用root和新密码登录即可

防火墙

Selinux防火墙: 文件级防火墙

  1. 使用命令 sestatus 查看selinux防火墙状态
  2. 关闭防火墙
    使用命令 vi /etc/selinux/config 进入selinux配置文件 将SELINUX状态改成关闭 使用命令 SELINUX=disabled
  3. 使用命令 init 6 重启

firewalld防火墙: 网络级防火墙

  1. 使用命令 systemctl status firewalld 查看 firewalld防火墙状态
  2. 使用命令 systemctl stop firewalld 关闭 该命令只能暂时关闭 开机关闭需要另设
  3. 使用命令 systemctl disable firewalld 设置开机关闭

iptables防火墙: 网络级防火墙 常用

  1. 使用命令 iptables -L -n 查看规则
  2. 使用命令 iptables -F 清空规则
  3. 使用命令 service iptables save 保存规则 (如果不能保存 查询是否已安装iptables-service包)

主机名管理

  1. 查看主机名(localhost)
    hostname
  2. 查看主机名与系统详情
    hostnamectl status
  3. 临时修改
    hostname yzmedu
  4. 永久修改
    1) 直接修改文件
    vi /etc/hostname
    2) hostnamectl方法
    hostnamectl set-hostname
    3) 重启生效
    init 6

网络管理

直接修改文件

vi /etc/sysconfig/network-scripts/ifcfg-ens32

1
2
3
4
5
6
7
BOOTPROTO=dhcp | static
ONBOOT=yes | no
IPADDR=192.168.239.200
NETMASK=255.255.255.0
GATEWAY=192.168.239.2
DNS1=114.114.114.114
DNS2=8.8.8.8

修改完成成功重启systemctl restart network即可。参考博客
Tips: 使用ifconfig查看IP地址,使用route -n查看路由网关,使用cat /etc/resolv.conf查看DNS,使用cat /etc/sysconfig/network-scripts/ifcfg-ens32查看配置文件。

使用nmcli配置

使用nmcli命令要确保系统中已经安装NetworkManager,默认是自动启动的。使用systemctl status NetworkManager检查确认。CentOS8中network已经淘汰掉了,不建议使用。

  1. 查看网络设备状态
    nmcli device status
  2. 查看ens32网卡的相关信息
    nmcli device show ens32
  3. 设置静态ip地址
    nmcli connection modify ens32 ipv4.addresses '192.168.1.100'
  4. 设置DNS
    nmcli connection modify ens32 ipv4.dns '114.114.114.114'
  5. 设置网关
    nmcli connection modify ens32 ipv4.gateway '192.168.1.1'
  6. 设置IP地址为手动指定
    nmcli connection modify ens32 ipv4.method manual
  7. 设置IP地址为dhcp自动获取
    nmcli connection modify ens32 ipv4.method auto
  8. 设置开机自动连接
    nmcli connection modify ens32 connection.autoconnect yes
  9. 重新加载ifcfg-ens32配置文件
    nmcli connection reload
  10. 不重启系统让网卡生效的方法
    1
    2
    3
    nmcli connection up ens32
    nmcli device connect ens32
    nmcli device reapply ens32

系统目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/bin   存放二进制可执行文件(ls,cat,mkdir等),存放系统命令
/boot 核心系统启动文件,存放用于系统引导时使用的各种文件
/dev 存放硬件设备,使用里面设备需要挂载,糖炒栗子:mount /dev/cdrom /media/
/etc 存放系统程序管理和配置文件
/home 存放除了root用户之外的所有用户文件的根目录,比如用户user的主目录就是/home/user,可以用~user表示
/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
/media 空目录,不可删,用于挂在光盘使用
/mnt 空测试目录,系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统
/opt 空测试目录,额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
/proc 虚拟文件系统目录,是系统内存的映射。存放cpu、内存和硬盘等设备信息,可直接访问这个目录来获取系统信息。
/root 超级用户(root)的主目录
/run 程序进程PID
/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等
/srv 自己的程序或源代码的放置目录
/sys 内核信息文件
/tmp 用于存放各种临时文件,是公用的临时文件存储点
/usr 非系统程序用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统或程序日志等)

基础命令

  1. 历史命令查看用 history, 使用history -c清除历史命令
  2. 强制中断正在执行的操作 ctrl+c
  3. 清空当前屏幕 clear或ctrl+l
  4. 记录最近两次使用的目录 cd -

文件管理

  1. 新建修改和删除
    创建文件 touch file1
    批量创建文件 touch file{1..9}
    编辑文件 vi file2
    修改文件名 mv file1 file2
    删除文件 rm -rf file
  2. 查看文件内容
    全文查看文件内容 cat file4
    分页查看文件内容 more file4
    跟踪文件数据 tail -f file1
    查看文件前十行数据head file1 or head -10 file1
    查看文件后十行数据 tail flle1 or tail -10 file1
  3. 复制和文件
    复制文件cp file1 file2
    移动文件mv file1 file2
  4. 查找文件
    查找文件名为file1的文件 find / -name file1
    快速查找文件名为file1的文件 updatedb;locate file1
    查找file1文件中linux字符 cat file1 | grep linux or grep 'linux' file1
    查找file1文件中linux字符 忽略大小写 grep -i 'linux' file1

Vi编辑器

Vi是Unix及Linux系统下标准的编辑器,由美国加州大学伯克利分校开发。学会它后,你将在Linux的世界里畅行无阻。基本上vi可以分为三种状态,分别是命令模式、插入模式,和底行模式。

Vi编辑器的模式

  1. 命令模式 command
  2. 输入模式 insert
  3. 末行模式 :末行命令
  4. 视图模式 visual

常用模式切换

命令模式 => 输入模式
输入模式 => 命令模式 按下esc
命令模式 => 末行模式 使用 shift+:输入x保存退出
末行模式 => 命令模式 按下esc
命令模式 => 视图模式 使用v
v键再按上下左右进行视图选中,进行快速缩进

命令模式常用命令

kjhl撤销用u恢复用ctrl+r(撤销多了恢复,两个配合使用)
复制当前行 yy 复制多行 nyy, 比如3yy为复制三行
粘贴到下一行 p, 粘贴到下一行n次 np. 粘贴到上一行 P, 粘贴到上一行n次 nP

单字符替换用r , 按过r后直接输入需要替换的字符即可
查找用 /, 查找下一个结果用 n

到最后一行首用G, 到指定行首用nG , 比如3G为到第三行行首
从当前行删除到最后一行 dG(当前行也会删除哦), 从当前行删除到第n行 dnG
删除一个单词用 dwn
删除并剪切一行用dd
从当前字符删除到行首用 d^ , 从当前字符删除到行末用 d$
删除单个字符使用x, 删除指定个数的字符用 nx, 比如3x为删除当前光标所在位置的后三个字符

v键再按上下左右进行视图选中,进行快速缩进

输入模式常用命令

使用i在光标当前所在字符的前面输入
使用a在光标当前所在字符的后面输入
使用I在光标所在当前行的前面开始输入
使用A在光标所在当前行的后面开始输入

使用s删除光标所在的当前字符并输入
使用o在当前字符所在行下方另起一行输入
使用S删除光标所在当前行并输入
使用O在当前字符所在行上方另起一行输入

末行模式常用模式

不保存退出 q 强制不保存退出 q! 保存退出 wq 保存不退出 w
把一篇文章中的所有hello全部替换成world(%第一行到最后的意思) :%s/hello/world/g
把第1行到第10行的hello替换成world :1,10s/hello/world/g
把每行中首个hello换成world :%s/hello/world/

目录管理

创建目录 mkdir dir1
递归创建多级目录 mkdir -p dir1/dir2/dir3
删除目录 rm -rf dir1
修改目录名称 mv dir1 dir2
复制多级结构目录cp -r div1 div2
查看目录 tree dir1

用户和组

用户管理

查看用户 id root
创建用户 useradd user1
设置密码 passwd user1回车后会有提示键入密码, shell中设置密码 echo "123" | passwd --stdin user1
与用户有关的文件

1
2
3
4
/etc/passwd 用户信息
/etc/group 用户组信息
/etc/shadow 用户密码
/home/user1 用户家目录

删除用户 userdel -r user1

组管理

把user1加入root组 gpasswd -a user1 root
把user1从root组删除 gpasswd -d user1 root

GZ、Bz2和Zip压缩包

Gz压缩包管理

制作gz压缩包 tar czf mydir1.tar.gz mydir1
解压gz压缩包 tar xzf mydir1.tar.gz
查看gz压缩包 tar tf mydir1.tar.gz

Bz2压缩包管理

制作bz2压缩包 tar cjf mydir1.tar.bz2 mydir1
解压bz2压缩包 tar xjf mydir1.tar.bz2
查看bz2压缩包 tar tf mydir1.tar.bz2

Zip压缩包管理

制作zip压缩包 zip -r mydir1.zip mydir1
zip压缩包解压 unzip mydir1.zip
查看zip压缩包 unzip -l mydir1.zip

光盘管理

在linux系统中,可以使用mount命令挂载光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX NFS网络共享。
挂载光盘 mount /dev/cdrom /media/
查看挂载情况 df df -h df -Th
卸载光盘 umount /media
开机挂载 vi /etc/fstab后追加/dev/cdrom /media iso9660 defaults 0 0
开机挂载测试 mount -a成功后重启即可

RPM包管理

RPM:redhat package management英文缩写,只适用于Redhat和Centos系统。

安装RPM包 rpm -ivh psmisc-23.1-3.el8.x86_64
查看RPM包 rpm -qa or rpm -qa | grep psmisc-23.1 or 使用rpm -qa | wc -l查看安装个数
查看RPM包安装的文件 rpm -ql psmisc-23.1 or rpm -ql psmisc-23.1 | grep pstree
反查文件是否是由RPM包安装的 rpm -qf /usr/bin/pstree
删除RPM安装程序 rpm -e psmisc-23.1

yum命令

yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
YUM仓库的前提是做准备光盘 检查光盘是否正常挂载 使用命令 df
mount /dev/cdrom /media 使用该命令挂载光盘
下面为配置yum流程

1
2
3
4
cd /etc/yum.repos.d/
mv CentOS-Media.repo /mnt
rm -rf *
mv /mnt/CentOS-Media.repo ./

vi CentOS-Media.repo 进行配置文件编辑 下面对应配置需要对照

1
2
3
4
5
6
7
8
9
[c8-media-BaseOS]
baseurl=file:///media/BaseOS
gpgcheck=0
enabled=1

[c8-media-AppStream]
baseurl=file:///media/AppStream
gpgcheck=0
enabled=1

查看yum可控制的软件包
yum list | wc -l 或者 yum list | grep iptables

yum安装rpm软件包
yum -y install iptables-service

1
2
3
4
5
6
7
8
9
10
11
yum check-update  // 列出所有可更新的软件清单
yum update // 更新所有软件
yum install <package_name> // 仅安装指定的软件
yum update <package_name> // 仅更新指定的软件
yum list // 列出所有可安裝的软件清单
yum remove <package_name> // 删除软件包
yum search <keyword> // 查找软件包

yum clean packages // 清除缓存目录下的软件包
yum clean headers // 清除缓存目录下的 headers
yum clean oldheaders // 清除缓存目录下旧的 headers

权限管理

查看文件权限 ls -l fileName or ll
查看单个目录本身的权限 ll -d dirName
权限类型 r 读(4) w 写(2) x 执行(1) - 无权限(0)
权限详情

1
2
3
4
5
6
7
8
9
10
11
12
三段式
drwxr-xr-x 2 root root 6 Oct 16 19:14 dir
1.目录
2.root对dir的权限:rwx:读+写+执行
3.rootGroup对dir的权限:rx:读+执行
4.other用户对dir的权限:rx:读+执行

-rw-r--r-- 1 root root 0 Oct 16 19:14 file
1.文件
2.root对file的权限:rw:读+写
3.root组对file的权限:r:读
4.other对file的权限:r:读

umask权限掩码

默认权限: 文件:666,目录777
文件: 644(默认权限:666-权限掩码:022)
目录: 755(默认权限:777-权限掩码:022)

Chomd命令

数字式 chmod 755 /mnt
英文参数式 chmod a+x file 等价于 chmod u+x,g+x,o+x linux.sh # a=u+g+o

ACL命令

查看权限 getfacl test.sh
设置权限 setfacl -m u:user1:rwx test.sh
设置acl的默认权限 setfacl -m d:u:user1:rwx test.sh or setfacl -m default:u:user1:rwx test.sh
删除/test上的所有acl权限 setfacl -b test.sh
删除user1在/test上的权限 setfacl -x u:user1 test.sh

Sudo命令

使用 root 用户修改文件/etc/sudoers添加可写权限后编辑,在root ALL=(ALL) ALL下一行加入以下内容:你的账号ALL=(ALL)ALL 保存退出。
分配用户对命令的权限

1
2
visudo
xugz localhost=/usr/sbin/useradd // 完成后,指定用户 xugz 就可添加用户

Shell

命令技巧

使用 tab 快速补全
调出历史命令中第1001号命令 !1001
调出最后一次执行的以s开头的命令!s
管道 |

帮助技巧

ls --help
systemctl -h
man ls

shell编程概述

别名管理

查看别名 alias
新建别名 alias myif='nmcli device show ens32'
删除别名 unalias myif

日期管理-date

date '+%Y-%m-%d %H:%M:%S'
Y 年 m 月 d 日 H 时 M 分 S 秒

Bash重定向

正确输出 >
正确追加输出 >>
错误输出 2>
错误追加输出 2>>
正确和错误输出 &>
正确和错误追加输出 &>>
正确或错误立即销毁 &>/dev/null

Shell编程-基础操作

变量定义 name='user1'
输出变量 echo $name or echo "my name is ${name}"

Shell编程-文件测试

-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-L:测试是否为符号连接(Link)文件

Shell编程-字符串测试

=: 字符串内容相同
!=:字符串内容不同
-z: 字符串为空

Shell编程-数学测试

-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-ge:大于或等于(Greater or Equal)
-le:小于或等于(Lesser or Equal)

Shell编程-逻辑测试

&&:逻辑与
||:逻辑或
!: 逻辑否

Shell编程-用户交互

read -p ‘please input your name: ‘ name
echo $name

Shell编程实例

光盘挂载

1
2
3
4
5
6
7
8
#!/bin/bash
if [ ! -e /media/BaseOS ]
then
mount /dev/cdrom /media &> /dev/null
echo 'cdrom is ok'
else
echo 'cdrom is ok'
fi

创建用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
read -p 'please input your name:' name
if [ ! -z $name ]
then
read -p 'please input your pass:' pass
if [ ! -z $pass ]
then
useradd $name
echo $pass | passwd --stdin $name &> /dev/null
echo "your name is ${name},your pass is ${pass},create is ok"
else
echo 'pass is empty'
fi
else
echo 'name is empty'
fi

内存判断

1
2
3
4
5
6
7
8
9
#!/bin/bash
mem=`free -m |grep 'Mem'|awk '{print $4}'` # 执行`里的代码

if [ $mem -lt 400 ]
then
echo "mem is no,now is ${mem}"
else
echo "mem is yes,now is ${mem}"
fi

循环输出

1
2
3
4
5
6
#!/bin/bash
for name in `cat /etc/passwd | awk -F: '{print $1}'`
do
echo $name
sleep 1
done

crontab任务计划

cron是一个可以用来根据时间、日期、月份和星期的组合来调度对周期性任务执行的守护进程,利用cron所提供的功能,可以将需要周期性重复执行的任务设置为cron任务,并且设置为在主机较空闲的时间自动完成。

查看Crontab服务状态 systemctl status crond
任务计划格式 (分) *(时) *(日) *(月) *(周) 周期执行的程序
查看cron任务计划 crontab -l
编辑cron任务计划 crontab -e
删除所有cron任务计划 crontab -r

每年1月2日晚上22:30执行time.sh脚本 30 22 2 1 * time.sh
每周六晚上22:30执行time.sh脚本 30 22 * * 6 time.sh
每周的周一、周三和周五晚上22:30执行time.sh脚本 30 22 * * 1,3,5 time.sh
每周的周一到周五晚上22:30执行time.sh脚本 30 22 * * 1-5 time.sh
每分钟执行一次time.sh脚本 * * * * * time.sh
每五分钟执行一次time.sh脚本 */5 * * * * time.sh
每天晚上00点执行time.sh脚本 00 00 * * * time.sh

该命令详见 点我,我是链接地址

top命令

top命令用于实时显示 process 的动态

1
2
3
4
5
6
top     // 显示进程信息
top -c // 显示完整命令
top -b // 以批处理模式显示程序信息
top -s // 以累积模式显示程序信息
top -p <pid> // 显示指定的进程信息
top -n 10 // 显示更新十次后退出

Cockpit Web系统监控

初始化 systemctl enable --now cockpit.socket
开启cockpit服务 systemctl start cockpit.service
查看cockpit状态 systemctl status cockpit.service

自定义服务脚本流程

需求:自定义startMyApp脚本,使用systemd服务管理放入开机自启动。用于练手systemcrl命令

  1. 创建文件 vi /mnt/startMyApp.sh # 路径可自指定
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/sh
    i=0
    while true
    do
    echo $i>>/mnt/MyApp.txt
    ((i++))
    sleep 1
    done
  2. 给脚本设置执行权限chmod a+x startMyApp.sh
  3. 自定义myapp服务脚本vi /etc/systemd/system/myapp.service
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Unit] # 服务单元
    Description=myapp service

    [Service]
    Type=simple
    WorkingDirectory=/mnt # 工作目录
    ExecStart=/mnt/startMyApp.sh
    ExecStop=/bin/kill -s TERM $MAINPID

    [Install]
    WantedBy=multi-user.target # 设置开机启动放到哪个运行级别
  4. 重载所有修改过的配置文件,扫描新的或有变动的单元
    systemctl daemon-reload
  5. 把myapp服务加入开机启动
    systemctl enable myapp.service
  6. 启动myapp服务后程序执行
    systemctl start myapp.service
  7. 关闭myapp服务
    systemctl stop myapp.service

Tips: 查看myapp服务状态使用systemctl status myapp.service

本文标题:Linux基础

文章作者:xugz

发布时间:2019年10月23日 - 17:02

最后更新:2021年09月11日 - 16:42

原始链接:https://xlline.github.io/2019/10/23/Linux-base/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。