ctrl+c 终止前台运行程序
ctrl+d 退出 等价exit
ctrl+l 清屏
ctrl+a 光标移动到命令行的最前面
ctrl+e 光标移动到命令行的最后面
cat !$ !$(取上条命令的最后一个参数)
stat 文件 # 查看文件属性
su - <用户> # 切换用户
su - <用户> -c "<命令>" # 指定用户执行某句命令 这样做不用实际切换用户
历史命令
history 查看历史命令
history -c 清空历史命令
alias 自定义命令名='命令' 将一条命令改成自己命名的样子
例:alias clh='cd /home/workspace/cz_django/django_save/'
复合命令例如
for((i=0;i<=3;i++))do echo 123;done
定义函数 function xxx(){ echo '函数运行'; } (注意{}左右两遍有空格)
查看命令的帮助信息
man 命令 例如:man ls
man -a 命令 查看所有帮助手册
命令 --help 命令的帮助手册(没有man全面),但是有些命令并没有--help
day-11
基础命令
修改主机名:hostnamectl set-hostman xxx 或者 vim /etc/hostname
开机启动级别变为3:systemctl set-default multi-user.target
查看系统时间:date 或者 date "+%Y-%m-%d %H:%M:%S"
修改系统时间:date -s "2024-05-20 14:50:30"
查看硬件时间:hwclock
hwclock -w # 把系统时间写入硬件 -s代表相反方向
同步时间服务器:ntpdate ntp1.aliyun.com
关闭系统时间同步功能(不常用):timedatectl set-ntp no
重启:
10分钟后重启:shutdown -r 10
立即重启:shutdown -r 10 或 shutdown -r now 或 init 6 或 reboot
关机:
shutdown -r 10 或 shutdown -r now 或 halt 或 poweroff
day-12
一、目录结构
/dev/null 黑洞文件:把不想要显示的内容丢进去(只进不出)
/etc/hostname 主机名的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 # 网卡的配置文件
/etc/resolv.conf # 指定远程DNS的地址
/etc/hosts # 本机的域名解析文件
/home/以普通用户名命名的文件名----》普通用户的家目录
/root--------------------》root的家目录
ls /proc/sys/net/ipv4/ | grep backlog
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
例:
[root@iZbp1hnuqtbtab5x6r0e32Z home]# ls /proc/sys/net/ipv4/ | grep backlog
tcp_max_syn_backlog
[root@iZbp1hnuqtbtab5x6r0e32Z home]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
1024
/var/log # 日志存在路径
tail -f /var/log/messages # 查看系统级日志
四、文件管理基础命令
pwd # 查看当前所在的文件夹
cd # 什么都不加默认回到家目录
cd ~ # 家目录
cd - # 切到上一次所在的文件夹
ls -l 文件 # 查看的指定文件的列表信息
ls -l 文件夹 # 查看的文件夹下的子文件与子文件夹的列表信息
ls -dl 文件夹 # 查看指定的文件夹的列表信息
ls -a # 查看包括隐藏文件在内的所有文件
补充:Linux系统不是以文件的后缀名来区分文件类型,而是以ls -l的首位来区分
- 文本文件
d 目录/文件
五、创建、复制、移动、删除
创建
touch a.txt # 无则创建,有则修改创建时间
touch {a,b,c}.txt # 这种写法是分别创建名字为a,b,c的三个文件
touch {1..9}.txt # 创建九个文件,1.txt 2.txt 3.txt.......
创建目录
mkdir
mkdir {a,b} # 同时创建两个文件夹
mkdir -v 名字 # -v 显示提示信息
mkdir -p /a/b/c # 递归新建文件夹
复制文件
cp 原路径 目标路径 # 例如 cp /etc/passwd . "." 点代表当前路径
cp /etc/hosts ./h.txt # 将文件拷贝到当前文件夹并改名为h.txt
cp -r /etc/ . # 如果是拷贝文件夹必须加上 "-r"
cp -r /boot/* . # 如果想让boot文件夹下的文件全都拷贝到当前目录 必须加上-r
移动
mv 源 目标
mv file1 /home/dir1 # 将file1移动到/home/dir1里
mv /test1/b.txt /test2/a.txt # 将test1中的b.txt移动到test2中并改名为a.txt
删除
rm 文件 # 删除文件
rm -f 文件 # 让删除操作不需要提示
rm -rf 文件 # rm操作不能直接删除目录,加上 -rf 不管是文件还是目录都能删除
rm -rfv 文件 # 加上v 显示提示信息
查看
cat -n file # -n表示展示出来的结果带上行号
cat -A file # -A表示展示所有包括隐藏字符 比如说换行符
head /etc/passwd # 查看文件的头部 默认是前十行
head -n 3 file # 查看前三行
tail -n 3 file # 查看后三行
tail -4 file | head -2 # 查看文件的后四行中的前两行
less file # 可以用上下键查看内容
more file # 可以用空格键翻页
day13
一、vim编辑器
vi不显示高亮颜色语法
vim显示高亮颜色语法
没有功能上的差异
vi是默认安装的,vim需要通过 yum install vim -y
命令行快捷键
:w # 只保存
:wq # 保存并退出
:q! # 退出不保存修改
$ # 光标移动到当前行的结尾
0 # 数字0 光标移动到当前行的开始
dd # 删除光标所在的那一行 如果执行p操作就是剪切
ndd # n为数字。删除光标所在的向下n行,例如3dd 则是删除3行
u # 回退 回到上一步操作
ctrl+r # 执行下一条命令
yy # 复制光标所在的那一行
nyy # n数字 复制光标所在的向下n行
p # 粘贴
gg # 跳到文件第一行
GG # 跳到文件最后一行
nG # n为数字,光标移动到这个文件的第n行,例如20G则会移动到
这个文件的第20行
H # 光标移动到屏幕的最上方的一行
M # 光标移动到屏幕的中央那一行
L # 光标移动到这个屏幕的最那一行
:3,5 w /root/a.txt # 意思是将三到五行的内容拷贝到root下并以a.txt命名
:set nu # 加上行号
:set nonu # 去掉行号
:set ic # 不区分大小写
:set ai # 自动缩进
以上为临时修改,如果想永久设置需要修改配置 命令:vim /etc/vimrc
# patch需要安装 # yum install patch -y
diff -u 1.txt 2.txt > a.diff # 以2.txt为基础做补丁文件
diff -u 2.txt 1.txt > b.diff # 以1.txt为基础做补丁文件
patch 1.txt a.diff # 给1.txt打上以2.txt为基础的补丁
如果不小心关掉vim编辑,再次进入时会有一个交换文件,
输入 vim -r a.txt 可以恢复之前未保存的数据
day15
一、find命令
按文件名
find /etc -name "ifcfg-ens"
find /etc -iname "ifcfg-ens" # i 忽略大小
find /etc -iname "ifcfg-en*" # * 通配
按文件大小
find /etc -size +3M # 大于3M
find /etc -size 3M # 等于3M
find /etc -size -3M # 小于3M
find /etc -size +3M -ls # -ls 找到的处理动作
按时间找(atime,mtime)
find /etc -mtime +3 # 修改时间超过3天
find /etc -mtime 3 # 修改时间等于3天
find /etc -mtime -3 # 修改时间小于3天
按文件属主、属组找:
find /home -user clh # 属主是clh的文件
find /home -group it # 属组是it组的文件
find /home -user clh -group it
find /home -user clh -a -group it # 同上意思一样
find /home -user clh -o -group it # -o 或的意思
find /home -nouser # 用户还存在,在/etc/passwd中删除了记录
find /home -nogroup # 用户还存在,在/etc/group中删除了记录
find /home -nouser -o -nogroup
如果想删除没有属主没有属组的文件,一个一个删除太麻烦,
但是rm命令不支持管道命令,
所以可以用find /home -nouser -o -nogroup | xargs rm -rf
xargs可以让不支持管道命令的命令支持管道命令
find /etc -name "ifcfg-ens33" | xargs -I {} cp -rv {} /test
# 将找到的文件拷贝至指定的文件夹 # 如果是移动则是 mv 命令
但是find命令本身也对删除命令有支持
find /root/ -maxdepth 1 -name "a.txt" -ok rm -rf {} \;
# -ok的意思是一个一个提示你是否删除 如果不需要提示则是 -exec
按文件类型:
find /dev -type f
# f 普通 d 目录 l 链接 b 块设备 s 套接字 p 管道文件
根据inode号查找:-inum n
find / -inum 1811
按文件权限:
find . -perm 644 -ls
二、下载命令
wget只要用来下载软件包 curl主要用来测试
wget 下载链接
wget -O /test/文件名 链接 # 将软件包下载至指定文件
PS:如果wget下载提示无法建立SSL连接,
则加上选项--no-check-certifiate -O
wget --no-check-certifiate -O 本地路径 远程包链接地址
如果想把文件下载至Windows上,可以使用lrzsz,需提前安装:yum install lrzsz -y
sz 文件 # Linux会自动弹出选择下载地址的界面
rz # 将Windows的文件上传至Linux
curl命令也可以实现和wget一样的功能
curl -k -o /test/文件名 链接 # -k 解决ssl问题
压力测试:while true;do curl 网址;done
三、输出与重定向
A > B # 覆盖,B文件的内容被A覆盖
A >> B # 追加,A文件的内容追加到B文件
一段命令 1>a.txt 2>b.txt # 1代表将命令正确信息写入a.txt,2测试错误信息
一段命令 &>a.txt # 不管正确的还是错误的都写入
cat >> d.txt < /etc/hostname # 将/etc/hostname的内容追加到d.txt
day16
一、字符处理命令
如果使用sort命令,文件则以字符编码顺序排序
sort a.txt |uniq # 按字符编码排序且去重
sort a.txt |uniq -c # -c :显示重复多少次
sort a.txt |uniq -d # -d :只显示重复的行
sort a.txt |uniq -u # -u :显示不重复的行
cut命令:用来显示行中的指定部分,删除文件中指定字段
-d :指定字段的分隔符,默认的字段分隔符为"TAB"
-f :显示指定字段的内容
例:head -5 /etc/passwd | cut -d: -f1 # -f1-3:1到3段的意思 #1,3:第一段和第三段的意思
tr命令:替换或删除命令
-d # 删除字符
head -1 /etc/passwd | tr -d "root" # 删除带有的root的行
head -1 /etc/passwd | tr "root" "ROOT" # 将root字段替换为ROOT
wc命令:统计,计算数字
-c # 统计文件的Bytes数
-l # 统计文件的行数
-w # 统计文件中单词的个数,默认以空白字符做为分隔符
例:
wc -c /etc/passwd
wc -l /etc/passwd
二、文件管理之打包压缩
方式一:
# 打包一个文件 # v是显示打包细节
tar cvf 自定义名称.tar /文件1 /文件2 /... /...
gzip <filename>.tar # 将打包的文件的压缩
这两个命名也可以结合起来
tar cvzf <filename>.tar.gz /文件1
也可以使用另外一种压缩方法:bzip2 # 推荐使用 gzip
bzip2 <filename>.tar # 压缩之后的后缀为 .bz2
组合命名为tar cvjf <filename>.tar.bz2 ...
解压:
tar xvf <filename>.tar.bz2 -C 目标文件夹
方式二:
zip name.zip /文件
解压:
uzip 文件.zip
day17
一、用户与组管理
查看用户相关信息
id # 查看当前用户
whoami # 查看当前用户是谁
创建用户
useradd 用户名 # 每创建一个用户就会创建一个该用户的主组
vim /etc/group # 编辑各用户的组 # /etc/group 组文件
vim /etc/gshadow # 组密码文件
手动创建用户
mkdir /home/likui/
chown likui.likui /home/likui/
chmod 700 /home/likui/
cp -ra /etc/skel/.[!.]* /home/likui/
chown likui.likui /home/likui/.[!.]*
touch /var/spool/mail/likui
chown likui.mail /var/spool/mail/likui
chmod 660 /var/spool/mail/likui
useradd命令
-u:指定用户的UID
-g:指定用户所属的主组
-G:指定用户所属的附加组
—d:指定用户的家目录
-c:指定用户的备注信息
-s:指定用户所用的shell
-e:修改过期时间
-M:不创建家目录
-r:创建系统账户,uid处于系统用户范围内,默认就没有家目录
userdel 用户名 # 删除用户
userdel -r 用户名 # 删除用户更彻底
usermod命令 # 修改用户信息 # 同useradd参数基本一致
-l # 指定要修改用户的登录名
-L # 指定要锁定的用户
-U # 指定要解锁的用户
创建组
groupadd -r group1 # 创建基本组,不指定gid
groupadd -g 5555 gg2 # 创建基本组,指定gid为5555
groupadd -r gg3 # 创建系统组,gid从201-999
修改组
groupmod -g 1111 gg3
groupmod -n new_gg3 gg3 # -n 修改组名称
删除组
一个用户必须有一个主组
groupdel 删掉的组不能是任何用户
往组里添加用户
usermod -a -G 附加组名或附加 用户
gpasswd -a 用户 组名
将多个用户添加到一个组里
useradd tom
gpasswd -M 用户1,用户2 group3
指定一个用户为组的组长
gpasswd -A <用户1> <组名>
切换用户
su - <用户名>
改变其他人的最某文件的权限
chmod o+w /tmp/a.txt
改变root用户文件的组
chown root.组名 /tmp/a.txt
改变组对文件的权限
chmod g+w /tmp/a.txt
临时将登录的用户添加到组
newgrp 组名 # 添加的是当前登录用户 # 一般是普通用户想临时获得权限
day18
一、基本权限rwx管理
权限的类型:
r:4
w:2
x:1
权限的分类:
u
g
o
I、设置
chmod # 设置权限
1、加减法
属主:rwx
属组:rx
其他人:rw
chmod u+x,g+x,o+w <文件>
2、赋值法
chmod u=rwx,g=rx,o=rw <文件>
3、数字 # 使用数字法不能单独改一个权限 必须属主 属组 其他人 一起改
chmod 777 <文件> # 将文件设置为最大权限
4、-R # 递归修改
chmod -R 777 /a # 将a文件夹下的文件的权限都改为最大权限
chown # 设置用户和组
chown 属主.属组 <文件>
chown 属主. <文件> # 将属主属组都改为同一个
chown .属组 <文件> # 只改属组
II、权限的作用(文件、文件夹)
针对文件:
r:读取文件的内容
w:修改文件内容
x:可以把文件当成一个命令/程序运行
针对目录:
r:可以浏览该目录下的子目录名和子文件名字
w:创建、删除、移动文件
x:可以进入该目录
要操作目录下的内容,一定要对该目录有x权限
说明:只要涉及到操作文件夹下的东西,当前用户
1、首选需要具备对沿途所有文件夹的x权限
2、其他需要具备对目标文件夹的r或者w权限
r代表可以浏览
w代表可以创建、删除、移动
chmod u+s /user/bin/cat # 如果给一条命令加上 s ,那么任何用户都可以使用这个命令
# 如果一个文件夹他的属组成员可以进行操作,那么其他成员也能对其他成员的
的文件进行操作,这是不合理的,这时就需要给数组 加上 t
chmod o+t /test/
day19
一、acl高级权限
# 只让某个用户对某个文件单独设置权限
# 修改属主权限
setfacl -m u::<权限> <文件>
# 修改属组权限
setfacl -m g::<权限> <文件>
# 修改其他人权限
setfacl -m o::<权限> <文件>
# 修改具体某一个用户的权限
setfacl -m o:<用户名>:<权限> <文件>
# 修改具体某一个组的权限
setfacl -m o:<组>:<权限> <文件>
# 删除某个用户的权限
setfacl -x u:<用户> <文件>
# 全部清理,还原
setfacl -b <文件>
# 当给一个文件设置了权限,需要让文件的权限也都开发给设置的用户
setfacl -m d:u:<用户名>:<权限> <文件>
#
day20
三、rpm包的来源
镜像文件:
# 卸载
umount <挂载点或者源>
umount -l <挂载点或者源> # 强制卸载
# 挂载光盘
mount /dev/sr0 /opt
mount /dev/cdroom /mnt
# 拷贝到本地一个镜像文件
mount -o loop 镜像文件的路径 /opt
rpm -qi <RPM包名> # 查询系统中已安装包的描述信息
rpm -ql <RPM包名> # 查询系统中已安装包里所包含的文件
rpm -qc <RPM包名> # 查询指定软件包的所有配置文件
rpm -qd <RPM包名> # 查询某个包安装的帮助文档
rpm -qf <RPM包名> # 查询系统中指定文件所属的软件包
rpm -qd <RPM包名> # -p 查询未安装的软件包的信息
rpm -e <RPM包名> # 卸载
四、yum命令
yum命令(仓库):1、存放了所有相关软件包的一个文件夹,2、该文件夹下必须有一个文件
记录了本文件夹所包含的软件包依赖关系
yum repolist # 查询可用仓库
yum repolist all # 查询包括已启用或禁用的所有仓库状态
yum list # 列出可用仓库中所有的软件包
yum grouplist # 列出可用仓库中的软件组
yum provides <文件(软件)> # 查询某个软件属于哪个软件包
yum groupinstall "开发工具" -y # 安装和开发工具组的软件包(推荐提前下载)
yum groupinstall "Development Tools" -y # 安装和开发工具组的软件包(推荐提前下载)
# 卸载
yum remove <软件>
yum groupremove <软件>
yum groups remove <软件>
# 重装
yum reinstall <软件> # 重新安装时只会安装没有的新的软件 # 在生产环境慎用
# 更新
yum update -y # 更新所有 # 包括系统
yum update <软件> -y # 更新单个软件包
yum check-update # 检查有哪些可更新的软件
# 杀掉yum的进程
pkill -9 yum
# 制作元数据缓存
yum makecache
# 清理元数据缓存
yum clean all
# 查看执行yum历史
yum history
# 查看具体执行的yum历史
yum history info <ID号>
# 撤销执行的yum命令
yum history undo <ID号>
yum仓库/yum源头
1、本地源:把本地的一个文件夹做成了yum源
方式1:
1、采集一系列软件包放在某一个本地目录下
2、createrepo 目录路径
# ps:安装createrepo命令
yum install createrepo -y
2、网络源:
base基础源
epel扩展源
某一个软件包官网提供的源
day21
一、编译安装
1、官网下载,如nginx
wget <链接>
2、预先安装编译安装依赖的库 # 这个步骤也可以先做
yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl-devel pcre pcre-devel
或者
yum groupinstall "Development Tools" -y
3、解压
tar xvf 压缩包 -C <文件夹>
4、编译安装
cd <安装包所在文件夹>
./configure --prefix=/user/local/nginx-1.18.0
二、进程管理
1、查看进程信息
ps aux
ps -elf | grep [v]im # 查看指定进程信息
2、进程状态
R # 运行
S # 可中断睡眠 Sleep,即在水面的过程中可以接收信号唤醒,执行的IO操作可以
得到硬件设备的响应
D # 不可中断睡眠,即在睡眠的过程中不可以接收信号唤醒,执行的IO操作得不到
硬件设备的响应
T # 停止的进程
Z # 僵尸进程
X # 死掉的进程,几乎看不到
< # 标注了<小于号代表优先级较高的进程
N # N代表优先级较低的进程
S # 包含子进程
+ # +表示是前台的进程组
3、top命令
输入top命令直接查看
M # 按照内存排序
R # 内存倒叙
kill -9 <pid> # 杀掉进程
day23
一、screen命令
yum install screen -y
screen <命令> # 为要执行的命令单独开一个窗口 即使关闭命令依然存在
screen -S <窗口名> # 另开一个自定窗口 可运行多条命令
# 假如进入窗口执行一段程序后 想在不停止程序的情况下关闭窗口
先按 Ctrl+a 再按 Ctrl+d # 这样可以使自己的程序不受影响
screen -ls # 查询存在的窗口pid
screen -wipe # 清除已经死掉的窗口
screen -r <pid> # 将关闭的窗口命令重新起来
screen -x <窗口名> # 一台服务器内 所有人都能看到输入的内容
二、查看网络状态
netstat -tunalp # 查看网络状态
netstat -an | less # 查看网络协议 # less翻页
lsof -i:22 # 只看22号端口的信息
route -n # 查看网关
du -sh <文件夹名> # 统计文件夹的大小(绝对路径)
df -h # 带着单位显示硬盘状态
cat /proc/cpuinfo |less # 查看CPU信息
lscpu
uptime # 只展示top命令第一行
bg %2 # 让作业2在后台运行
fg %1 # 将作业1调回到前台
三、管道相关
tee命令
<命令> | tee <文件名> # 命令输出的内容也会向文件中输入
day24
一、命令:
m 查看帮助
q 退出
n 新建分区(p主分区 e扩展分区)
p
d 删除分区
w 保存
day25
# 检查网线是否连接
mii-tool <网卡名>
# 配置网卡信息(临时)
ifconfig eth1 172.16.10.11 netmask 255.255.255.0
# 如果想永久修改网卡配置信息
cd /etc/sysconfig/network-scripts/
# 重启网络服务
systemctl restart network
day26
一、网卡
# 有些配置信息的更改会在系统重启的时候还原 如果需要永久更改
# 该文件系统开机时便会自动运行 但是必须先执行:chmod +x /etc/rc.d/rc.local
vim /etc/rc.local
# 在自己机器上执行,则禁用别人使用ping命令访问我们
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
二、路由
Linux本身不支持路由转发功能 需手动开启且满足三个条件
1、至少有两块网卡分别连接不同的网段
2、开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
3、在该Linux主机上添加正确的路由规则/策略
三、route命令
# 添加路由命令
route add -host <ip地址> dev <网卡> # 主机路由
route add -net <网段> dev <网卡> # 网络路由
route add -net 0.0.0.0/0 gw 网关地址 # 默认路由/网关
route add default gw 网关地址 # 默认路由/网关地址
# 删除
route del default # 删除网关
route del -host 1.1.1.10/32 # 删除主机路由
route del -net 2.2.2.0/24 # 删除网络路由
day27
一、定时任务
crontab命令
-l # 查看定时任务
-e # 编辑定时任务
二、定时任务实践(使用root用户每5分钟执行一次时间同步
1、安装ntpdate命令
yum install -y ntpd
2、测试时间同步命令
ntpdate ntp.aliyun.com
3、确认命令所在目录
which ntpdate
4、编辑定时任务
crontab -e
# 每五分钟执行一次时间同步
*/5 * * * * ntpdate ntp.aliyun.com
5、查看定时任务
crontab -l
6、查看定时任务日志
tail -f /var/log/cron
三、总结
1、定时任务规则配置一定要写注释
2、定时任务里面尽量使用脚本
3、运行脚本习惯性使用绝对路径
如果说脚本出现交互命令,比如说cp命令,会需要输入y/n,所以使用绝对路径
或在命令前加反斜杠 “\”,即可解决这个问题
4、脚本执行结果或者命令执行结果尽量有用的定义到指定的日志,没用的定义到空
5、避免不必要的输出
6、打包命令尽量使用绝对路径
day28
运行shell脚本的两种方式
方式1:
bash 脚本的文件路径
方式2:
脚本的文件绝对路径
./相对路径
shell语法:
一、变量
定义变量
height=190
age=18
name=clh
访问变量
echo $height
修改
height=200