一、Linux基础命令及简介
终端快捷键
终端快捷键
Ctrl + a/Home 切换到命令行开始
Ctrl + e/End 切换到命令行末尾
Ctrl + l 清除屏幕内容,效果等同于 clear
Ctrl + u 清除剪切光标之前的内容
Ctrl + k 剪切清除光标之后的内容
Ctrl + y 粘贴刚才所删除的字符
Ctrl + r 在历史命令中查找 (这个非常好用,输入关键字就调出以前的命令了)
Ctrl + c 终止命令
ctrl + o 重复执行命令
Ctrl + d 退出 shell,logout
Ctrl + z 转入后台运行,但在当前用户退出后就会终止
Ctrl + t 颠倒光标所在处及其之前的字符位置,并将光标移动到下一个字符
Alt + t 交换当前与以前单词的位置
Alt + d 剪切光标之后的词
Ctrl+w 剪切光标所在处之前的一个词(以空格、标点等为分隔符)
Ctrl+(x u) 按住 Ctrl 的同时再先后按 x 和 u,撤销刚才的操作
Ctrl+s 锁住终端
Ctrl+q 解锁终端
!! 重复执行最后一条命令
history 显示你所有执行过的编号+历史命令。这个可以配合!编辑来执行某某命令
!$ 显示系统最近的一条参数最后这个比较有用,比如我先用 cat /etc/sysconfig/network-scripts/ifconfig-eth0,然后我想用 vim 编辑。
一般的做法是先用↑显示最后一条命令,然后用 Home 移动到命令最前,删除 cat,然后再输入 vim 命令。其实完全可以用 vim !$来代替。
基础命令
Linux命令简介
用于实现每一类功能的指令或程序
命令的执行依赖于解释器程序(例如:/bin/bash)
内部命令:属于Shell解释器的一部分
外部命令:独立于Shell解释器之外的程序
内部命令在系统启动时调入在内存,常驻内存,所以执行效率高
外部命令是系统软件的功能,用户需要时从硬盘中调入指定的文件,运行完放在内存当中
Shell
Linux系统中运行的一种特殊程序也可以理解成一种特殊的软件,提供了用户与内核进行交互操作的一种接口。
在用户和内核之间充当“翻译官”去通知操作系统需要进行什么样的操作(相当于解释层)
内核相当于操作系统去指挥硬件,硬件才能工作,否则无法交互
用户登录Linux系统时,自动加载一个Shell程序
Bash是Linux系统中默认使用的Shell程序,文件位于/bin/bash
Linux命令的通用格式与操作技巧
命令字 [选项] [参数]
选项:用于调节命令的具体功能
Linux严格区分大小写
”-”引导短格式选项,例如“Is -a"
“--”引导长格式选项,例如“Is --help”
参数:命令的对象,如文件、目录名等
Ctrl + U:快速删除当前光标处之前的所有字符
Ctrl + K:快速删除从当前光标处到行尾的所有字符
Ctrl + L:快速清空当前屏幕中的显示内容
Ctrl + C:取消当前命令行的编辑
获取命令的帮助
命令 --help help 内置文件命令
man 命令 man 命令或配置文件
ls
-l∶以长格式(Long)显示文件和目录的列表
-a:显示所有(隐藏)目录和文件的信息
-d :显示目录(Directory )本身的属性,而不是显示目录中的内容
-h:以更人性化(Human)的方式显示出目录或文件的大小,此选项需要结合-I选项一起使用(显示文件大小的单位)
-R:以递归( Recursive )的方式显示指定目录及其子目录中的所有内容
-i: i节点 inode
ls /etc/re*.conf 查找re*.conf的目录或文件
pwd
print working directory 打印当前工作目录
cd
change directory 切换目录
mkdir ( make directory )
mkdir aaa 创建目录aaa。 mkdir a b c 同时创建a,b,c三个目录
mkdir -p a/b/c 创建目录/a,在/a目录下创建子目录b,在/a/b目录下创建子目录c
touch
创建文件
rm
rm -rf 目录或文件 删除目录或文件
-r 针对文件夹,递归删除 -f 强制删除,不提示
cp ( copy )
cp -rp 复制文件或目录
-r:复制目录时必须使用此选项,表示递归复制所有文件及子目录
-p:复制时保持( Preserve)源文件的权限、属主及时间标记等属性不变
mv
mv 源文件 目标路径+新名字 剪切+改名
tar
打包,并没有压缩。默认情况下,linux一次只能压缩一个文件,针对多文件或文件夹无法进行直接压缩
所以需要提前对多个文件或文件夹进行打包,这样才可以进行压缩操作。
tar:将多个文件打包成一个文件
语法:tar [选项] 打包后的名称.tar 多个文件或文件夹
-c create
-v 显示打包过程
-f,指定打包的文件名,必须加的
-t,查看打包的文件内容
-u 更新,往tar包中更新或追加内容
tar -cvf 打包后的名称.tar 多个文件或文件夹 #打包多个文件或文件夹
tar -xvf abc.tar #释放tar包中的文件
tar -tf 打包后的文件名称 #查看tar包的文件
tar -uf abc.tar d.txt #往abc.tar中追加d.txt
linux下常用的压缩工具:gzip、zip、bzip2、xz
-z 压缩为.gz格式 -j 压缩为.bz2格式 -J 压缩为.xz格式
语法:tar [选项] 压缩后的压缩包名称 要压缩的文件或文件夹
tar -zcvf abc.tar.gz a a.txt b.txt
tar -jcvf abc.tar.bz2 a a.txt b.txt
tar -Jcvf abc.tar.xz a a.txt b.txt
压缩速度: gzip>bzip2>xz
压缩率: xz>bzip2>gzip
-C /root/ 指定解压目录
zip
zip 压缩与解压缩
zip格式是linux与windows中通用格式
zip [选项] 压缩后的文件名称.zip 文件或文件夹
-r :递归压缩,主要针对文件夹
zip abc.zip a.txt b.txt c.txt
zip -r wechat.zip wechat
unzip 解压
unzip abc.zip -d /root/ #解压到指定路径
uname
uname -a 获取操作系统相关信息
type
type 命令 用于判断该命令是内部命令还是外部命令
whereis
whereis 命令 #查询命令二进制文件的路径
file
查看对象的类型
history
显示系统以前输入的1000条命令
netstat
常见参数
-a (all) 显示所有选项,默认不显示 LISTEN 相关
-t (tcp) 仅显示 tcp 相关选项
-u (udp) 仅显示 udp 相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 Listen (监听) 的服务状态
-p 显示建立相关链接的程序名【root 用户权限下】
-r 显示路由信息,路由表
-e 显示扩展信息,例如 uid 等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该 netstat 命令
LISTEN 和 LISTENING 的状态只有用 -a 或者 -l 才能看到
-antp -lntp
ln
软连接 ln -s /源文件 /快捷方式名(没有名字就和源文件名一样)
硬连接 ln /源文件 /快捷方式名(没有名字就和源文件名一样)
关机和重启命令
Shutdown
Reboot
Halt
poweroff
hostnamectl
vim /etc/hostname 更改主机名
hostnamectl set-hostname xxx 更改主机名
文件管理
cat
查看文件内容
more
分屏显示文件内容
less
分屏显示文件内容
head
查看文本前N行
head -5 文件名 #查看文本前5行
tail
查看文本后N行,默认最后10行
tail -n 文件名 #查看文本后N行
tail -f 文件名 #查看文件动态变化后的内容,一般用于查看日志
wc
用于统计文件内容信息(包含行数,单词数,字节数)
wc -lwc 文件名
du
du -sh 汇总、可读显示文件及文件夹大小(磁盘占用空间)
find
find /root -name "ab*" #搜索文件root下包含“ab”的文件或文件夹 -type f 普通文件 d 文件夹
find /root -iname "ab*" #不区分大小写
scp
scp -r 源文件 目标文件ip:/路径 #从远端机器上传或下载文件及目录
grep
在文件中找到包含指定信息的那些行,高亮显示处理
grep -n network boot.log #搜索在boot.log中包含network的行并显示行号
grep network /var/log/* #搜索log目录下所有文件包含network 的行
ll /etc/ | grep "yum" #搜索/etc目录下包含yum的文件及文件夹
管道符“|”
0 标准输入stin 1 标准输出stdout 2 标准错误 常和grep结合来进行筛选
ps -ef | grep "xxx" rpm -qa | grep "mariadb"
实现统计功能 ls / | wc -l
xargs
输出重定向
> 覆盖 >>追加输出
echo "hello" > readme.txt #把hello 输出到readme.txt
VI/VIM编辑器
命令行常用快捷键:
G 移动到文件最后一行
gg 移动到文件第一行
N+回车 N 为数字,向下移到到 N 行
home 行首
end 行尾
/关键字 向下寻找关键字 n 下一个结果
?关键字 向上寻找关键字
x 删除光标处单个字符
dd 删除整行 d^删除光标至行首 d$删除光标至行尾 C从光标删除到行尾,进入插入模式
ndd n 为数字,删除光标所在向下 n 行。
yy 复制光标所在行
nyy n 为数字,复制光标所在向下 n 行
p,P 小 p 将复制的数据在光标下一行粘贴,大 P 将复制的数据在光标上一行粘贴
u 撤消前一个操作
末行模式操作:
ZZ 保存修改并退出
:wq! 强制保存退出
:r /etc/fstab 读入其他文件内容
:s/old/new 替换当前行第一个
:s/old/new/g 替换当前行所有
:1,10 s/root/admin/g 替换1-10所有的root
:% s/root/admin/g 替换文件内所有的root
set nu|nonu 显示/不显示行号
用户管理
组: /etc/group
#名称、密码、组ID、组内用户(附件组)
用户:/etc/passwd
#名称、密码、用户ID、组ID、注释信息、家目录、shell类型
id
id 用户名 #查看用户相关信息。
passwd
为某个用户设置或修改密码 vim /etc/passwd,删掉x,再passwd:可修改密码
groupadd
groupadd -g 1001 hr #指定ID编号地添加组
groupmod
-n更改名称 -g 更改gid
groupmod -n lshr hr #更改组名称为:lshr
groupdel
groupdel 用户组 #删除用户组
useradd
-g: 指定所属主组 -s: 指定用户shell类型 -
useradd -g police -s /sbin/nologin lcw #创建用户lcw加入组police并不登陆操作系统
usermod
-g 修改用户所属主组编号
-l 修改用户名
-s 修改shell类型
-L 锁定用户 -U 解锁用户
usermod -l ldh lcw #修改用户lcw为ldh
usermod -g 0 ldh #修改用户ldh 主组为 0(root组)
usermod -s /bin/login ldh #修改用户ldh 登陆shell 为bin/login
userdel
userdel -r lcw #删除用户lcw及家目录和本地邮件存储目录
su
su - root 切换到root用户
W
可显示开机多久,当前登录的所有用户,平均负载(较详细)
Who
显示当前登录的所有用户
Last/lastlog
用户登录日志信息
权限管理
文件类型
-普通文件、d目录、l符号链接文件、b块设备文件(如硬盘,光盘)、c字符设备文件(串口设备)、s套接字文件、p管道文件
chmod
身份:u、g、o 操作:+、-、= 权限: r、w、x
chmod u=rwx 文件或目录 #赋予文件拥有者读写执行权限
chmod -R 640 文件或目录 #递归修改
chown
chown -R 用户 文件或目录 #修改文件或目录的拥有者(递归)
chown 文件拥有者:文件所属组 文件名称 #同时修改拥有者和所属组(:和.效果一样)
chgrp
chgrp -R 用户组 文件或目录 #修改文件或目录的所属组(递归)
设置位s(setUid)
作用:为了让一般用户临时具有该文件所属主/组的执行权限,主要针对二进制文件或命令
passwd命令会写密码进 shadow文件 /etc/shadow权限为--- --- --- (000)普通账号改密码是需要root权限
chmod u-s /usr/bin/passwd 或 chmod 0755 /usr/bin/passwd #去掉s位,其他用户执行passwd时导致密码无法写进 /etc/shadow文件
chmod u+s /usr/bin/passwd 或 chmod 4755 /usr/bin/passwd #添加s位,让其他用户也临时具有root权限
沾滞位t(sticky bit)
作用:只允许文件的创建者和root删除文件。 针对目录
chmod -R o+t 目录名 或 chmod -R 1777 目录名 #添加沾滞位
chmod -R o-t 目录名 或 chmod -R 0777 #移除沾滞位
ACL 访问控制
ACL可实现对单一用户设定访问文件的权限,可针对某个用户,也可针对某个组(权限控制更精准)
getfacl
getfacl 目录或文件 #查查目录上的acl权限
setfacl
setfacl 目录或文件
setfacl -R -m u:lw:r-- abc u:用户/g:组 #针对abc目录给用户lw设置一个r权限
-m:修改 -x:取消 -b:删除所有的ACL策略
setfacl -x u:lw abc #移除目录abc上的用户lw权限
setfacl -b abc #移除目录abc上所有acl权限
umask
umask=0022 #默认值 可在家目录.bashrc中设置
root创建的目录默认权限为755,文件默认权限为644,
实际目录权限=777-umask 实际文件权限=666-umask
系统服务
systemctl
systemctl list-units --type service --all #列出所有服务(包含没启动的) 结合管道符使用筛选目标
systemctl list-units --type service --all | grep sshd
systemctl list-unit-files | grep enable #列出所有开机自启动的服务
systemctl status firewalld #显示服务状态
systemctl start firewalld #启动服务
systemctl stop firewalld #停止服务
systemctl restart firewalld #重启服务
systemctl enable firewalld #允许开机启动
systemctl disable firewalld #禁止开机启动
selinux 关闭: vim /etc/selinux/config 设置 selinux=disabled
reload
systemctl reload 服务名称
热重载技术:如nginx,更改了配置文件,但是不能重启服务。可以使用热重载技术,让配置文件生效
mount
mount /dev/sr0 /mnt #挂载
umount
umount /mnt #解挂
ntp
date #查看系统日期时间
ntpdate http://cn.ntp.org.cn #手动同步时间
开启ntpd自启动服务时间就自动同步
/etc/ntp.conf #ntp服务配置文件
selinux
vim /etc/sysconfig/selinux selinux=disabled #关闭selinux
firewalld
firewalld管理工具--firewall-cmd
firewall-cmd --get-default-zone #查看防火墙默认区域
firewall-cmd --set-default-zone=trusted #设置默认区域为trusted
firewall-cmd --get-zones #查看所有支持的区域
firewall-cmd --list-all #查看当前区域的规则设置
firewall-cmd --list-all-zones #查看所有区域的规则设置
添加或删除允许通过的服务或端口
服务名称及端口号存储的目录 /usr/lib/firewalld/services
firewall-cmd --zone=public --add-service=http #通过服务名称添加规则
firewall-cmd --zone=public --remove-service=http #移除
ss -naltp | grep sshd #查询某个服务所占用的端口
firewall-cmd --zone=public --add-port=80/tcp #通过服务的端口号添加规则 (--remove-port=80/tcp) 移除
运行模式(默认)
防火墙策略立即生效,不写入配置文件
永久模式permanent
配置的防火墙策略写入配置文件,但是需要reload重新加载才能生效
firewall-cmd --zone=public --add-service=http --pernanent
systemctl reload firewalld
crond
配置文件:/etc/crontab 文件保存在: /var/spool/cron/用户
contab -l:列出用户的计划任务列表 -e:编辑
分 时 日 月 周 需要执行的命令(完整路径)
*:取值范围中的每一个数字 -:连续区间 /:每隔多少时间执行 */10 ,:多个取值
黑名单配置文件:/etc/cron.deny 用户名直接加入到该文件
日志程序 :tail -f /var/log/cron
at(一次性任务计划)
atd服务需开启
at 5pm+1days-- >命令--crtl+D退出
atq: 查询 atrm 任务号:删除
软件包
RPM软件包安装--软件名称.rpm #二进制软件包
YUM包管理工具--yum install -y #二进制软件包
源码安装--下载源代码--编译--安装
RPM包
rpm -ivh 包全名 #安装软件包
rpm -Uvh 目标包.rpm #升级软件包
rpm -e 包名 --nodeps #强制卸载软件包
rpm -qa | grep firefox #查询已安装的软件包
rpm -ql 包名 #查询软件包安装位置
rpm -qf 路径/文件名称 #查询某个文件所属的包名称
rpm -qc httpd #只查询配置文件
需解决依赖关系
yum包
配置文件 /etc/yum.repos.d/
yum list #可用的安装包
yum list installed | grep httpd #已安装的包
yum search/provides xxx/ifconfig #搜寻相关软件包
yum -y install 包名 #安装yum包
yum -y remove 包名 #卸载
yum clean all #清除缓存
yum makecache #下载到本地缓存
源码包
软件安装位置 /usr/local
下载源码包保存位置: /usr/local/src/
预编译 ./configure --prefix=/usr/local/nginx #指定安装目录
编译 make
安装 make install
卸载 删除软件安装目录
进程管理
top
动态监测系统负载情况 Pp :cpu使用排序 M:内存排序
ps
ps -ef | grep cron #筛选cron进程
kill -9 #强制结束某进程
killall httpd #根据进程名结束某进程
free -m #查看内存使用情况
df -h #查看磁盘使用情况
磁盘管理
分区方式: MBR < 2 TB 4个主分区 使用fdisk工具分区
GPT > 2TB 128个主分区 使用gdisk(parted)工具
df- h # 查看磁盘分区使用及设备挂载情况 #disk free :意为显示磁盘可用
lsblk: #查看块设备 #list block
fdisk -l #查看设备分区情况 #fdisk 是系统自带的分区软件
新建分区
fdisk /dev/sdb
4个主分区(primary)或者3个主分区(primary)+1个扩展分区(extend)(N个逻辑分区( logic)) 逻辑分区号从5开始
partx -a /dev/sdb #重新读取分区表
格式化分区
mkfs.xfs /dev/sdb1 #如果该分区已有格式,加-f可强制改格式
blkid /dev/sdb1 #如能查到设备id号,说明格式化成功
挂载使用
mount dev/sdb1 /data umount /data mount -l 查看已挂载的设备
vim /etc/fstab #永久挂载
swap空间扩容
方式一:
mkswap /dev/sdb5 #格式化分区为 swap 格式
swapon /dev/sdb5 #加载即完成增加 swap swapoff /dev/sdb5 #关闭
swapon –s #显示目前使用的 Swap 设备
vim /etc/fstab #永久挂载
方式二:
# dd if=/dev/zero of=/swap bs=1M count=64 #创建大文件
#mkswap /swap #格式化为swap文件系统
#swapon /swap # 加载到现在的swap
free -m : #查看内存及swap使用情况
vim /etc/fstab #永久挂载
完成
取消交换分区或者交换文件
#swapon –s #显示目前使用的 Swap 设备
#swapoff /swap rm -rf /swap
#free –m
逻辑卷管理
硬盘读取数据最小单位为1个扇区512字节。操作读取数据最小单位为1个数据块(block)=8*512字节=4096字节=4KB。lvm寻址最小单位1个PE=1024*4k=4MB
一、准备磁盘分区
fdisk /dev/sdb
w,保存--partprobe 刷新分区表
二:准备物理卷
pvcreate /dev/sdb1 /dev/sdb2 #创建物理卷
pvs #查看
pvdisplay #列出物理卷信息
pvremove 分区号 #删除物理卷
三、创建卷组
vgcreate vg01 /dev/sdb1 /dev/sdb2 #sdb1,sdb2加入卷组
vgs #查看卷组
vgremove #删除卷组
vgreduce vg01 /dev/sdb1 #从卷组里移除物理卷(裁剪)
vgextend vg01 /dev/sdb1 #将物理卷加入到卷组中(扩容)
四、创建逻辑卷
lvcreate -n lv01 -L 100M vg01(卷组) #划分创建逻辑卷lv01, -L为大小 , -n为名字
lvcreate -n lv02 -l 100%free vg01(卷组) #剩余空间逻辑卷创建
lvdisplay #列出逻辑卷信息
lvs #查看逻辑卷
ll /dev/vg01/lv01 #逻辑卷设备文件路径
mkfs.ext4 /dev/vg01/lv01 #格式化lv01为ext4格式
lvremove /dev/vg01/lv01 #删除逻辑卷
mount /dev/vg1/lv1 /mnt #挂载到/mnt下
注:可以直接创建卷组,把物理卷加入到卷组。
五、逻辑卷扩容
lvextend /dev/vg01/lv01 -L +1.5G #扩容逻辑卷
resize2fs /dev/vg01/lv01 #同步文件系统
六:逻辑卷实现条带化
准备物理卷、创建卷组
创建逻辑卷 lvcreate -n lv01 -L 1G -i 2 vg01 /dev/sdb[12]
iosta:-d--查看磁盘 -m每秒M 2:每隔两秒显示一次 #安装工具sysstat才能用iostat磁盘跟踪工具