LINUX的用户及用户组
su 切换用户,如果带-则是完全切换,被把目录进入到用户家目录。
sudo 用自己的用户以其他用户身份执行命令
usermod用于修改用户的属性
usermod -d /home/w1 user3 可以用于用户的家目录
创建用户组
groupadd group1
usermod -g group1 user1 将user1的用户组改为group1
useradd -g group1 user2 新建用户并将它设置为group1
/etc/passwd 用来保存用户信息
/etc/shadow 保存用户密码
/etc/group 保存用户组相关信息 ,用来设置一个用户两个组
系统运行级别
checkconfig list查看各服务在什么init级别下运行
systemd的是在wanted里面的target有
和init级别对应的target,达到init的效
如,runlevel.target。
init各级别与systemd对应关系
linux后台运行
加&,后台运行
jobs列出后台运行的任务
fg jobid弹出到前台
ctrl+z收回到后台,挂起了。
bg1 重新后台运行
信号
管道和信号是两种进程通信的方式
ctrl+c其实是一种信号
kill -l查看所有信号
screen保持后台运行
screen: 即使网络断开了(关闭终端),也可以继续运行 程序。
screen 进入screen
ctrl + a + d退出screen
screen -ls查看当前screen的列表
screen -r screenid切入到screen
SELINUX
SELINUX防止权限控制不当
原理:给用户 进程 文件打上标签 ,标签一致才能修改文件。
vim /etc/selinux/config编辑是否开启selinux,重启生效。
查看磁盘及分区
如果swap不开启,内存不足会随机杀掉。
fdisk查看磁盘及它的分区
parted -l也可以查看 和上面的差不多
df -h看分区和挂载目录及容量
ls -l /etc/passwd,查看含有空洞文件
du /etc/passwd,查看实际占用的文件
dd创建空洞文件
linux文件的构成
ls -li /etc/passwd
查看passwd文件的i节点编号
i节点上存储了权限,所属组之类的信息,i节点链式挂载了datablock数据块
i节点,文件名记录到父目录的i节点中
ls 查看的数据块的整体大小
du是查看数据块实际使用大小
个体比较小的文件,在linux中也是用4K
这是各类文件服务器出现的原因
- mv改名会改变i节点吗?
不会,他只会改变目录里i节点的文件名
- mv移动会改变i节点吗?
离开分区时会,不离开分区不会,离开分区时很长。
- 正常vim修改文件会改变i节点吗?
会,原理是vim有个swp文件存在,这是vim对文件一致性的考虑,相当于改变了文件。
- rm是什么原理?
父目录的文件名和文件的i节点断开
- ln的原理(硬链接)?
让文件名指向i节点,就实现了多个文件名指向同一个i节点。
- 跨越分区,如何链接?
使用软连接,ln -s afile aafile,两者的i节点就不一样了, 它保存了其代表的文件的
绝对路径,是另外一种文件(链接文件),在硬盘上,有独立的区块,访问时会替换自己的路径。
所以,如果删除掉被链接的文件,再去打开软链接,被链接文件,自然打不开。(和win快捷方式一样),但是硬链接能打开,因为他不是替换。而是有相同的i节点引用。软连接的一切操作都是会替换到被链接的文件,虽然他们的i节点不同,但是修改软连接的权限,也是修改的被链接的文件。
普通权限的补充
普通的权限不满足,要使用facl
getfacl afile
setfacl -m :user1:r afile
给硬盘分区
fdisk查看硬盘
fdisk /dev/sdc 对sdc硬盘设备分区
n 新建分区
p 主分区
设置分区号 1
起始值回车用默认
last扇区:+50G 给分区1分配50G
fdisk -l查看分配的分区
mkfs.ext4 /dev/sdc1对分区做文件系统
mkdir /mnt/sdc1
mount /dev/sdc1/ /mnt/sdc1
大于2T的,用parted命令进行挂载
mount挂载是临时的,需要修改etc/fstab才能永久保存
这个文件
/dev/sdc1 /mnt/sdc1 ext4 defaults 0 0
给swap扩容
swap分区扩容
用分区的方式给swap扩容
mkswap /dev/sdd1
swapon /dev/sdd1
swapoff /dev/sdd1
用文件的方式给swap扩容
dd if=/dev/zero bs=4M count=1024 of=/swapfile
mkswap /swapfile
chmod 600 /swapfile
swapon /swapfile
永久保存需要修改fstab
vim /etc/fstab
/swapfile swap swap defaults 0 0
第一个0代表是否备份 第二个0代表自检
linux组RAID
RAID
多块硬盘组合
RAID 0 把一份数据拆成两份,单盘只存50%
RAID 1 镜像,两个硬盘存的一样
RAID 5 有奇偶校验
RAID 10
要使用RAID卡比较好
逻辑卷
LVM
卷:一个物理设备就是一个卷
物理卷分区扩容需要先拷走文件
逻辑卷: 叠在物理上面,逻辑上的一个设备
查看系统综合状态
系统综合状态
sar -u 1 10
sar -r 1 10
linux查看十六进制文件
hexdump可以看十六进制文件
各种方式执行shell脚本
bash ./filename.sh 子进程
./filename.sh 子进程,用#!后面的东西去解释这个脚本
source ./filename.sh 当前进程
. ./ filename.sh 当前进程
cat命令输入文件
cat > /tmp/a.sh < EOF
echo ‘hello’
EOF
let命令
使用let计算
let a=10+20
shell中最好不要计算
将命令结果给到变量
命令结果赋值给变量,也可以使用``
letc=$(ls -l /etc)
变量中如果有空格
name="xu jz "
查看环境变量
env 查看环境变量
set 查看环境变量及预变量
$号的作用
$$ 进程号
$0 进程名 不同执行方式 结果不一样 bash执行时,是shell文件名称
$? 上一个命令执行结果
$1 $2 ${10}读取位置参数
${2-k} 如果$2没值 那就用 'k’替换
默认环境变量加载
/etc/profile
/etc/profile.d
~/.bash_profile
~/.bashrc
/etc/bashrc
source 可以导入环境变量,如果修改了环境变量文件,则source则可以导入环境变量
原理:根据各种情况进入bash,调用不同的配置文件,则变量开始生效,比较nologin shell 和login shell是加载
不同配置。su - root 获取一个 login shell。
数组
IPTS=(10.0.0.1 10.0.0.2 10.0.0.3)
打印数组 echo ${IPTS[@]}
打印数组数量 echo ${#IPTS[@]}
完全引号和非完全引号
“”不完全引号,会去解析$
''是完全引用
``是命令
算数运算
expr 用于算数运算符 a=expr 4 + 5 记得 要空格
let a=4+5 让变量a为9
(( a=4+5 )) 双括号其实是let的简写, 让变量等于9
只支持整数运算
特殊符号总结
圆括号可以产生子shell (a=123),这个产生了一个子shell
数组pts=(10 23 30)
运算echo $(( 10+20))
( ) 用 于 在 里 面 加 入 一 个 命 令