最近在云之梦网站学习Linux基础,发现有好多基础命令见面不相识……此篇作为学习笔记,利用零碎的时间终于完成课程学习,该篇添加常用命令以方便后续翻阅参考。
操作系统
操作系统分类
- 客户端操作系统
windows 7,8,10等 - 服务器端操作系统
- windows server 2019
- linux操作系统
- centos
- redhat enterprise linux rhel
- ubuntu
- debian
- suse
- opensuse
- freebsd
- aliyun linux
- coreos
- unix操作系统
常用命令
Linux查看版本当前操作系统内核信息uname -a
Linux查看当前操作系统版本信息cat /proc/version
Linux查看版本当前操作系统发行版信息cat /etc/redhat-release
查看centOS版本cat /etc/centos-release
查看内存free
orfree -m
orfree -g
查看硬盘df
ordf -T
ordf -h
查看系统正在登录的用户who
查看系统最后一重要操作last
查看进程实时消耗的cpu和内存top
查看系统1分钟、5分钟和15分钟平均负载uptime
查看服务进程ps -ef
orpstree
==!ps
查看服务端口netstat -tunpl
杀掉进程kill -9 pid
orpkill pname
系统启动流程
- BIOS加电自检
- 把MBR加载到内存
- 加载grub
- Kernel自身初始化
- 启动第一个程序systemd
- 检查默认运行级别
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`
- 启动相应级别下的所有程序服务
- 加载/etc/rc.d/rc.local脚本
直接在/etc/rc.d/rc.local文件中追加即可,例如systemctl start sshd.service
Tips:在CentOS8版本改文件需要手动增加执行权限,使用命令chmod +x /etc/rc.d/rc.local
- systemd执行multi-user.target下的getty.target及登录服务
- systemd执行graphical需要的服务
Root用户破解流程
- 开机后页面 按e进入LINUX内核编辑模式
- 在quiet后加入 rd.break
- 按ctrl+x进入swtch_root模式
- 使用命令
mount -o remount,rw /sysroot
重新挂载根分区 - 使用命令
chroot /sysroot
切换根分区 - 使用命令
passwd root
修改root的密码,必须是8位以上复杂密码 当前设置的是 xUGZ1030 - 使用命令
touch /.autorelabel
让selinux在重启后更新label 不执行该句新设置密码不会保存 等到进度条加载完成后可退出 验证新密码是否有效 - 使用命令
exit
退出 - 使用命令
reboot
重启系统 - 最后用root和新密码登录即可
防火墙
Selinux防火墙: 文件级防火墙
- 使用命令
sestatus
查看selinux防火墙状态 - 关闭防火墙
使用命令vi /etc/selinux/config
进入selinux配置文件 将SELINUX状态改成关闭 使用命令SELINUX=disabled
- 使用命令
init 6
重启
firewalld防火墙: 网络级防火墙
- 使用命令
systemctl status firewalld
查看 firewalld防火墙状态 - 使用命令
systemctl stop firewalld
关闭 该命令只能暂时关闭 开机关闭需要另设 - 使用命令
systemctl disable firewalld
设置开机关闭
iptables防火墙: 网络级防火墙 常用
- 使用命令
iptables -L -n
查看规则 - 使用命令
iptables -F
清空规则 - 使用命令
service iptables save
保存规则 (如果不能保存 查询是否已安装iptables-service包)
主机名管理
- 查看主机名(localhost)
hostname
- 查看主机名与系统详情
hostnamectl status
- 临时修改
hostname yzmedu
- 永久修改
1) 直接修改文件
vi /etc/hostname
2) hostnamectl方法
hostnamectl set-hostname
3) 重启生效
init 6
网络管理
直接修改文件
vi /etc/sysconfig/network-scripts/ifcfg-ens32
1 | BOOTPROTO=dhcp | static |
修改完成成功重启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已经淘汰掉了,不建议使用。
- 查看网络设备状态
nmcli device status
- 查看ens32网卡的相关信息
nmcli device show ens32
- 设置静态ip地址
nmcli connection modify ens32 ipv4.addresses '192.168.1.100'
- 设置DNS
nmcli connection modify ens32 ipv4.dns '114.114.114.114'
- 设置网关
nmcli connection modify ens32 ipv4.gateway '192.168.1.1'
- 设置IP地址为手动指定
nmcli connection modify ens32 ipv4.method manual
- 设置IP地址为dhcp自动获取
nmcli connection modify ens32 ipv4.method auto
- 设置开机自动连接
nmcli connection modify ens32 connection.autoconnect yes
- 重新加载ifcfg-ens32配置文件
nmcli connection reload
- 不重启系统让网卡生效的方法
1
2
3nmcli connection up ens32
nmcli device connect ens32
nmcli device reapply ens32
系统目录结构
1 | /bin 存放二进制可执行文件(ls,cat,mkdir等),存放系统命令 |
基础命令
- 历史命令查看用
history
, 使用history -c
清除历史命令 - 强制中断正在执行的操作 ctrl+c
- 清空当前屏幕
clear
或ctrl+l - 记录最近两次使用的目录
cd -
文件管理
- 新建修改和删除
创建文件touch file1
批量创建文件touch file{1..9}
编辑文件vi file2
修改文件名 mv file1 file2
删除文件rm -rf file
- 查看文件内容
全文查看文件内容cat file4
分页查看文件内容more file4
跟踪文件数据tail -f file1
查看文件前十行数据head file1
orhead -10 file1
查看文件后十行数据tail flle1
ortail -10 file1
- 复制和文件
复制文件cp file1 file2
移动文件mv file1 file2
- 查找文件
查找文件名为file1的文件find / -name file1
快速查找文件名为file1的文件updatedb;locate file1
查找file1文件中linux字符cat file1 | grep linux
orgrep 'linux' file1
查找file1文件中linux字符 忽略大小写grep -i 'linux' file1
Vi编辑器
Vi是Unix及Linux系统下标准的编辑器,由美国加州大学伯克利分校开发。学会它后,你将在Linux的世界里畅行无阻。基本上vi可以分为三种状态,分别是命令模式、插入模式,和底行模式。
Vi编辑器的模式
- 命令模式 command
- 输入模式 insert
- 末行模式 :末行命令
- 视图模式 visual
常用模式切换
命令模式 => 输入模式
输入模式 => 命令模式 按下esc
命令模式 => 末行模式 使用 shift+:
输入x
保存退出
末行模式 => 命令模式 按下esc
命令模式 => 视图模式 使用v
按v
键再按上下左右进行视图选中,进行快速缩进
命令模式常用命令
上k
下j
左h
右l
撤销用u
恢复用ctrl+r
(撤销多了恢复,两个配合使用)
复制当前行 yy
复制多行 nyy
, 比如3yy
为复制三行
粘贴到下一行 p
, 粘贴到下一行n次 np
. 粘贴到上一行 P
, 粘贴到上一行n次 nP
单字符替换用r
, 按过r
后直接输入需要替换的字符即可
查找用 /
, 查找下一个结果用 n
到最后一行首用G
, 到指定行首用nG
, 比如3G
为到第三行行首
从当前行删除到最后一行 dG
(当前行也会删除哦), 从当前行删除到第n行 dnG
删除一个单词用 dw
n
删除并剪切一行用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 | /etc/passwd 用户信息 |
删除用户 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 | cd /etc/yum.repos.d/ |
vi CentOS-Media.repo
进行配置文件编辑 下面对应配置需要对照
1 | [c8-media-BaseOS] |
查看yum可控制的软件包yum list | wc -l
或者 yum list | grep iptables
yum安装rpm软件包
yum -y install iptables-service
1 | yum check-update // 列出所有可更新的软件清单 |
权限管理
查看文件权限 ls -l fileName
or ll
查看单个目录本身的权限 ll -d dirName
权限类型 r 读(4) w 写(2) x 执行(1) - 无权限(0)
权限详情
1 | 三段式 |
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 | visudo |
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 | #!/bin/bash |
创建用户
1 | #!/bin/bash |
内存判断
1 | #!/bin/bash |
循环输出
1 | #!/bin/bash |
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 | top // 显示进程信息 |
Cockpit Web系统监控
初始化 systemctl enable --now cockpit.socket
开启cockpit服务 systemctl start cockpit.service
查看cockpit状态 systemctl status cockpit.service
自定义服务脚本流程
需求:自定义startMyApp脚本,使用systemd服务管理放入开机自启动。用于练手systemcrl命令
- 创建文件
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 - 给脚本设置执行权限
chmod a+x startMyApp.sh
- 自定义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 # 设置开机启动放到哪个运行级别 - 重载所有修改过的配置文件,扫描新的或有变动的单元
systemctl daemon-reload
- 把myapp服务加入开机启动
systemctl enable myapp.service
- 启动myapp服务后程序执行
systemctl start myapp.service
- 关闭myapp服务
systemctl stop myapp.service
Tips: 查看myapp服务状态使用systemctl status myapp.service