什么是Linux
- Linux有两种含义:
- 一种是 Linus 编写的开源操作系统的内核
- 另一种是广义的操作系统
服务器端通常强调稳定性,不需要像客户端那样华丽的图形界面。
2. Linux 内核版本和常见发行版
内核版本:https://www.kernel.org/
内核版本分 主版本号、次版本号、末版本号 三部分。
次版本号为奇数为开发版,偶数为稳定版
发行版本:
- RedHat Enterprise Linux
- Fedora
- CentOS
- Debian
- Ubuntu
Mac 中玩 Linux: virtualbox 下载地址
centos系统映像下载地址:centos 后缀为.iso
1.
- $ 一般用户
- # root 用户
2. 终端
- 图形终端
- 命令行终端
- 远程终端(SSH VNC) : 操作的电脑不在我们面前
3.常见目录介绍
- / 根目录
- /root root 用户家目录
- /home/username 普通用户家目录
- /etc 配置文件目录
- /bin 命令目录
- /sbin 管理命令目录
- /usr/bin /usr/sbin. 系统预装的其他命令
关机: init 0
查看:ls /bin
帮助命令:man 、 help、 info
man
man 是 manual 的缩写, man 有9个章节,用于区分
man + 命令: man lsman man
man 章节 命令 :man 1 passwdman 5 passwd
不知道什么章节:man -a passwd
help
shell(命令解释器)自带的命令称为内部命令,其他的是外部命令
查看命令类型:type cd
内部命令:builtinhelp cd
外部命令:ls --help
info
info 帮助比 help 详细,作为补充
info ls
文件管理
cd
更改当前操作
绝对路径:cd /path/..相对路径:cd ./path/..cd ../path/..回到上一次目录:cd -切换到下一级file中:cd ./filecd file返回上一级cd ..注:离根目录比较近用绝对路径,离当前目录比较近用相对路径
ls
文件查看
ls : 查看当前目录下的文件
option:-l : 长格式显示文件-a:显示隐藏文件-r:逆序显示-t:按照时间顺序显示-R:递归显示-h: 字节KB MB TB GB 显示查看根目录: ls /
查看root用户所在目录: ls /root
查看多目录: ls / /root
多选项: ls -al -r 默认按文件名逆序ls -r -l -t 按照时间逆序
查看a中多级目录: ls -R /a
pwd
显示当前所在目录
option:--help :显示 帮助 信息然后退出--version : 显示 版本 信息然后退出
su
切换用户
切换到root用户: su - root
注:普通用户切换需要密码。root不需要
清屏
命令: clear
快捷键:ctrl + l
创建和删除目录
mkdir
mkdir a = mkdir ./a
mkdir /a创建多目录:mkdir a b c
创建多级目录:mkdir -p /a/b/c/d/e/f/g
rmdir
移除单一目录: rmdir file
递归删除目录(带询问):rm -r file
递归删除目录(强制): rm -rf file
删除系统所有文件: rm -rf /
结束正在执行的命令: Ctrl+c ,之前执行作废
创建、复制和移动目录
cp
copy
创建文件:touch filea fileb
复制文件:cp source dest
复制目录:cp -r /root/a /tmp
带显示的复制操作:cp -v source dest
保留原有文件时间:cp -p source dest
保留时间 权限 所属 所有信息:cp -a source dest -a = -dpR
mv
移动文件或文件夹。 重命名
重命名文件: mv old_name new_file. 底层操作就是移动
移动文件:mv /file /tmp
文件移动并重命名:mv /tmp/file_old /file_new
移动文件夹:mv /dirc /tmp
通配符
shell 内建的符号,操作多个相似的文件
* 匹配任何字符串
?匹配一个字符
[xyz] 匹配xyz任意一个字符
[a-z] 匹配一个范围
[!xyz]或[^xyz] 不匹配
ls file*
rm -f file*
文本查看命令
文本内容显示到终端: cat file
查看文件开头:head file 默认十行 head -5 file 显示五行
查看文件结尾:tail file 默认十行 tail -3 file 显示三行常用参数 -f 文件内容更新后,显示信息同步更新。tail -f file 不断跟踪 可以用于跟踪日志文件
统计文件内容信息:wc -l file 查看文件有多少行
分行显示:more file 显示百分比,按空格会更多显示
打包
最早linux备份介质是磁带,使用的命令是tar,压缩存储命令时gzip和bzip2,经常使用的的拓展名是.tar.gz .tar.bz2 .tgz
打包成文件: tar cf /tmp/etc-nackup.tar /etc
压缩和解压缩
gzip bzip2, tar中集成了压缩 加z即可
双拓展名: tar czf /tmp/etc-nackup.tar.gz /etc
vi的四种模式
正常模式
插入模式
命令模式
可视模式
vim正常模式
插入:i
插入并返回此行开头:大写i
添加:a
添加并返回此行结尾:大写a
从下一空行重新写,依次往下: o
从上一空行重新写,依次往下:大写o粘贴: p复制:复制单行:yy多行复制: nyy eg:复制三行 3yy从光标复制到当行结尾: y$剪切:剪切一行:dd从光标剪切到当行结尾:d$多行剪切:nddeg: 剪切三行 3dd撤销: u
反撤销: ctrl + r单字符删除:x
单字符替换:先按r再按新字符
关于行
显示行数: :set nu
不显示行数: :set nonu set仅单次有效
设置配置文件每次都显示行数: vim /etc/vimrc G o set nx
移动到指定行数: 先按数字 再按shift+g
移动到第一行:gg
移动到最后一行:G
移动到本行开头:shift+6
移动到本行结尾:shift+4
vim 可视模式
三种进入可视模式的方式:v 字符可视模式V 行可视模式ctrl+v 块可视模式shift+i写入想在块之前插入的东西按两次esc
vim光标移动
h j k l
左下上右
vim命令模式
保存为某个文件: :w /root/a.txt
退出::q
保存并退出: :wq
不保存退出: :q!尾行模式执行其他命令: :!pwd
尾行模式查找某个字符: /字符 回车 。 按n查找下一个,shift+n查找上一个
尾行模式替换某个字符(光标所在行): :s/old/new
尾行模式替换某个字符(文件): :%s/old/new
尾行模式全局替换某字符(文件): :%s/old/new/g
尾行模式某行之间替换某个字符(1-5行): :%1,5s/old/new
尾行模式某行之间全局替换某字符(1-5行): :%1,5s/old/new/g
用户与权限管理
用户管理
新建用户:useradd
删除用户:userdel userdel -r wyy 会把/home/wyy也删除,否则/home下用户组会变成数字只有root有访问权限
判断存在用户:id 名 id(root)=0ls /root
ls /home/wyy/
添加用户后:
tail -10 /etc/passwd
tail -10 /etc/shadow修改用户密码:passwd user修改用户属性:usermod修改用户家目录: useradd wusermod -d /home/w1 w 更改家目录usermod -g group1 w 更改组为group1=useradd -g group1 w
修改用户属性:chage更改用户密码过期信息
组管理命令
添加用户组 :groupadd group1
删除用户组: groupdel group1
切换用户:su - new_user 并运行new_user的运行环境
退回用户:exit
用户切换
su 切换用户su - USERNAME 使用login shell方式切换用户--需要root用户密码
sudo 以其他用户身份执行命令visudo 设置需要使用sudo的用户(组)--只执行shadow暴露权限不需要root密码30min后关机 shutdow -h 30
取消关机 shautow -c 只有root可以
所以: visudo 更改权限user_name = ALL /sbin/shutdow -c用户名 = 字符(localhost)/ALL(远程/字符/图形化) 命令 option取消关机执行:sudo /sbin/shutdow -c
用户和用户组的配置文件
/etc/passwd 文件格式:用户名:是否需要密码:user_id(0为root):组::家目录位置:用户登录的命令解释器/etc/shadow用户名:加密密码::::::::/etc/group组名称:密码验证:组gid:其他组设置
文件类型
- 普通文件
d 目录文件
b 块特殊文件(移动硬盘)
c 字符特殊文件
l 符号链接(快捷方式)
s 套接字文件
f 命名管道
文件权限
r 读 4
w 写 2
x 执行 1
目录权限
x 进入目录
rx 显示目录内的文件名
wx 修改目录内的文件名
修改权限命令
chmod 修改文件或目录权限user:chmod u+x /tmp/testfilechmod 755 /tmp/testfile755=rwx+rw+rw普通文件默认权限644=666-umask(0022)group:chmod g+x /tmp/testfileother: chmod o+x /tmp/testfileall: chmod a+w /tmp/testfile
设置权限:user只有写权限: chmod u=w /tmp/teatfilechown 修改属主、属组将test文件的属主改为user1: chown user1 /test将test文件的属组改为group1: chown :group1 /test
chgrp 单独修改属组,不常用将test文件的属组改为group1: chgrp group1 /testctrl+r 搜索之前执行的命令
文件权限与目录权限
当user权限与group权限冲突时,以user权限为主
安装
找到命令对应的软件包:yum provides */cmdname安装:yum -y install packagename
网络管理
查看网络状态
网络状态查看工具
net-toolsifconfig 网络状态查询命令routenetstat
iproute2ipsseth0:第一块网卡(网络接口)
第一个网络接口可能的名字:eno1 :板载网卡ens33 : PCI-E网卡enp0s3:无法获取物理信息的PCI-E网卡CentOS 7使用了一致性网络设备命名,以上不匹配则使用 eth0网卡转化:编辑/etc/default/grub文件,增加 biosdevname=0 和 net.ifnames=0更新grub: #grub2-mkconfig -o /boot/grub2/grub.cfg重启: #reboot查看网卡: ifconfig eth0
查看网卡物理连接状况: mii-tool eth0
查看网关配置路由:route -n. 使用-n参数不解析主机名
修改网络配置
网络配置命令ifconfig <接口> <IP地址> [netmask 子网掩码]eg: ifconfig eth0 10.211.55.4 netmask 255.255.255.0网卡启动:ifup <接口>eg: ifup eth0网卡禁用:ifdown <接口>添加网关:route add default gw <网关ip>. eg: route add default gw 10.211.55.4route add -host <指定ip> gw <网关ip>route add -net <指定网段> netmask<子网掩码> gw<网关ip>eg: route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.211.55.4
删除网关:route del default gw 10.211.55.4
网络故障排除命令
检测当前主机和目标主机是否畅通: pingeg: ping www.baidu.com辅助ping使用来检查状况及质量:traceroute - 检查每一跳eg: traceroute -w 1 www.baidu.com 如果超时只等一秒钟mtr -检查是否有数据包丢失域名对应ip:nslookup 域名端口检查:telneteg: telnet www.baidu.com 80 检查百度80端口是否畅通退出:ctrl+] 再输入quit网络抓包工具:tcpdumpeg: tcpdump -i any -n port 80 抓取80端口的所有包并将域名展示为iptcpdump -I any -n host 10.0.0.2 我到host的所有包都捕获tcpdump -I any -n host 10.0.0.2 and port 80tcpdump -I any -n host 10.0.0.2 and port 80 -w /tmp/filea 捕获信息保存到文件中网络监控:netstat netstat -ntpl n:转ip 、t:tcp、p:进程、l:listenssss -ntpl
软件包管理器的使用
包管理器是方便软件安装、卸载,解决软件依赖关系的重要工具
CentOS、RedHat使用yum包管理器,软件安装包格式为rpm
Ubuntu、Debian使用apt包管理器,软件安装包格式为deb
rpm
rpm包格式vim-common-7.4.10-5.el7.x86_64.rpm软件名称.软件版本.系统版本.平台光驱: ls -l /dev/sr0
将光盘封装成镜像: dd if=/dev/sr0 of=/xxx/xx.iso
挂载:mount /dev/sr0 /mntcd /mnt/Packagesls vim*-q 查询软件包查询所有已安装的软件包并分屏显示:rpm -qa | more查询单个软件包:rpm -q vim-common-i安装软件包rpm -i vim-common-7.4.10-5.el7.x86_64.rpm依赖检测失败 需要先安装所依赖的 再安装自己,rpm需要自己解决依赖关系、软件包来源不可靠,yum自动解决依赖关系-e 卸载软件包rpm -e vim-common
yum
yum命令选项:install 安装软件包 yum install nameremove 卸载软件包yum remove namelist| grouplist 查看软件包 yum listupdate 升级软件包yum update 更改yum下载映像位置-国内快:mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backupwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/CentOS-7.repoyum makecache
内核升级
rpm 格式内核:查看内核版本: uname -r升级内核版本: yum install kernel-3.10.0升级已安装的其他软件包和补丁: yum update
进程管理
PID进程号
PPID父进程
UID 有效用户ID
LWP 轻量级进程-线程
TTY终端 虚拟终端-pts/0 纯字符终端tty0 tty1
TIME 进程运行时间 无参考价值
CMD 命令名称或路径
1号进程 CentOS 7: systemd CentOS 6 : init进程终止方式正常终止:main返回,exit异常终止:abort,信号查看命令:ps查看不同终端所有进程状态: ps -e | more查看更多信息UID PPID: ps -ef|more查看更多信息LWP:ps -eLf |morepstree 进程树-父子关系top 动态查看%cpu:用户us + 进程交互sy +ni+ 空闲状态id +等待wa+ hi+ si +st =100只看某进程:top -p pid PR 优先级。NI 资源占用(nice值 默认为0)进程也是树形结构,进程和权限密不可分
进程控制
调整优先级:nice 范围-20到19 值越小优先级越高,抢占资源越多nice -n NI值 shell文件(未运行时)renice 重新设置优先级(运行时)renice -n NI值 PR号进程的作业控制:jobs&符号进程前后台调度(以 ./a.sh 为例):以后台运行: ./a.sh &查看后台运行的进程: jobs 调度到前台运行: fg 编号前台运行后悬挂:按ctrl+z悬挂后到后台运行: bg 编号
Kill
查看所有支持的信号:kill -lSIGINT 通知前台进程组终止进程。ctrl+cSIGKILL 立即结束程序 不能被阻塞和处理 kill -9 pid
守护进程
类守护进程 nohup tail -f /var/log/messages &。但需终端,不过在终端exit时可以脱离终端,防止带动退出。守护进程特点:1、 不需要终端。 2、结果存在日志文件中,无终端用日志文件记录信息。3、占用当前目录,切换为根,关机或者 重启才可以停止使用screen命令:在网络中断时screen可以保证程序正常运行,等下次连接时会通过screen恢复现场screen 进入screen环境ctrl+a d 屏蔽screen环境screen -ls 查看screen会话screen -r sessionid 恢复会话exit 退出日志: /var/log
系统常规日志:tail -f messages
内核日志: tail -f dmsg
安全日志: tail -f secure
计划任务-周期性: tail -f cron
服务管理工具 systemctl
servicecd etc/init.d/查看脚本:vim networkinit 0 关机 1 单用户 2 多用户 3 字符模式 5 图形模式6重启service 服务名称 start/stop/restartsystemctlsystemctl stop/start/restart/disable/enable/reload 服务名称查看服务状态实例: systemctl status sshd.service
SELinux
MAC(强制访问控制)与DAC(自主访问控制)原linux需要用户自控制不安全。SELinux将进程 用户 文件标签一致且类型相同,则允许访问并控制文件或
系统,不过会降低服务器性能。查看状态:getenforce/etc/selinux/config1. enforcing 强制访问控制。进程用户标签三者一致2.permissive 警告3.disabled 关闭
更换临时状态为警告: setenforce 0 重启后仍为enforcing
看标签: ps -Z、 ls -Z 、 id -Z
内存查看命令
内存使用率查看:free free -m 兆数显示swap运行在磁盘上比,mem慢十倍,可以限用swap,这样mem满时随机杀掉占用内存最大的几个进程top
磁盘分区和文件大小查看
磁盘使用率查看:可查看分区: fdisk fdisk -lpartedparted -l可查看分区挂载目录: dfdf -h文件大小查看:实际占用空间: du du -h afile总占用空间: ls -hl afile du与ls区别:根据一个文件创建另一个(块大小4M 10个块 ): dd if=afile bs=4M count=10 of=bfile此时du与ls结果相同根据一个文件创建另一个(块大小4M 10个块 开头跳过20块 ): dd if=afile bs=4M count=10 seek=20 of=bfile此时du与ls结果不同,ls显示的是空洞文件总大小,du指实际大小
b代表块设备,8代表主设备号,0/16/32代表从设备号就是分区,一块磁盘分区最多15个
一个扇区512字节,最小操作单元
文件系统管理
linux支持多种文件系统,常见的有xfsext4NTFS(需安装额外软件)ext4文件结构:1.超级块:记录分区包含的文件,文件总数。df命令查看的信息都是超级块信息,每次新文件创建都会更新2.超级块副本:硬盘误清理后恢复的都是超级块。3.i节点(inode):记录每一个文件名称 大小 编号 权限,文件名记录在父目录的i节点中 ls -i看i 节点编号4.数据块(datablock): 记录数据,挂在i 节点上,链接式结构。根据个数计算文件大小,du命令统计数据块个数大小信息,ls统计i节点大小
文件权限与目录权限区别:read 文件是读datablockread 目录是读其下文件名称
i节点和数据块操作
在xfs、ext4文件系统中,默认的创建的一个数据块大小是4kcp afile1 afile2 命令会创建一个不同i节点的文件
mv afile1 afile3 同目录下文件重命名没有改变i节点和datablock ,只是改变了目录与文件名的对应关系,所以很快echo只会对datablock发生改变,vim会对i节点发生改变 ls -li怎样使vim不改变i节点?使用硬链接
vim对文件一致性的考虑:vim file4时,会生成一个.file4.swp文件,当发生宕机保证数据不丢失,当其他终端读取时保证数据一致性rm 让文件名与i节点链接断开,所以不论删除多大的文件所用时间都是相同的
ln 让更多文件名指向i节点,恢复误删。ln不能跨越文件系统ln afile bfile 二者之一变另外一个也变,拥有同一个i节点。rm其中一个不改变另一个,当都rm后,系统回收i节点ls -li afile bfile
如果想跨越文件系统进行链接需要进行软链接,对应i节点不同-创建新文件,link文件权限777没用,以父链接文件权限为主,当父文件删除后,软连接文件内容置空。软链接文件永远是5字节,硬连接文件大小与父文件相同。软链接不会增加链接数,硬连接会一起增加链接数。
文件权限控制列表
文件权限控制列表:可以让不同user、group有不同的权限 查看权限:getfacl afile赋予权限:setfacl -m u:user1:r u:user2:x g:group1:w afile收回赋予的权限:setfacl -x u:user1:r u:user2:x g:group1:w afile
分区和挂载
用于设置新服务器 新硬盘
常用命令:先添加一个新的硬盘,避免格式化将原有信息丢失创建分区:fdiskfdisk /dev/sdc 根据提示自己建创建分区:partedparted /dev/sdd 根据help提示格式化:mkfsmkfs.ext4 /dev/sdc1 挂载到目录:mount 无法直接操作分区,应该挂载到目录上mkdir /mnt/sdc1mount /dev/sdc1 /mnt/sdc1 临时挂载,重启消失永久挂载: vim /etc/fstab添加: /dev/sdc1 /mnt/sdc1 ext4 defaults 0 0原分区 挂载到 文件系统 权限 磁盘配额常见配置文件:/etc/fstab
用户磁盘配额
限制i节点,大于isoft软限制进行提醒,但是不可以超过ihard硬限制 限制块设备是bhard
交换分区swap的查看与创建
增加交换分区的大小:创建交换分区并格式化:mkswap /dev/sdd1开启交换分区:swapon /dev/sdd1关闭交互分区:swapoff /dev/sdd1查看:free -m使用文件制作交换分区dd if=/dev/zero count=1024 bs=4M of=/swapfile修改安全权限:chmod 600 /swapfile创建交换分区并格式化:mkswap /swapfile开启交换分区:swapon /swapfile关闭交互分区:swapoff /swapfile永久保存设置:vim /etc/fstab添加:/swapfile swap swap defaults 0 0
系统综合状态查询
sar -u -r -b -d -q 1 10
cpu 内存 IO 磁盘读写 进程一秒 采样十次