后面也会持续更新,学到新东西会在其中补充。
建议按顺序食用,欢迎批评或者交流!
缺什么东西欢迎评论!我都会及时修改的!
在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频
王晓春老师的个人空间-王晓春老师个人主页-哔哩哔哩视频
Linux是多用户的操作系统
切换级别
runlevel可以查看当前级别
3 代表字符 5 代表图形 6 代表重启 0 关闭
[root@Rocky ~]# runlevel
N 3
init可以切换级别
N 代表上一次没有等级 3 代表上一次等级是 3
[root@Rocky ~]# runlevel
N 3
[root@Rocky ~]# init 5
[root@Rocky ~]# runlevel
3 5
上一次等级 当前等级
etc 目录相当于 注册表
bin 目录相当于 program files
登录
登录后欢迎词
修改/etc/motd 文件
ha ha ha:
Activate the web console with: systemctl enable --now cockpit.socketLast login: Thu Nov 14 22:19:41 2024 from 192.168.111.1
[root@Rocky ~]# cat /etc/motd
ha ha ha:
linux登录界面配置、\etc\motd有趣的图案_linux 如来-CSDN博客
登录前提示
\S 为Linux版本
\S
Kernel \r on an \m
登录前不要写啥welcome免得黑客就来咯
[root@Rocky ~]# cat /etc/issue
xiaowang
\S
Kernel \r on an \m
shell入门
我们敲命令行的时候,shell在后台悄悄运行帮我们翻译我们的命令行,翻译成机器所认识的。
底层硬件 上面是操作系统 再上面是应用程序
应用程序也好软件也好都是通过系统调用和操作系统打交道。
可以把系统调用理解成银行,用户不能直接进入金库。
但是系统调用太底层所以用shell 到 系统调用 到操作系统内核。
主流的是bash shell
查看当前shell类型
[root@Rocky ~]# echo $SHELL
/bin/bash
查看各种类型的shell类型
[root@Rocky ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
查看后台运行的shell
[root@Rocky ~]# ps aux
root 1087 0.0 0.2 8688 5248 pts/0 Ss 09:24 0:00 -bash
查看主机名centos
[root@Rocky ~]# hostname
Rocky
[root@Rocky ~]# cat /etc/hostname
Rocky
[root@Rocky ~]# hostnamectlStatic hostname: Rocky
Transient hostname: bj-yz-k8s-node1-100-10.xiaowang.com
注意:主机名不要使用下划线
临时修改主机名
[root@Rocky ~]# hostname bj-yz-k8s-node1-100-10.xiaowang.com
临时主机名用的是bj-yz-k8s-node1-100-10.xiaowang.com
[root@Rocky ~]# hostnamectlStatic hostname: Rocky
Transient hostname: bj-yz-k8s-node1-100-10.xiaowang.com
临时修改重启就没了! 因为临时修改的是存在内存(主存里)而写入
写入文件才是写入到磁盘(辅存里面)
[root@xiaowang ~]# hostname Rocky
[root@xiaowang ~]# reboot
可以看见重启以后我们修改的主机名没有被修改
[root@xiaowang ~]#
永久修改主机名
hostnamectl相当于修改了静态和临时主机名 也就是修改了磁盘文件和内存
root@ubuntu1804:~# hostnamectl set-hostname ubuntu
root@ubuntu1804:~# hostname
ubuntu
root@ubuntu1804:~# cat /etc/hostname
ubuntu
[root@RockyLinux ~]# hostnamectl set-hostname xiaowang
[root@RockyLinux ~]# hostnamectlStatic hostname: xiaowang
exit 退出查看主机名已经被修改
[root@xiaowang ~]#hostnamectl set-hostname RockyLinux
[root@xiaowang ~]#exit
[root@RockyLinux ~]#
查看IP地址
[root@Rocky ~]# hostname -I
192.168.111.5
查看主机名ubuntu
wang@ubuntu1804:~$ cat /etc/hostname
ubuntu1804
wang@ubuntu1804:~$ whoami
wang
root@ubuntu1804:~# who am i
wang pts/0 2024-11-15 01:43 (192.168.111.1)
root@ubuntu1804:~# who is nb
wang pts/0 2024-11-15 01:43 (192.168.111.1)
root@ubuntu1804:~# who is sb
wang pts/0 2024-11-15 01:43 (192.168.111.1)
只有root 用户能切换hostname 需要sudo -i切换为root 用户
wang@ubuntu1804:~$ hostname xiaowang
hostname: you must be root to change the host name
修改临时主机名
root@ubuntu1804:~# hostname xiaowang
root@ubuntu1804:~# hostnamectlStatic hostname: ubuntu1804
Transient hostname: xiaowang
永久修改主机名
root@ubuntu1804:~# hostnamectl set-hostname ubuntu
root@ubuntu1804:~# hostname
ubuntu
root@ubuntu1804:~# cat /etc/hostname
ubuntu
终端格式centos
[root@xiaowang ~]#
[root@xiaowang ~]# echo $PS1
[\u@\h \W]\$
同样的修改PS1还是修改内存重启就恢复了
[root@xiaowang ~]# PS1=xiaowang
xiaowangls
anaconda-ks.cfg
xiaowangreboot
终端格式Ubuntu
root@ubuntu1804:~# echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
加颜色可以分别测试环境或者生产环境
[root@xiaowang ~]# PS1="\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]"
[root@xiaowang ~]#
永久修改终端样式
写到/etc/profile.d/env.sh文件里面
[root@xiaowang ~]#echo 'PS1="\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]"' > /etc/profile.d/env.sh
[root@xiaowang ~]#reboot
执行命令(内部和外部)
内部命令
[root@xiaowang ~]#ll /bin/bash
-rwxr-xr-x. 1 root root 1389024 Apr 30 2024 /bin/bash
这bash相当于一个工具箱,里面集成了很多内置的小工具。这些小工具称为内部命令。
外部命令
ls 命令在bash外就是外部命令
[root@xiaowang ~]#ll /bin/ls
-rwxr-xr-x. 1 root root 140872 Apr 21 2024 /bin/ls
辨别外部或者内部命令
输入一个命令先查看是不是内部命令,内部命令集成在shell中加载在内存里,不是内部命令外部命令是磁盘文件,就需要从磁盘加载到内存里。
[root@xiaowang ~]#type hostname
hostname is /usr/bin/hostname
如果是内部命令,不会显示路径的。
这个就是内部命令
[root@xiaowang ~]#type echo
echo is a shell builtin
若一个命令不是内部命令,那怎么找到外部命令呢?
外部路径的存放是有规定的
顺序是从左到右查看是否有符合的外部命令
[root@xiaowang ~]#echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
xxx既不是外部命令也不是内部命令!
[root@xiaowang ~]#xxx
-bash: xxx: command not found
hashed缓存
root@ubuntu1804:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
root@ubuntu1804:~# type hostname
hostname is hashed (/bin/hostname)
假如执行过这个hostname 会记录在hashed(哈希)内存里面效率就提高了
root@ubuntu1804:~# hash
hits command3 /usr/bin/hostnamectl2 /bin/hostname1 /bin/cat2 /bin/ls1 /usr/bin/mesg
hash 列出了曾经执行过的外部命令的路径
hit 代表命令率
hash 可以提高搜索外部命令的效率
假如缓存的命令路径被改动了
hash已经记录了路径
[root@xiaowang ~]#hostname
xiaowang
[root@xiaowang ~]#hash
hits command1 /usr/bin/whereis1 /usr/bin/hostname
查看环境变量
[root@xiaowang ~]#echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
移动bin文件
[root@xiaowang ~]#mv /usr/bin/hostname /root/
报错了因为找的还是老文件位置
[root@xiaowang ~]#hostname
-bash: /usr/bin/hostname: No such file or directory
清除所有缓存
[root@xiaowang ~]#hash -r
没有放入环境变量所含有的路径就会报错
[root@xiaowang ~]#hostname
-bash: hostname: command not found
放入满足环境变量路径
[root@xiaowang ~]#mv /root/hostname /usr/local/sbin/
[root@xiaowang ~]#hostname
xiaowang
[root@xiaowang ~]#type hostname
hostname is hashed (/usr/local/sbin/hostname)
发现路径为/usr/local/sbin/hostname
恢复原样
[root@xiaowang ~]#mv /usr/local/sbin/hostname /usr/bin/
[root@xiaowang ~]#hash
hits command2 /usr/bin/mv3 /usr/bin/ls2 /usr/local/sbin/hostname
指定删除hash缓存
[root@xiaowang ~]#hash -d hostname
[root@xiaowang ~]#hash
hits command2 /usr/bin/mv3 /usr/bin/ls
恢复成功!
[root@xiaowang ~]#hostname
xiaowang
[root@xiaowang ~]#type hostname
hostname is hashed (/usr/bin/hostname)
显示内部命令
help
root@ubuntu1804:~# help
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.A star (*) next to a name means that the command is disabled.job_spec [&] history [-c] [-d offset] [n] or history ->(( expression )) if COMMANDS; then COMMANDS; [ elif COMMAN>. filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x co>
...
enable
root@ubuntu1804:~# enable
enable .
enable :
enable [
enable alias
...
既是外部命令也是内部命令
首先按逻辑来说肯定是先运行内部命令的 那么外部命令是不是就没有作用了呢?
[root@xiaowang ~]#type -a echo
echo is a shell builtin
echo is /usr/bin/echo
enable可以禁用内部命令
在开头用*代表禁用了echo
[root@xiaowang ~]#enable -n echo
[root@xiaowang ~]#help
*echo [-neE] [arg ...] time [-p] pipeline
再用type查看echo变成外部命令了
[root@xiaowang ~]#type echo
echo is /usr/bin/echo
恢复echo
[root@xiaowang ~]#enable echo
[root@xiaowang ~]#type echo
echo is a shell builtin
假如把enable 禁用
等待神仙救结果神仙也要求救
[root@xiaowang ~]#enable -n enable
[root@xiaowang ~]#enable
-bash: enable: command not found
直接exit 退出重连就行,只是写入内存并没有写入磁盘。
. 和 source
. 和 source 可以让配置文件快速生效
[root@xiaowang ~]#vi /etc/profile.d/env.sh
[root@xiaowang ~]#cat !*
cat /etc/profile.d/env.sh
PS1="\[\e[1;34m\][\u@\h \W]\\$\[\e[0m\]"
[root@xiaowang ~]#. !*
. /etc/profile.d/env.sh
[root@xiaowang ~]#vi /etc/profile.d/env.sh
[root@xiaowang ~]#cat !*
cat /etc/profile.d/env.sh
PS1="\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\]"
[root@xiaowang ~]#source !*
source /etc/profile.d/env.sh
[root@xiaowang ~]#
which
which查看外部命令的搜索路径的
[root@xiaowang ~]#which echo
/usr/bin/echo
[root@xiaowang ~]#which reboot
/usr/sbin/reboot
whereis
显示外部命令+帮助文档的路径
[root@xiaowang ~]#whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
命名别名
可以把觉得命令比较长的很麻烦可以起别名
比如这个命令比较长难以记忆
[root@xiaowang ~]#cd /etc/sysconfig/network-scripts/
首先要type判断命令是否存在
[root@xiaowang ~]#type cdnetwork
-bash: type: cdnetwork: not found
命令别名 "" ‘’都可以
[root@xiaowang ~]#alias cdnetwork="cd /etc/sysconfig/network-scripts/"
[root@xiaowang ~]#type cdnetwork
cdnetwork is aliased to `cd /etc/sysconfig/network-scripts/'
这个命令也是临时定义重启就没了
[root@xiaowang ~]#cdnetwork
-bash: cdnetwork: command not found
永久保存别名.bashrc /etc/bashrc是针对所有用户来说的
root@ubuntu1804:~# . .bashrc
~ 代表家目录
[root@xiaowang ~]#
root@ubuntu1804:~#
利用.bashrc永久修改别名
root@ubuntu1804:~# ls -a
. .. .bash_history .bashrc .profile .ssh
修改.bashrc文件
alias cdnetwork='cd /etc/sysctl.d/'
生效文件
root@ubuntu1804:~# . .bashrc
成功!
root@ubuntu1804:~# cdnetwork
root@ubuntu1804:/etc/sysctl.d#
别名 内部 外部 优先级
优先级是这样的
将内部命令改成别名
[root@xiaowang ~]#alias cd="cd /etc/sysconfig/network-scripts/"
[root@xiaowang ~]#cd
[root@xiaowang network-scripts]#pwd
/etc/sysconfig/network-scripts
type查看一下
[root@xiaowang network-scripts]#type cd
cd is aliased to `cd /etc/sysconfig/network-scripts/'
恢复原样
[root@xiaowang network-scripts]#unalias cd
[root@xiaowang network-scripts]#type cd
cd is a shell builtin
若不想执行别名想执行内部命令
\就是执行原始命令不执行别名
root@ubuntu1804:~# alias enable='hostname -I'
root@ubuntu1804:~# enable
192.168.111.8
root@ubuntu1804:~# \enable
enable .
enable :
enable [
在不重启电脑判断是否新增硬盘
首先要明确一个目的在生产环境中,不能盲目重启的!
查看磁盘分布情况
root@ubuntu1804:/etc/sysctl.d# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 4G 0 part [SWAP]
└─sda5 8:5 0 1G 0 part /boot
sr0 11:0 1 969M 0 rom
新增一块硬盘
再次查看磁盘分布情况 发现新加硬盘没有显示出来
root@ubuntu1804:/etc/sysctl.d# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 4G 0 part [SWAP]
└─sda5 8:5 0 1G 0 part /boot
sr0 11:0 1 969M 0 rom
输入命令
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
echo "- - -" > /sys/class/scsi_host/host3/scan
echo "- - -" > /sys/class/scsi_host/host4/scan
echo "- - -" > /sys/class/scsi_host/host5/scan
echo "- - -" > /sys/class/scsi_host/host6/scan
echo "- - -" > /sys/class/scsi_host/host7/scan
echo "- - -" > /sys/class/scsi_host/host8/scan
echo "- - -" > /sys/class/scsi_host/host9/scan
echo "- - -" > /sys/class/scsi_host/host10/scan
echo "- - -" > /sys/class/scsi_host/host11/scan
echo "- - -" > /sys/class/scsi_host/host12/scan
echo "- - -" > /sys/class/scsi_host/host13/scan
echo "- - -" > /sys/class/scsi_host/host14/scan
echo "- - -" > /sys/class/scsi_host/host15/scan
echo "- - -" > /sys/class/scsi_host/host16/scan
echo "- - -" > /sys/class/scsi_host/host17/scan
echo "- - -" > /sys/class/scsi_host/host18/scan
echo "- - -" > /sys/class/scsi_host/host19/scan
echo "- - -" > /sys/class/scsi_host/host20/scan
echo "- - -" > /sys/class/scsi_host/host21/scan
echo "- - -" > /sys/class/scsi_host/host22/scan
echo "- - -" > /sys/class/scsi_host/host23/scan
echo "- - -" > /sys/class/scsi_host/host24/scan
echo "- - -" > /sys/class/scsi_host/host25/scan
echo "- - -" > /sys/class/scsi_host/host26/scan
echo "- - -" > /sys/class/scsi_host/host27/scan
echo "- - -" > /sys/class/scsi_host/host28/scan
echo "- - -" > /sys/class/scsi_host/host29/scan
echo "- - -" > /sys/class/scsi_host/host30/scan
echo "- - -" > /sys/class/scsi_host/host31/scan
echo "- - -" > /sys/class/scsi_host/host32/scan
再次检查成功!
root@ubuntu1804:/sys/class/scsi_host# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 4G 0 part [SWAP]
└─sda5 8:5 0 1G 0 part /boot
sdb 8:16 0 20G 0 disk
sr0 11:0 1 969M 0 rom
参考文献
2Linux的基本使用和配置_哔哩哔哩_bilibili
3Linux执行命令的过程详解和命令类型_哔哩哔哩_bilibili
总结
所有命令都需要反复敲来实验来记忆,本人基本上是个人理解加参考其他大佬的肯定有很多问题欢迎指正,我会及时修改。