Linux 的基础
linux, 一切皆文件
定时任务#
定时循环任务crontab#
【-e】 新增任务,格式 【*/1 * * * * echo "1111" >> /root/to.txt】
【-l】 查看用户所有任务
【-r】 删除用户所有的任务
定时一次性任务 at#
第一步:at【时间】
第二步:回车后输入对应脚本
第三步:按两下ctrl+d,即可加入一次性任务队列
第四部:atq是查看任务数量
例:
at now + 2 minutes
date > /root/datelog.log 【按两下ctrl+d完成加入队列】
时间函数#
显示 2023-07-21 01:38:15
date "+%Y-%m-%d %H:%M:%S"
切换用户,关机,集群连接ssh#
# 切换用户
su -root
#注销用户
logout -root
# 把内存数据同步到磁盘
sync
# 立即关机
shutdown -h now
# 一分钟后关机
shutdown -h 1
# 立即重启
shutdown -r now
# ssh连接
ssh root@192.168.1.1
【如果ssh访问出错,删除/.ssh/known_ssh/】
网卡调试:#
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPADDR="192.168.0.76"
NETMASK="255.255.255.0" # 子网掩码
GATEWAY="192.168.0.254" # 网关地址
DNS1="114.114.114.114" # DNS服务器
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="1206602f-ecc9-46f7-a411-2a8a1623f7ac"
DEVICE="ens33"
ONBOOT="yes"
目录结构#
1) /bin : 是binary的缩写,存放着经常使用的命令
2) /sbin :supper binary,存放着系统管理员使用的系统管理程序
3) /etc : 存放配置文件和子目录(如 安装mysql数据库 my.conf)
4) /usr : Unix System Resource(系统资源)的缩写,(如 window上的C盘program files)
5) /usr/lib : 系统自带软件如python文件会在这里,理解为C:/Windows/System32
6) /usr/local
: 编译的软件默认会安装到这个目录下(可以理解为 C:/Progrem Files/)
7) /opt
: 自定义安装软件存放的目录,不要可以直接rm -rf掉 (可以理解为 D:/Software)
8) /lib : library软件库,动态链接共享库,应用程序都需要用到(类似于window的dll文件)
9) /dev : device(设备)的缩写,设备管理器
10) /media
: 识别设备如U盘、光驱,识别后挂载到这里
11) /mnt
: mnt是mount(登上; 爬上; 攀登; 骑上; 乘上; 跨上 可直接理解为“挂载”)的缩写
12) /tmp : temp的缩写,临时文件目录
13) /home : 每个用户都有一个目录
14) /root : 超级权限着的用户目录
15) /var : variable(多变的)的缩写,是用于存储系统运行时要改变数据的目录;该目录存储的文件经常会发生变化,常用于部署项目程序文件(日志文件)
16) /lost+found : 一般情况是空的,系统非法关机后会存放一些文件
17) /selinux : security-enhanced linux, 是安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可自行调试
18) /proc : 不能动的目录, 系统内存映射目录
19) /srv : 不能动的目录,service的缩写,服务器启动后需要提取的数据
20) /sys : 不能动的目录, 这是linux2.6内核的一个变化,该目录下安装了2.6内核中新出现的文件系统sysfs
组group,用户user#
# 组:
增删改查: groupadd oneteam 、 groupdel oneteam 、 groupmod、 在/etc/group里
# 用户:
增:useradd -g oneteam tom (新增用户且加到oneteam这个组里)、
删:userdel tom(home用户记录)、userdel -r tom (删除且删除文件)
改:usermod -g mojie qqq(更改用户的分组)、 passwd tom (修改tom的密码)
在/home上用ll指令看,没有拥有者的就是删除了的
文件/目录操作#
# 创建目录:
mkdir 【directoryname】 【-p : 创建多级目录】
# 创建文件:
touch 【filename】
# 删除:
rm -rf 【目录,文件】
-r 递归
-f 不提示
# 复制(递归):
cp -r 【文件路径】 【新路径】
# 剪切/改名:
mv 【文件路径】 【新路径】
mv 【旧名】 【新名】
# 软连接创建 :
ln -s 【原文件路径】 【软连接名】
# 压缩:
.gz
文件压缩: gzip 【文件路径】
文件解压:gunzip 【文件路径】
.zip
目录压缩: zip -r 【目录路径】
unzip 【目录路径】
两者都可压缩 .tar.gz
tar -zcvf 【加压后文件名】【文件1】 【文件2】 【目录1】
tar -zxvf baobao.tar.gz
-z 打包同时压缩
-v 显示详细信息
-f 指定压缩后的文件名
-c 产生.tar 打包文件
-x 解包.tar 文件
-C 解压到指定目录
目录ll权限#
修改目录权限#
# 修改目录权限 own为7,组内人员为5,组外人员为5
chmod 755 【目录名】
# 修改目录拥有者
chown -R 【用户名】 【目录名】
# 修改目录所在组
chgrp -R 【组名】 【目录名】
rwx权限详解#
read, write, execute
# rwx在文件里
r:可以读取,查看
w:可以修改,不能删除文件(要目录有w才能删除)
x:可以被执行
# rwx在目录里
r:可以ls
w:可以创建,删除,重命名
x:可以cd
找文件,目录的路径#
1) find搜索
find 【路径范围】 【-name, -user, -size】
语法:find / -name 1.txt
2) which 软件
whereis 软件
3) updatedb之后
locate [文件名]
.bz2 (压缩后文件更小)#
文本#
编辑文本#
# vim 编辑器
- yy是拷贝,p是粘贴
- y5y复制5行
- dd是删除
- set nu 是显示行号
- G是跳到末尾,gg是跳到首行
# 重定向:
cat 3.txt > 2.txt
>是覆盖,>>是追加
## 追加多行
cat >> 1.txt << EOF
>第一行
>第二行
>EOF
cat查看文本方式#
# 查看文件带行号:
cat -n 1.txt
# 一点点查看文件显示行号:
less -N 1.txt (找字符:/字符 , q是退出)
# cat 配合管道符| 和 其他指令全集
grep(行筛选)
cut(列分割):【cut -d '/' -f 3- 】 以'/'为分割点,拿第三段以后全部列
awk (行列都筛选)【awk -F : '/^root/{print $1","$7}'】 以 root 开头的所有行,以:分割并输出第 1 列和第 7 列
------ awk -v i=1 -F : '{print $3+i}' passwd ------ -v 代表插入变量
------ echo"15912345678” grep -E <1[34578][0-9]9J$ ------ -E 代表支持多正则规则
sed (行筛选-n p,删除d,替换c,插入a/i)
# 行筛选(找1~3行) ifconfig | sed -n "1,3p"
# 行筛选(找时间段) ifconfig | sed -n '/11:02:10/, /12:00:00/p'
# 删除第2,3行 ifconfig | sed '2,3d'
# 替换第2行 ifconfig | sed '2c xxxxxxxxxx'
sed (列筛选 后向引用-r(正则支持) "s###g")
# ifconfig | sed -r 's#(^.*inet)(.*$)#\2#g'
unqi(去重):【uniq -c】 去重并且在前面显示 重复数
sort(排序):
head 数字 (看前10条)
tail 数字 (看后10条)
正则匹配#
1)特殊字符:^
^ 匹配一行的开头,例如:
[atguigu@hadoop101 shells]$ cat /etc/passwd | grep ^a 会匹配出所有以 a 开头的行
2)特殊字符:$
$ 匹配一行的结束,例如
[atguigu@hadoop101 shells]$ cat /etc/passwd | grep t$
会匹配出所有以 t 结尾的行
3)特殊字符:.
. 匹配一个任意的字符,例如
[atguigu@hadoop101 shells]$ cat /etc/passwd | grep r..t
会匹配包含 rabt,rbbt,rxdt,root 等的所有行
4)特殊字符:*
* 不单独使用,他和上一个字符连用,表示匹配上一个字符 0 次或多次,例如
[atguigu@hadoop101 shells]$ cat /etc/passwd | grep ro*t
会匹配 rt, rot, root, rooot, roooot 等所有行
5)字符区间(中括号):[ ]
[ ] 表示匹配某个范围内的一个字符,例如
[6,8]------匹配 6 或者 8
[0-9]------匹配一个 0-9 的数字
[0-9]*------匹配任意长度的数字字符串
[a-z]------匹配一个 a-z 之间的字符
[a-z]* ------匹配任意长度的字母字符串
[a-c, e-f]-匹配 a-c 或者 e-f 之间的任意字符
[atguigu@hadoop101 shells]$ cat /etc/passwd | grep r[a,b,c]*t
会匹配 rt,rat, rbt, rabt, rbact,rabccbaaacbt 等等所有行
[0-9]后面规定重复出现9次 ,实例
echo "15910100009" | grep -E ^1[34567][0-9]{9}$
6)特殊字符:\
\ 表示转义,并不会单独使用。
ps (进程状态 process-state )(top是动态监控进程的指令)#
杀死进程
kill 【-9 强制】 【pid号】
ps
【-a】前端进程
【-x】后台进程
【-u】用户经常
【-e】显示所有进程
【-f】全部格式显示
netstat -ant 查看服务,端口号,协议#
netstat -anp | grep 3306
【-an】顺序输出
【-p】显示哪个在调用
systemctl (服务,开机自启)#
# 服务启动/重启...
systemctl start/stop/restart/status
# 设置开机自启
systemctl enable 服务d
# 关闭开机自启
systemctl disable 服务d
# 查看服务是否开机自启
systemctl is-enabled 服务d
防火墙开端口#
# 打开/关闭端口
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --remove-port=3306/tcp
# 重新加载防火墙
firewall-cmd --reload
# 查看端口是否开放
firewall-cmd --query-port=3306/tcp
软件安装#
# 查询是否安装
rpm -qi firefox
# 查看软件文件
rpm -ql firefox
# rpm安装(install,verbose提示,hash进度条)
rpm -ivh 【rpm包】
# 卸载rpm包(erase抹除)
rpm -e 【rpm软件】
rpm -e --nodeps 【rpm软件】
环境变量配置#
# 文件拷贝解压在 /opt/jdk
tar -zxvf jdk-8u..tar.gz
# 剪切到 /usr/local/java
mv /opt/jdk/jdk-8u.. /usr/local/java
# 打开环境变量配置文件
vim /etc/profile
# 在profile配置文件最后加入
export PATH=/user/local/java/bin:$PATH
# 重启profile配置文件
source /etc/profile
磁盘:#
查看磁盘可用空间:disk free
df -h
查看当前目录占用空间: disk usage
du -h
【--max-depth=1】子目录深度
shell#
shell文件后缀#
xxx.sh
shell编程的的开头#
#!/bin/bash
shell的执行方式#
#三种方式
sh /root/hello.sh
source /root/hello.sh
. /root/hello.sh
#直接文件打开
chmod 755 hello.sh
输入#
实例
read -t 10 -p '请输入您的名字' name
echo “welcome, $name”
-t 等待时间
-p 提示信息
name 接收名字
变量#
系统变量#
如:$HOME, $PWD, $SHELL, $USER
查看全局变量用 env
查看局部变量用 set
自定义变量(脚本中)#
定义: NAME="Jan" // 注意=不要空格
调用: echo "$NAME"
删除: unset NAME
定义只读变量 readonly NAME = "haha"
环境变量 (/etc/profile)#
1) export PATH="$PATH:/root/aaa" 保存
2) source /etc/profile
调用脚本时的参数#
传参方法:sh ./xxx.sh 【参数1】 【参数2】
$n $0指当前脚本名字 ,$1指第一个参数, $2指第二个参数...
$# 计算调用shell脚本时,总共传来了几个参数
$* 以字符串类型列出参数
$@ 以数组类型列出参数
$? 看返回的值
运算#
1) SUM=$((1+2))
2) SUM=$[1+2]
echo $SUN
条件判断#
#判断 [ condition ] , 前后必须有空格
[ 8 -gt 2 ]
[ -r 文件 ]
# 输入 echo $? 查看结果如果为0即true
# 判断数值
-eq 等于(equal)
-ne 不等于(not equal)
-lt 小于(less than)
-gt 大于(greater than)
# 判断文件
-r 有无读权限 ...
-e 文件存在(existence)
-f 是否为文件,是否存在(file)
-d 是否为目录,是否存在(directory)
流程控制#
分支#
# 第一种方法
if [ $a -eq 18 ];then echo ok;elif [ $a -lt 17 ];then echo 'small';else echo 'better';fi
# 第二种方法
#!/bin/bash
if [ $a -eq 18 ]
then
echo ok
elif [ $a -lt 17 ]
then
echo 'small'
else
echo 'better'
fi
循环#
sum=0;for((i=1;i<=100;i++));do let sum+=i;done;echo $sum
sum=0;for i in {1..100};do let sum+=i;done;echo $sum
sum=0;i=1;while((i<=100));do let sum+=i;let i++;done;echo $sum
函数#
#!/bin/bash
function sum()
{
s=0
s=$[$1+$2]
echo "$s"
}
basename 与 dirname#
[atguigu@hadoop101 shells]$ basename /home/atguigu/banzhang.txt
banzhang.txt
[atguigu@hadoop101 ~]$ dirname /home/atguigu/banzhang.txt
/home/atguigu
备份数据库(定时打包数据库tar.gz)#
路径变成只有文件名 或 只有路径#
ubuntu#
创建用户只有$符: usermod -s /bin/bash <需要更改bash的用户名>
日志#
自定义日志#
日志轮替策略#
查看内存日志 journalctl#
ubuntu apt下载源更改#
安装webmin#
安装宝塔#
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)