Linux 入门学习笔记
1 Linux 目录结构
Linux的世界里,一切皆文件。
- /bin 存放着最经常使用的命令
- /sbin 存放的是系统管理员使用的系统管理程序。
- /home 存放普通用户的主目录,
- /root 该目录为系统管理员的用户主目录。
- /lib 系统开机所需要的最基本的动态连接共享库。
- /lost+found 这个目录一般为空,当系统非法关机后,这里就存放了一些文件。
- /etc 所有的系统管理所需要的配置文件和子目录。
- /usr 用户的很多应用程序和文件都存放再这个目录下。
- /boot 存放的是启动Linux 是使用的一些核心文件,包括一些连接文件及镜像文件。
- /proc 这个目录是一个虚拟目录,它是系统内存的映射,访问这个目录来获取系统信息
- /srv 存放一些启动之后需要提取的数据。
- /tmp 这个目录是用来存放临时文件的。
- /dev 把硬件用文件的形式存储。
- /media Linux会自动识别一些设备,例如U盘光驱等识别后,会挂载到这个目录下。
- /mnt 系统让用户临时挂载别的文件系统的。
- /opt 这是给主机额外安装软件的目录。
- /user/local 这是给主机额外安装软件所安装的目录。一般是通过编译源码的方式安装的程序。
- /var 这个目录中存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。
- /selinux 是一种安全子系统,它能控制程序只能访问特定文件。
2 登录linu
查看Linux的ip地址。
ifconfig
开启ssh服务
sudo apt-get install openssh-server #安装sshserver
sudo /etc/init.d/ssh restart #重启服务
sudo /etc/init.d/ssh stop #关闭服务
sudo /etc/init.d/ssh start #开启服务
使用xshell连接
3 vim 基本使用
3.1 vim三种模式
正常模式
以vim打开一个文件即进入正常模式。可以使用上下左右来控制光标查看文件。
插入模式
按下i,I,o,O,a,A,rR等任何一个字母即可进入插入模式。
命令行模式
用于输入相关指令,如存盘,替换,离开,显示行号等动作。
3.2 三种模式切换
命令行---->正常模式: vim xxx
正常模式----->插入模式: i
正常模式-----> 命令模式: :
命令模式/插入模式-----> 正常模式: esc
3.3 常用快捷键
拷贝当前行 : yy
删除当前行: dd
查找 : 命令行下 /关键字 回车。输入n就是查找下一个。
设置文件行号: set nu
取消行号: set nonu
定位到开始: gg
定位到结尾:GG
撤销: u (正常模式下)
快读定位行: 行号,shift+g (正常模式下)
4 关机&&重启
shutdown -h now #立刻关机
shutdown -h 1 #1分钟后关机
shutdown -r now #立刻重启计算机
reboot #重启
sync #把内存数据同步到磁盘
5用户管理
5.1 用户
#添加用户
useradd -m [用户名]
#为用户设置密码
passwd [用户名]
#删除用户(加上 -r 删除家目录)
userdel [用户名]
5.2 用户组
#添加一个组
groupadd [组名]
#删除组
groupdel [组名]
#修改用户组
usermod -g [组名] [用户名]
6 运行级别
- 0:关机
- 1:单用户[找回丢失密码]
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务
- 4:系统未使用
- 5:图形化界面
- 6:系统重启
7 基本指令
7.1 文件目录
pwd #显示当前目录
ls 选项 文件或者目录
-a: 显示所有文件和目录
-l:以列表的形式显示
cd 切换目录
cd ~ #回到家目录
cd .. #回到当前目录的上一级目录
mkdir #创建目录
mkdir -p #创建多级目录
rmdir #删除空目录
rm -rf #删除非空目录
-r #递归删除整个文件夹
-f #强制删除不提醒
touch #创建空文件
cp #拷贝文件
-r #递归复制整个文件夹
\cp -r #强制覆盖不提醒
mv odlname newname #重命名
mv xx xxx #移动文件
cat #查看文件内容
-n #显示行号
#为了浏览方便可以加上管道指令 | more
less #分屏查看内容 适合大文件查看
echo #输出到控制台
head -n 5 xx #查看文件前5行
tail #输出文件尾部内容
-n #指定行数
-f #实时追踪文件的更新
> #输出重定向
>> #追加
ln #软连接
history #查看曾经执行过的指令
7.2 时间日期
date #显示当前时间
date +%Y #显示当前年份
date +%m # 显示当前年份
date +%d # 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%s" #显示年月日时分秒
cal #查看日历
7.3 搜索查找
find #将从指令目录向下递归遍历其各子目录
-name #按照文件名
-user #查找指定用户名所有文件
-size #按照指定的文件大小差
+ 大于 - 小于 等于
locate #快速定位文件位置 ,第一次运行前要使用 updated
which #可以查看某个指令在哪个目录下
grep + |
#grep 过滤查找 “|” 表示将前一个命令的处理结果输出到传递给后面的命令处理
-n #显示匹配行
-i #忽略字母大小写
7.4 压缩和解压
gzip #压缩文件,只能压缩为 .gz文件
gunzip #解压文件
zip #压缩文件
-r #递归压缩,即压缩目录
unzip #解压文件
-d #解压后文件存放目录
tar #打包 打包后的文件是 .tar.gz 文件
-c # 产生 .tar 打包文件
-v #显示详细信息
-f #指定压缩后的文件名
-z #打包同时压缩
-x #解包 .tar 文件
7.5 权限管理
所有者
ls -ahl #查看文件所有者
chown 用户名 文件名 #修改文件所有者
组
chgrp 组名 文件名 #修改文件所在组
usermod -g 新组名 用户名 #改变用户所在组
usermod -d 目录名 用户名 #改变用户登录的初始目录
权限
ls -l 显示内容如下
drwxr-xr-x 3 ding ding 4096 Jan 8 01:53 Downloads
第0位确定文件类型(d,l,-,c,b)
d:是目录
l:是链接
c:是字符设备文件,鼠标,键盘
b:是块设备,比如硬盘。
-:是普通文件
第1-3位确定所有者拥有该文件的权限
第4-6位确定所属组拥有该文件的权限
第7-9位确定其他用户拥有该文件的权限
r:可读 =4
w:可写 =2
x:可执行 =1
chmod #修改文件或者目录权限(+,-,=)
-u 所有者 -g 所在组 -o其他人 -a 所有人
chown 新用户 文件 #改变所有者
chown 新组 文件 #改变所在组
chown 新用户:新组 文件 #改变所有者和所在组
-r #递归生效
8 定时任务调度
8.1 at 定时任务
ps -ef | grep atd #检查atd 进程是否启动
at 选项 时间 ctrl+d 结束at命令输入
-m #当前任务被完成后,将给用户发送邮件
-i #atq的别名
-d #atrm的别名
-v #显示任务将被执行的时间
-c #打印任务内容到标准输出
-V #显示版本信息
-q<队列> #使用指定队列
-f<文件> #从指定文件读入任务而不是标准读入
-t<时间参数> #以时间参数形式提交要运行的任务
#1:在当天的 hh:mm
#2:使用midnight noon teatime等
#3:xxAM 或者xxPM
#4: dd:mm YY-MM-DD
#5: now+count time-untis
#6:直接用today tomorrow
8.2 cron任务调度
crontab
-e #编辑crontab 定时任务
-l #查询crontab任务
-r #删除当前用户所有定时任务
#*:代表任何时间
#, :代表连续时间
#-:代表持续范围
#*/n :代表每隔多久执行一次
#第一*:一个小时当中的第几分钟
#第二*:一天中的第几个小时
#第三*:一个月当中的第几天
#第四*:一年之中第几个月
#第五*:一周当中的星期几 (0-7 0和7都是星期日)
9 磁盘分区
9.1 增加磁盘
lsblk #
#分区命令
fdisk /dev/sdx
开始对sdx进行分区
m 显示命令列表
p 显示磁盘分区 同fdisk -l
n 新增分区
d 删除分区
w 写入并保存
q 退出不保存
#格式化
mkfs -t ext4 /dev/sdxx
#挂载(命令行挂载,重启后会失效)
mount 设备名称 挂载目录
#卸载
umount 设备名称或者挂载目录
#永久挂载
修改 /etc/fstab 实现挂载,然后执行mount -a生效
9.2 磁盘情况查询
#查询系统整体磁盘使用情况
df -h
#查询指定目录的磁盘占用情况
du -h 目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录深度
-c 列出明细,增加汇总值
10 进程
10.1 进程管理
ps #查看目前系统中有那些正在执行,以及他们的执行状态
-a :显示当前终端所有进程信息
-u: 以用户的格式显示进程信息
-x:显示后台进程运行的参数
ps -ef #以全格式显示当前所有进程
system v 展示风格
user:用户名称
pid :进程号
%cpu :进程占用cpu 百分比
%mem :进程占用物理内存百分比
vsz :进程占用虚拟内存大学(KB)
rss:进程占用物理内存大小(KB)
tt:终端名称
stat:进程状态 S-:睡眠,s-表示该进程是会话的先导进程,N-表示该进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵尸进程,T-被跟踪或者被停止
started:进程启动时间
time:cpu时间
command:启动进程所用的命令和参数
#杀死进程
kill 选项 进程名
-9 强制杀死进程
killall 进程名
#查看进程树
pstree
-p:显示进程的pid
-u:显示进程的所属用户
10.2 服务管理
service 服务名 start | stop | restart | reload | status
chkconfig 给服务的各个级别设置自启动/关闭
chkconfig --list
chkconfig --level x 服务名 on/off
systemctl 服务名 start| stop | restart | status
systemctl lsit-unut-files 查看服务开机启动状态
systemctl enable 服务名 设置服务开机启动
systemctl disable 服务名 关闭服务开机启动
systemctl is-enable 查询某个服务是否自启动
firewall-cmd --permanent --add-port=端口号/协议 打开端口
firewall-cmd --permanent --remove-port=端口号/协议 关闭端口
firewall-cmd --reload 重新载入
firewall-cmd --query-port=端口/协议 查询端口是否开放
10.3 动态监控
top
交互
p 以cpu使用率来排序
M 以内存使用率来排序
N 以pid 来排序
q 退出top
u 回车 再输入用户名
k 回车 在输入pid 结束进程
10.4 网络状态监控
netstat
-an 按一定顺序排列出
-p 显示哪个进程再调用
11 包管理
11.1 rpm
#查看已安装的rpm 包
rpm -qa
#查看是否安装某个软件
rpm -q 软件包名
#查看软件包信息
rpm -qi 软件包名
#查看文件所属包
rpm -qf 文件路径
#删除包
rpm -e [--nodeps 强制删除] 包名
#安装包
rpm -ivh 安装包的全路径
i 安装
v 提示
h 进度条
11.2 yum
# 查询服务器是否有需要安装的软件
yum list | grep 软件列表
#安装
yum install xxx
12 shell 入门
12.1 shell 脚本执行方式
#脚本的格式
脚本要以 #!/bin/bash 开头
脚本要有执行权限(见7.5)
使用 sh 脚本名称 可以不用赋予执行权限,
多行注释
:<<!
内容
!
12.2 shell 变量
系统变量
如 $HOME $PWD $SHELL $USER 等
系统变量可以使用 set 查看
自定义变量
定义变量: 变量名=值
撤销变量: unset 变量
声明静态变量 readonly变量 ,静态变量不可以unset
变量定义规则
名称可以使用由字母数字和下划线组成,但是不能以数组开头
等号两边不能有空格
变量名称一般习惯大写
将命令的返回值赋给变量
A=`xxxx` 反引号里面的命令赋给A
A=$(xxx) 等价于反引号
#定义变量
A=100
echo 'var'=$A #定义变量不需要加上 $ 使用变量需要加上$
echo "var=$A"
#撤销变量A
unset A
echo 'var'=$A
#将指令的返回结果赋值给A
C=`date`
D=$(date)
echo "c=$C"
echo "d=$D"
设置环境变量
export 变量名=变量值 将shell 变量输出为环境变量/全局变量
source 配置文件 让修改后的配置信息立即生效
echo $变量明 查询环境变量的值
位置参数变量
$n n为数字,$0 代表命令本身 $1-$9 代表第一到第九个参数 10及以上的参数用 ${10}
$* 代表命令行中所有参数 $* 把所有参数看成一个整体
$@ 这个变量也代表命令行中所有参数,不过$@ 把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
预定义变量
$$ 当前进程的pid
$! 后台运行的最后一个进程号
$? 最后一次执行的命令返回状态,如果这个变量值为0 证明上一个命令正确执行。
12.3 基本语法
运算符
$((运算式))
或者 expr m + n
expr运算符间要有空格,如果希望将expr 的结果赋给某个变量,使用` `
expr \* / % 乘 除 取余
条件判断
[ condition ] condition 前后有空格
#非空返回true。可使用$? 验证,0为true
= 两个字符穿比较
两个整数比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
按照文件类型判断
-f 文件存在且是一个常规文件
-e 文件存在
-d 文件存在并是一个目录
流程控制
if [ 判断条件 ]
then
代码
fi
if [ 判断条件 ]
then
代码
elif [ 判断条件 ]
then
代码
fi
case 语句
case $变量名 in
"值1")
执行程序1
;;
"值2")
执行代码2
;;
*)
如果以上都不是,执行此处代码
;;
esac
for 变量 in 值1 值2 ,,,
do
程序
done
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
while [ 条件判断式 ]
do
程序
done
12.4 read 读取控制台输入
read 选项 参数
-p 指定读取值时的提示符
-t 指定读取时等待的秒数
12.5 函数
[ function ] funname[()]
{
action;
[ return int; ]
}
调用
funname [值]
12.6 数据库备份
shell 脚本
#数据库的地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123456
#备份的数据库名
DATABASE=empler
#创建备份目录
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --database ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
#切换到backup目录
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份目录
find ${DATETIME} -atime +10 -name "*.tar.gz" --exec rm -rf {} \;
echo "备份数据库${DATABASE}成功"
设置定时任务
#每天两点半备份
crontab -e
30 2 * * * /xxxx/xxx.sh
== 跟随 《韩平顺一周学会linux》学习 https://www.bilibili.com/video/BV1Sv411r7vd?spm_id_from=333.999.0.0==
暂未学完,后续补充
本文作者:发呆鱼
本文链接:https://www.cnblogs.com/dyiblog/articles/15927867.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步