linux基础
参考资料
1、印象笔记
https://app.yinxiang.com/fx/cf92b036-2d10-46ac-a133-8dc914afb990
2、有道云笔记
https://note.youdao.com/s/D54g9uAN
3、尚硅谷
D:\A-File\技术\Linux
4、《极客时间》
重点关注
刚刚创建的文件,默认是什么权限?什么情况下需要chmod ?
某个用户 启动的进程中,会出现属于root用户的子进程吗
Shell脚本;
正则表达式;
问题排查
《Linux服务器访问慢,通过这些工具可以快速找出系统瓶颈!》
https://mp.weixin.qq.com/s/zPsorn0gn84LsunPPlA9nA
安装
VMware虚拟机安装CentOS
https://www.cnblogs.com/tanghaorong/p/13210794.html#_label1
进入网络配置文件目录:cd /etc/sysconfig/network-scripts/,然后编辑ifcfg-ens33文件:vi ifcfg-ens33。按shift+i进入insert编辑模式,
修改以下内容:
● BOOTPROTO=static 启用静态IP地址
● ONBOOT=yes 开启自动启用网络连接
添加以下内容:
● IPADDR=192.168.78.100 设置IP地址
● NETMASK=255.255.255.0 子网掩码
● GATEWAY=192.168.78.2 设置网关
$ service network restart
重启网卡让网卡设置生效。
$ ip addr
输入ip addr检查一下IP。
验证是否可以访问外网:
ping www.baidu.com。
如果ping www.baidu.com不通,
那么再测试一下百度的ip地址14.215.177.38能否ping通,
如果ip能通而域名不通则说明DNS解析有误,需要设置DNS。
vi ifcfg-ens33
DNS1=114.114.114.114
DNS2=223.5.5.5
连接工具
moboxterm
基础命令操作
man命令
man [ls]
ls -a 显示所有文件,包括隐藏文件
ls -r 按照 文件名 进行逆向显示
ls -R 递归显示
cd - 回到上次的目录中
mkdir -p a/b/c/d 建立多级目录
删除目录
rmdir 只能删除空目录
rm -r 删除非空目录,会进行逐步确认
rm -rf 强制删除非空目录,不再逐步确认
复制文件和目录
cp -p 复制时保留用户、权限等属性
cp -r 复制目录
文本查看:
cat
head -5 查看前5行
tail 查看文件结尾,常用参数 -f 表示实时更新
wc 统计内容信息
wc -l 查看行数
打包和压缩
-c 打包
-x 解包
-z gzip格式的压缩和解压缩
tar cf /tmp/xxx.tar /etc 将/etc目录打包为 /tmp下的xxx.tar
ls -lh /tmp/xxx.tar 查看打包后的大小,单位为M
tar zcf /tmp/xxx.tar.gz /etc 打包并压缩为gzip格式
tar xf /tmp/xxx.tar -C /root 解包
tar zxf /tmp/xxx.tar -C /root 解压缩
Vim
正常模式下
I:进入插入模式,而且光标会在当前行首
yy:复制当前行内容。
3 yy:复制当前3行
y ¥:复制 从光标处 到 结尾处
p:粘贴
d 剪切
dd 剪切当前行内容
x:删除光标右边的字符
r:替换光标右边的字符
命令模式(按下ESC键进入)
查找:/
查看所有用户cat -n /etc/passwd
删除用户
userdel xxx
userdel -r xxx
修改用户属性
usermod
用户切换
su - xxx
visudo 授权某个命令给特定用户。(避免了普通用户知道root密码的风险)
如 授予Peter用户shutdown -c的权限:visudo
Peter ALL=/sbin/shutdown -c
之后,Peter便可执行此命令:sudo shutdown -c
用户和用户组的配置文件介绍
vim /etc/passwd
vim /etc/shadow
vim /etc/group
vim passwd(7个字段的含义)
root:x:0:0:root:/root:/bin/bash wangpeng:x:1000:1000:wangpeng:/home/wangpeng:/bin/bash
用户名:是否需要密码验证:uid:gid:注释:用户家目录:用户登录成功后用的命令解释器(如果设置成/sbin/nologin 表示不可登录)
系统操作
网络管理
网络状态查看:
ifconfig
route -n
网络故障排除
ping
traceroute
mtr
nslookup 域名
telnet 端口
tcpdump
netstat -ntpl
ss
主机名:hostname
/etc/hosts
包管理
rpm -q 查询软件包
rpm -i 安装软件包
rpm -e 卸载软件包
yum配置
/etc/yum.repos.d/CentOS-Base.repo
内核
进程管理
查看进程
ps 查看当前终端下的进程
ps -ef 查看全部进程 ,-e表示全部,-f表示全格式
- -L 显示线程
- -e 表示全部
- -f 表示全格式
pstree
top:动态监控
screen命令
系统日志
目录:/var/log
message
dmesg 内核信息
服务管理工具systemctl
CentOS 6之前,使用service
目前都使用systemctl,比较方便。
systemctl start/stop/restart/enable xxx
内存与磁盘管理
内存使用率
free
top
磁盘使用率
fdisk -l
ls - /dev/sd?? 查看硬盘和分区
df -h 查询系统整体磁盘使用情况
du 查询指定目录的磁盘占用情况,默认为当前目录
- -s 指定目录占用大小汇总
- -h 带计量单位
常用组合:du - sh * | grep M
du与ls命令的区别
分区和挂载
关系图
首先创建一块硬盘;
进行分区
本步骤
fdisk /dev/硬盘名sdc
(如果硬盘大于2T,则需要用parted命令进行分区:parted /dev/sdc)
输入 m ,从而获得提示。
输入n,选择新建分区
输入 p(主分区),输入分区号 1,从而创建主分区sdc1.
输入w,从而保存。
创建PV,VG,LV并格式化
一般对磁盘是只增不减,将另外一块硬盘的容量纳入逻辑卷,更加灵活
创建物理卷sdb1,sdc1,sdd1
pvcreate /dev/sd[b,c,d]1
创建卷组vg1,将物理卷sdb1,sdc1加入其中
vgcreate vg1 /dev/sd[b,c]1
创建逻辑卷,将vg1的100M加入其中
lvcreate -L 100M -n lv_name vg_name
格式化逻辑卷
mkfs.xfs /dev/vg_name /lv_name
挂载
创建挂载点目录
mkdir /mnt/test
挂载
mount /vg_name /lv_name /mnt/test
开机自动挂载
vi /etc/fstab
/dev/vg_name/lv_name /mnt/test xfs defaults 0 0
mount -a
扩容
#扩充vg
vgextend vg_name /dev/sdd1
#扩充逻辑卷root
lvextend -L +50G /dev/vg_name/lv_name
#文件系统
xfs_growfs /dev/vg_name/lv_name
问题:
创建分区时候的空间分配是怎么样的?
PV与分区的关系?
目录占用大小汇总指定目录占用大小
23 个开箱即用的实用 Shell 脚本分享 (qq.com)
https://mp.weixin.qq.com/s/uXxbH1SPOAnYloHJkyOxPg
Shell 是命令解释器
CentOS 7 默认使用的 Shell 是 bash
编写
编写bash脚本
#!/bin/bash
cd /var
ls
pwd
du -sh
du -sh *
赋予执行权限 chmod u+x script.sh
chmod 777 script.sh
执行脚本
bash script.sh
执行方式
bash ./filename.sh
可以不赋予脚本 执行权限,也能执行
不改变当前运行环境(目录),原因是 产生了一个子进程。
./filename.sh
必须有可执行权限
不改变当前运行环境
source ./filename.sh
改变当前运行环境
. filename.sh
改变当前运行环境
管道和重定向
输入重定向<
wc -l < 文件名
输出重定向
>覆盖
>>追加
2>
&>
输入和输出结合使用:一般生成配置文件
#生成a.sh文件
cat > /root/a.sh <<EOF
echo "hello bash"
EOF
变量
变量赋值
- a=123
- 将命令结果赋值给变量 b=$(ls -l /etc)
- 变量值有空格或特殊字符时:用双引号” “或反引号
变量引用
环境变量
查看所有环境变量:env | more
查看搜索路径:$PATH
预定义变量
- $? 上调命令是否成功
- $$
- $0 当前进程名称
位置变量
环境变量的配置文件
- /etc/profile
- /etc/bashrc
- ~/.bashrc
- ~/.bash_profile
数组
ipts=(100 101 102)
echo $ipts
显示所有元素 echo ${ipts[@]}
统计数组元素个数echo ${#ipts[@]}