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编辑模式,

  1. 修改以下内容:
  2. BOOTPROTO=static 启用静态IP地址
  3. ONBOOT=yes 开启自动启用网络连接
  4. 添加以下内容:
  5. IPADDR=192.168.78.100 设置IP地址
  6. NETMASK=255.255.255.0 子网掩码
  7. GATEWAY=192.168.78.2 设置网关
  1. $ service network restart
  2. 重启网卡让网卡设置生效。
  3. $ ip addr
  4. 输入ip addr检查一下IP
  5. 验证是否可以访问外网:
  6. ping www.baidu.com
  7. 如果ping www.baidu.com不通,
  8. 那么再测试一下百度的ip地址14.215.177.38能否ping通,
  9. 如果ip能通而域名不通则说明DNS解析有误,需要设置DNS
  10. vi ifcfg-ens33
  11. DNS1=114.114.114.114
  12. 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命令的区别

分区和挂载

关系图

image.png
首先创建一块硬盘;

进行分区

本步骤

  1. fdisk /dev/硬盘名sdc

(如果硬盘大于2T,则需要用parted命令进行分区:parted /dev/sdc)

输入 m ,从而获得提示。
输入n,选择新建分区
输入 p(主分区),输入分区号 1,从而创建主分区sdc1.
输入w,从而保存。

创建PV,VG,LV并格式化

一般对磁盘是只增不减,将另外一块硬盘的容量纳入逻辑卷,更加灵活

  1. 创建物理卷sdb1,sdc1,sdd1
  2. pvcreate /dev/sd[b,c,d]1
  3. 创建卷组vg1,将物理卷sdb1,sdc1加入其中
  4. vgcreate vg1 /dev/sd[b,c]1
  5. 创建逻辑卷,将vg1100M加入其中
  6. lvcreate -L 100M -n lv_name vg_name
  7. 格式化逻辑卷
  8. mkfs.xfs /dev/vg_name /lv_name

挂载

  1. 创建挂载点目录
  2. mkdir /mnt/test
  3. 挂载
  4. mount /vg_name /lv_name /mnt/test

开机自动挂载
vi /etc/fstab

  1. /dev/vg_name/lv_name /mnt/test xfs defaults 0 0

mount -a

扩容

  1. #扩充vg
  2. vgextend vg_name /dev/sdd1
  3. #扩充逻辑卷root
  4. lvextend -L +50G /dev/vg_name/lv_name
  5. #文件系统
  6. xfs_growfs /dev/vg_name/lv_name

问题:
创建分区时候的空间分配是怎么样的?
PV与分区的关系?
目录占用大小汇总指定目录占用大小

  • 指定目录占用大小汇总

    Shell脚本

23 个开箱即用的实用 Shell 脚本分享 (qq.com)
https://mp.weixin.qq.com/s/uXxbH1SPOAnYloHJkyOxPg

Shell 是命令解释器
CentOS 7 默认使用的 Shell 是 bash

编写

编写bash脚本

  1. #!/bin/bash
  2. cd /var
  3. ls
  4. pwd
  5. du -sh
  6. 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>
&>

输入和输出结合使用:一般生成配置文件

  1. #生成a.sh文件
  2. cat > /root/a.sh <<EOF
  3. echo "hello bash"
  4. 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[@]}

转义和引用