Linux系统命令、脚本和软件安装

1.常用命令

1.1. 文件列表ls

#将隐藏文件,也就是以点开头的文件,也显示出来
ls -a
#长格式显示列表详情,包括修改日期
ls -l
#长格式人性化显示,比如大小会按照多少K,或者多少M显示
ls -lh
#只显示 /etc 目录本身的详情,而不会把它里面的文件和目录显示出来
ls -ld /etc
#统计当前目录下文件的个数(不包括目录)
ls -l |grep "^-"|wc -l

1.2. 创建目录mkdir

#创建/tmp/xiaodianying/canglaoshi 目录,如果没有xiaodianying这个目录会直接创建
mkdir -p /tmp/xiaodianying/canglaoshi    

#在当前目录下创建xiaodianying目录
mkdir xiaodianying

1.3. 本地复制cp

#将 /etc/fuse.conf 这个文件复制到 /tmp/下 
cp   /etc/fuse.conf    /tmp/               

#将 /etc/fuse.conf 这个文件复制到 /tmp/下,并更名为fuse2.conf
cp   /etc/fuse.conf    /tmp/fuse2.conf      

#将 fuse.conf  复制为fuse4.conf,原有属性一并复制
cp -p    fuse.conf    fuse4.conf 

#将zmj/这个目录本身以及这个目录下的所有内容都复制到 sxy/ 下
#如果不存在sxy/ 这个目录,则复制过来的zmj/会更名为sxy/           
cp -r zmj/     sxy/
                                                                                          
#不包含zmj/这个目录,只将zmj/这个目录下的所有内容都复制到 sxy/下
cp -r zmj/*    sxy/

1.4. 剪切mv

#如果有sxy/这个目录,则会将zmj/这个目录本身包括里面的内容一同剪切到sxy/下
#如果没有sxy/这个目录,则相当于重命名,即将zmj改名为sxy
mv zmj/  sxy/

#将1.avi剪切,然后重命名为2.avi,如果是在同一个目录下,就相当于rename
mv  1.avi  2.avi   

1.5. 删除或清空

rm  2.avi                 #删除 2.avi 文件,删除时会提示是否删除
rm -f 2.avi               #强制删除 2.avi 文件,删除时不会提示是否删除
rm -rf canglaoshi/        #强制遍历删除canglaoshi目录下的内容
echo "" > catalina.out           #清空catalina.out文件的内容,这样tomcat不用重启

1.6.查看cat/倒查tac

#一次性显示meimei.list文件里面的所有内容
cat meimei.list      
 
#一次性显示meimei.list文件里面的所有内容,且有行号
cat -n meimei.list    

#一次性显示meimei.list文件里面的所有内容,但是是倒序
tac meimei.list  
#查看Linux系统版本
cat /etc/redhat-release 
#CentOS Linux release 7.7.1908 (Core)

1.7. 进度滚动显示more

#空格键<Space>表示显示下一屏内容;回车键<Enter>表示显示文本的下一行内容
#字母<H>显示帮助,意为help;字母<B>上一页;字母<Q>退出more过滤器
more  meimei.list

1.8. 选择滚动显示less

#回车键<Enter>表示显示文本的下一行内容,字母<Q>退出less过滤器
#PageUp/PageDown键控制上一页下一页,上下方向键控制上一行下一行
#可以通过 /某个关键字  来高亮显示关键字
less meimei.list

#ps查看进程信息并通过less分页显示
ps -ef | less                   

1.9.前几行显示head

#显示前5行,比如脚本比较多的时候,只看前几行的注释就大概知道这个脚本是干什么的
head -n 5 meimei.list

1.10.跟踪显示tail

#显示最后10行
tail -n 10 meimei.list
#动态跟踪要显示的内容,一般就是跟踪打印日志
tail -f server.log
#动态跟踪要显示的内容,并将内容输出到temp.log文件里面
tail -f server.log  >> temp.log

1.11. 查看cpu和内存等的使用情况top

按数字1可以看到CPU详情,按字母q键退出

1.12.查看整机性能uptime

1.13.查看内存占用free

# 内存占用情况,单位M
# available是现实系统可用提供给应用程序可用的内存大小
free -m
#          total        used        free      shared  buff/cache   available
#Mem:      36984       31349        1637         441        3997        4385
#Swap:      7895        1501        6394
#内存占用情况,单位G,人性化显示
free -gh
#          total        used        free      shared  buff/cache   available
#Mem:       36Gi        30Gi       1.6Gi       441Mi       3.9Gi       4.3Gi
#Swap:     7.7Gi       1.5Gi       6.2Gi

1.14.查看磁盘使用情况df

df -h
#文件系统          大小   已用   空闲   已用%    挂载点
#Filesystem       Size   Used  Avail  Use%   Mounted on
#devtmpfs          16G     0   16G     0%       /dev
#tmpfs             16G     0   16G     0%      /dev/shm
#tmpfs             16G  1.6G   15G     10%     /run

1.15.统计目录文件大小du

#查看/home路径下所有文件容量之和
du -sh /home
#59G     /home
#查看当前目录下 占用磁盘空间最大的前10个文件或文件夹
du -hsx * | sort -rh | head -10
#424G    apache-tomcat-8.5.33
#8.1G    TongWeb6.1
#6.3G    TongWeb6.1_middle
#503M    apache-tomcat-8.5.33.tar.gz
#368M    jdk1.8.0_181
#341M     zookeeper
#4.0K    updateNewProductConf.sh

1.16. vmstat

报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息

vmstat -n 2 3

1.17. iostat查看磁盘IO

比如执行某个特别复杂的SQL出现缓慢

# -x 显示详细信息   -d 显示磁盘使用情况  -k 以K为单位显示
# 2 3表示,数据显示每隔2秒刷新一次,共显示3次
iostat -xdk 2 3

1.18.远程复制scp 

## 将远程服务器172.16.7.16对应目录下的所有文件 复制到本机当前目录 远程用户root
scp root@172.16.7.16:/app/docker_middleware/* ./
#输入安全输入密码
## 将本机当前目录的abc.jar 复制到 远程服务器对应目录下 远程用户root
scp ./abc.jar  root@172.16.7.16:/app/docker_middleware/* 
#输入安全输入密码
#将远端的/app目录下的所有内容复制到本机的/local目录
scp -r root:172.16.7.12:/app /local
#输入安全输入密码
## 将远程服务器对应目录下的所有文件 复制到本机当前目录 远程用户root,密码12345a
sshpass -p 12345a scp root@172.16.7.16:/app/docker_middleware/* ./
## 将本机当前目录的abc.jar 复制到 远程服务器对应目录下 远程用户root,密码123456
sshpass -p 123456 scp ./abc.jar  root@172.16.7.16:/app/docker_middleware/* 

1.19.历史history

#查看历史命令
history
#统计历史命令个数
echo $HISTSIZE
# 在缓存中清空历史命令
history -c
#查看历史命令记录的文件,内容依然存在
cat ~/.bash_history
# 恢复历史命令到缓存中
history -r ~/.bash_history
#执行上一个命令
!!
#执行倒数第二个命令
!-2
#根据history.ID执行命令,比如ID=32
!32
#设置后面再敲的命令不再通过history显示出来
set +o history
#设置后面再敲的命令会通过history显示出来
set -o history

1.20.日期date

#显示当前日期时间
date
#2023年 05月 18日 星期四 09:41:27 CST

#修改日期和时间 年-月-日 时:分:秒
date -s '2024-06-11 10:54:15'

#修改日期 MM/DD/YYYY 月/日/年
date -s 05/18/2016

#修改日期 年月日yyyyMMdd
date +%Y%m%d -s "20240426"

#修改时间 时:分:秒
date -s 13:22:40
#将系统时间同步到硬件时间
clock -w

1.21. curl

#验证是否联通IP为172.16.7.16端口为22的服务器
curl 172.16.7.16:22

#成功的显示:
#SSH-2.0-OpenSSH_7.4
#curl: (56) Recv failure: Connection reset by peer
#失败的显示:
#curl: (7) Failed connect to 172.16.7.16:22; Connection refused

curl www.baidu.com
#<!DOCTYPE html>
#<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;
#charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta 
#content=always name=referrer><link rel=stylesheet type=text/css #href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>
#百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> 

1.22. telnet

#验证是否联通IP为172.16.7.16端口为22的服务器
telnet 172.16.7.16 22
#Trying 172.16.7.16...
#Connected to 172.16.7.16.
#Escape character is '^]'.
#SSH-2.0-OpenSSH_7.4

1.23. ssh

#在linux上远程登录另外一台服务器,ssh -l 用户 IP
ssh -l root 172.16.35.124
#或者使用下面的命令,同样的效果
ssh root@172.16.35.124
#如果加端口号
ssh root@172.16.35.124 -p 22
#The authenticity of host '172.16.35.124 (172.16.35.124)' can't be established.
#ECDSA key fingerprint is SHA256:qnDCEublWRpEyAPm0DkErW3DADr2LDkM14OKRcHBA38.
#Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
#Warning: Permanently added '172.16.35.124' (ECDSA) to the list of known hosts.
#root@172.16.35.124's password: (输入密码)

1.24. hostname和hostnamectl修改主机名

#临时修改主机名,关机后失效
hostname nnnnnn
#永久设置用户名,关机后不失效
hostnamectl set-hostname nnnnnn
hostname

2.Shell脚本

2.1. shell的特殊参数变量

$0   获取she11脚本文件名
$n   获取she11脚本执行时后面跟着的第n个参数,n在1~9之间,如$1 $2,$9 
     大于9则需要写,比如${10},参数空格隔开

$#   获取执行的she11脚本后面的参数总个数
$*   获取she11脚本所有参数,不加引号等同于$@作用,加上引号"$*"作用是 
     接收所有参数为单个字符串,"$1 $2...

$@   不加引号,效果同上,加引号,是接收所有参数为独立字符串,如”$1”"$2” “$3”空格保留

2.2. 特殊状态变量

$?  上一次命令执行状态返回值,0正确,非0失败
$$  当前she11脚本的进程号
$!  上一次后台进程的PID
$_  获取上次执行命令的最后一个参数

2.3. 清空日志

比如清空 /opt/mytest/下的某些日志,且不删除文件

以 #!/bin/sh 开头的文件,程序在执行的时候会调用 /bin/sh ,也就是bash解释器

#!/bin/sh 
  
echo "======== start clean docker containers logs ========"  
  
logs=$(find /home/app/docker/dockerdata/lib/docker/containers -name *-json.log)  
  
for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  

echo "======== end clean docker containers logs ========"

2.4 批量文件名替换

#要实现的结果:将jpg结尾的并且包含"_finished"的文件的名称中的zmj替换为sxy
cd /opt/mytest20231020
ls
#zmj_1_finished.png  zmj_2_finished.png  zmj_3_finished.png  
#zmj_4_finished.png  zmj_5_finished.png
#zmj_1_finished.jpg  zmj_2_finished.jpg  zmj_3_finished.jpg  
#zmj_4_finished.jpg  zmj_5_finished.jpg  abc.jpg

#实现结果:
#zmj_1_finished.png  zmj_2_finished.png  zmj_3_finished.png  
#zmj_4_finished.png  zmj_5_finished.png
#sxy_1_finished.jpg  sxy_2_finished.jpg  sxy_3_finished.jpg  
#sxy_4_finished.jpg  sxy_5_finished.jpg  abc.jpg
#可以直接执行命令
for f in `ls  *_finished*.jpg`;do mv $f `echo ${f//zmj/sxy}`;done

 如果写入脚本

#!/bin/sh 

for f in `ls  *_finished*.jpg`
    do mv $f `echo ${f//zmj/sxy}`
    done

2.5 删除过期的数据

# dir_path要删除的目录,如果没有则默认是/opt/mytest20231020/
# *.png 是所有以.png结尾的
# -type f 类型是文件
# -mtime +3 这个文件时间已经超过3天
# rm -f  进行删除操作
find ${dir_path:=/opt/mytest20231020/} -name '*.png' -type f -mtime +3|xargs rm -f

2.6 两数值计算

#!/bin/sh 

#函数:数字输错提示
num_prompt_message() {
	printf "Please enter an integer!\n"
}
#函数:符号输错提示
operator_prompt_message() {
	printf 'Please enter an right operator\n'
}

while true
	do
		# read 读取用户输入的内容
        # -t 8 超时8秒
		# -p 给用户的提示信息
		read -t 8 -p "Please input your first number:" first_num
		# 如果用户输入的第一个参数不是正整数
		if [ -n "`echo $first_num | sed 's/[0-9]//g'`" ]
			then
				num_prompt_message
		else
			break
		fi
	done

while true
	do
		read -t 8 -p "Please input your operator:" operator
		# 如果用户输入的运算符不是+-*/%**
		if [ "${operator}" != "+" ] && [ "${operator}" != "-" ] && [ "${operator}" != "*" ] && [ "${operator}" != "/" ] && [ "${operator}" != "%" ] && [ "${operator}" != "**" ]
			then
				operator_prompt_message
		else
			break
		fi
	done

while true
	do
		# read 读取用户输入的内容
		# -p 给用户的提示信息
		read -t 8 -p "Please input your second number:" second_num
		# 如果用户输入的第二个参数不是正整数
		if [ -n "`echo $second_num | sed 's/[0-9]//g'`" ]
			then
				num_prompt_message
		else
			break
		fi
	done
	
# 显示结果 first_num 运算符 second_num=运算结果
echo "$first_num${operator}$second_num=$(($first_num${operator}$second_num))"

2.7 测试网站访问情况

比如定义一个脚本checkurl.sh

#!/bin/bash 

# 美化输出信息,如果是成功信息调用log_success_msg,失败信息调用log_failure_msg---START
lsb_functions="/lib/lsb/init-functions"
#如果有lsb,则执行lsb
if test -f $lsb_functions ; then
	.$lsb_functions
else
	init_functions="/etc/init.d/functions"
	if test -f $init_functions; then
		. $init_functions
	fi
	log_success_msg(){
		echo " SUCCESS! $@"
	}
	log_failure_msg(){
		echo " ERROR! $@"
	}
fi
# 美化输出信息,如果是成功信息调用log_success_msg,失败信息调用log_failure_msg---END

#校验输入参数个数
check_param_num(){
	if [ "$#" -ne "1" ]; then
		log_failure_msg "输入格式为: $0 url"
		exit 1
	fi
}
#检测URL
check_url(){
	#访问路径
	#curr_url=http://10.106.210.33:28848/nacos/
	#初始化访问网站失败的次数记录变量,若失败达到两次,就发邮件报警
	fail_count=0
	#初始化访问网站成功的次数记录变量,若大于1,则表示成功,退出脚本
	success_count=0
	while true
		do
			# --spider加入身份信息
			# -q -o /dev/null 静默输出
			# --tries=1重连次数为1
			# -T 5 超时5秒
			# $1用户传进来的第一个参数,这里是传入一个url
			wget --spider -q -o /dev/null --tries=1 -T 5  $1
			# 如果结果不为0,即为连接失败
			if [ $? -ne 0 ]
				then
					let fail_count+=1
			else 
				     let success_count+=1 
			fi
			if [ $success_count -gt 1 ]
				then
					log_success_msg "该网站[$1]运行正常....."
					exit 0
			fi
			if [ $fail_count -ge 2 ]
				then
					Critical="该网站[$1]运行异常,请检查!!!!"
					log_failure_msg $Critical
                        #echo $Critical|tee|mail -s "$Critical" dream98job@126.com #<==输出并发送邮件报警
					exit 2
			fi
		done
}
main(){
	check_param_num $*
	
	check_url $1
}
main $*
bash checkurl.sh http://10.106.210.33:28848/nacos/
# SUCCESS! echo 该网站[http://10.106.210.33:28848/nacos/]运行正常....

2.8 按要求获取字符串中每单个字符串

定义一个脚本,脚本名称test.sh

#!/bin/sh 

for str in $1
	do 
		#如果空格分割的字符串长度小于5
		if [ `expr length $str` -lt 5 ]
			then
				echo $str
		fi
	done
sh test.sh "I'm a programmer. I love technology"
#I'm
#a
#I
#love

2.9 脚本安装软件

比如安装lnmp、lamp等,脚本名比如lamp.sh

#!/bin/sh 

#函数:数字输错提示
num_prompt_message() {
	printf "The num you input must b {1|2|3}!\n"
	exit 1
}

scriptpath=/opt/mytest20231020/test_scripts/

# 如果此路径不是目录,则根据此路径创建目录
[ ! -d "$scriptpath" ] && mkdir $scriptpath -p

#cat会把 END 包裹的这段文字打印在屏幕上
cat <<END
	1.[install lamp]
	2.[install lnmp]
	3.[exit]
	please input the num you want:
END

read num
#执行相加操作,如果可操作就是数字,$?=0
expr $num + 1 &> /dev/null

#如果返回结果不为0,即不是数字,或者数字不是1到3
if [ $? -ne 0 ] || [[ ! "$num" =~ [1-3] ]] 
	then
		num_prompt_message 
fi

if [ "$num" -eq "1" ]; then
	#判断文件是否有执行权限。如果false,要么是不存在,要么是没有执行权限
	[ ! -x "$scriptpath/lamp.sh" ] && {
		echo "The file[lamp.sh] does not exist or can't be exec."
		exit 1
	}
	$scriptpath/lamp.sh
	exit $?
elif [ "$num" -eq "2" ]; then
	echo "与1类似,省略。。。"
	exit $?
else
	echo "Bye!See you later!"
	exit 3
fi
#如果脚本没有执行权限,给执行权限
chmod +x lamp.sh

2.10 检测内存

#!/bin/sh 

#获取available的值,是现实系统可用提供给应用程序可用的内存是多少M
# NR表示第二行
# $NF表示最后一列,对应字段是available的值
FreeMem=`free -m |awk 'NR==2 {print $NF}'`
CHARS="Current free available memory is $FreeMem"
$MsgFile=/tmp/memory_message.txt

if [ "$FreeMem" -lt "1000000" ]
	then
		#将内容写入到文件中
		echo $CHARS|tee $MsgFile
		# mail -s "主题" 收件人 < 文件
		mail -s "`date +%F-%T`$CHARS" dream98job@126.com < $MsgFile
		echo "内存不足!"
fi

2.11 Python或其他方式检测MySQL

# 安装python3
yum install python3 python3-devel python3-pip
#安装连接mysql需要用到的组件
pip3 install pymysql

 定义一个脚本pythonlinkmysql.py

import pymysql

db = pymysql.connect(
        host="localhost",
        user='root',
        password='123456',
        db='mytest',
        charset='utf8'
)
#Control and operate  database
cursor=db.cursor()
cursor.execute('select version()')
data=cursor.fetchone()
print("You have successfully connected to the MySQL database version %s."%data)
db.close()
python3 pythonlinkmysql.py 
#You have successfully connected to the database version 5.7.32

 还可以再封装一个检测mysql运行状态脚本check_mysql_status.sh

#!/bin/bash

echo "methon 1:"
if [ `netstat -tunlp | grep mysql| wc -l` = "1" ]
        then
                echo "MySQL is running."
else
        echo "MySQL is stopped."
fi

echo "methon 2:"
if [ `ss -tunlp | grep mysql| wc -l` -eq "1" ]
        then
                echo "MySQL is running."
else
        echo "MySQL is stopped."
fi

echo "methon 3:"
if [ `lsof -i tcp:3306| grep ^mysql |wc -l` -eq "1" ]
        then
                echo "MySQL is running."
else
        echo "MySQL is stopped."
fi

echo "methon 4:"
python3 pythonlinkmysql.py
if [ "$?" -eq 0 ]
        then
                echo "MySQL is running."
else
        echo "MySQL is stopped."
fi

2.12 循环遍历目录找文件

#!bin/bash

#sh findAndMoveJar.sh /home/app/app_patch/v3.7.1_20231222 
# 或者
#sh findAndMoveJar.sh /home/app/app_patch/v3.7.1_20231222 /home/app/app_patch/tempJar

temp_path=$2
foreachDirectoryCp() 
{
    for file in $(ls $1)
    do
        if [ -d $1"/"$file ]; then
            #echo $1"/"$file"是目录"
            foreachDirectory $1"/"${file}
        else
            #echo ${file}"是文件"
			#如果文件以.jar结尾,则将文件复制到temp_path目录下
			#如果temp_path为空,则复制到默认路径/home/app/app_patch/tempJar/下
            if echo "$file" | grep -q -E '\.jar$'
            	then echo "$file";cp $1"/"$file  ${temp_path:=/home/app/app_patch/tempJar/}   
            fi
        fi
    done
}
foreachDirectoryCp $1

3. 安装软件

3.1. 安装JDK8

3.1.1 下载tar.gz包

https://www.oracle.com/java/technologies/downloads/#java8-linux

 3.1.2 tar.gz包上传并解压

#上传到指定的某个目录,比如/home/app_installed
cd /home/app_installed
#上传文件后并解压
tar -zxvf jdk-8u351-linux-x64.tar.gz
ls
#jdk1.8.0_351  jdk-8u351-linux-x64.tar.gz

3.1.3 修改/etc/profile

vim /etc/profile
#末尾追加

 #set java environment
JAVA_HOME=/home/app_installed/jdk1.8.0_351
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH

#重新加载
source /etc/profile
java -version
#openjdk version "1.8.0_345"
#OpenJDK Runtime Environment (build 1.8.0_345-b01)
#OpenJDK 64-Bit Server VM (build 25.345-b01, mixed mode)

3.2. 安装yum

3.2.1 找到对应的镜像包进行挂载

官网下载地址:https://developers.redhat.com/rhel8/ 

比如 rhel-8.7-x86_64-dvd.iso

cd /mnt/
ls
#查看是否有cdrom目录
#如果没有,则创建
mkdir cdrom
mount -t iso9660 /home/rhel-8.7-x86_64-dvd.iso /mnt/cdrom/

3.2.2 修改yum配置文件并加载

cd /etc/yum.repos.d/
mv redhat.repo redhat.repo.bak
vim yum.repo

[RHEL-BaseOS]
name=RHEL-BaseOS
baseurl=file:///mnt/cdrom/BaseOS
gpgcheck=0
enabled=1

[RHEL-AppStream]
name=RHEL-AppStream
baseurl=file:///mnt/cdrom/AppStream
gpgcheck=0
enabled=1

dnf clean all
yum list
cd /mnt/cdrom/
ls
#AppStream  BaseOS  EFI  EULA  GPL  RPM-GPG-KEY-redhat-beta  RPM-GPG-KEY-redhat-release
#  TRANS.TBL  extra_files.json  images  isolinux  media.repo
cd BaseOS/
ls
#Packages  repodata

3.3. yum安装telnet

yum install telnet
yum install telnet-server
rpm -qa | grep telnet
#telnet-0.17-76.el8.x86_64
#telnet-server-0.17-76.el8.x86_64
telnet 172.16.35.126 22
#Trying 172.16.35.126...
#Connected to 172.16.35.126.
#Escape character is '^]'.
#SSH-2.0-OpenSSH_8.0

3.4. Linux安装Nacos

3.4.1 下载

Release 1.4.6 (Mar 25th, 2023) · alibaba/nacos · GitHub

3.4.2 上传并解压

cd /opt
ls
#nacos-server-1.4.6.tar.gz
tar -zxvf nacos-server-1.4.6.tar.gz

3.4.3 修改配置信息

#进入nacos配置文件目录
cd /opt/nacos/conf
#编辑nacos配置文件
vim application.properties

 ### Default web context path:
server.servlet.contextPath=/nacos
### Include message field
server.error.include-message=ALWAYS
### Default web server port:
server.port=8848

 3.4.4 启动Nacos

#进入目录
cd /opt/nacos/bin
#启动nacos
sh startup.sh -m standalone

3.4.5 浏览器访问

http://192.168.1.133:8848/nacos/#/login

默认用户密码:nacos/nacos

 

3.5. 安装ftp

  3.5.1 yum安装ftp

#如果有网络
yum -y install vsftpd

  3.5.2 离线安装ftp

    3.5.2.1 下载安装包

https://pkgs.org/download/vsftpd

比如centos7安装ftp3版本服务端

http://mirror.centos.org/centos/7/updates/x86_64/Packages/vsftpd-3.0.2-29.el7_9.x86_64.rpm

 比如centos7安装lftp4版本客户端,在linux客户端使用的工具,如果用不到可以不安装

http://mirror.centos.org/centos/7/os/x86_64/Packages/lftp-4.4.8-12.el7_8.1.x86_64.rpm

    3.5.2.2 安装
#如果没有网络
cd /mnt/Packages
ls
#lftp-4.4.8-12.el7_8.1.x86_64.rpm  vsftpd-3.0.2-29.el7_9.x86_64.rpm
rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm
rpm -ivh lftp-4.4.8-12.el7_8.1.x86_64.rpm 

  3.5.3 开启ftp服务

#启动ftp服务
service vsftpd start
#配置为开机自启
systemctl enable vsftpd.service
#查看ftp监听端口
netstat -anptu | grep ftp
#tcp6    0   0 :::21           :::*         LISTEN      102590/vsftpd

  3.5.4 配置文件和默认目录

/var/ftp/pub                      #默认的共享目录

/etc/vsftpd/ftpusers          #用户黑名单

/etc/vsftpd/user_list         #用户白名单

/etc/vsftpd/vsftpd.conf     #ftp配置文件

/var/ftp/                            #默认情况下匿名用户的根目录

  3.5.5 在Linux系统上访问

lftp 192.168.1.133
#lftp 192.168.1.133:~> ls                
#drwxr-xr-x    2 0        0               6 Jun 09  2021 pub

  3.5.6 在windows系统上访问

    3.5.6.1 匿名访问
cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.bak
vim vsftpd.conf

#允许匿名访问

anonymous_enable=YES

#重启服务
systemctl restart vsftpd.service

在文件夹中输入: ftp://IP,会显示一个默认的目录pub,因为vsftpd默认文件路径为/var/ftp/pub

    3.5.6.2 限定用户访问限定目录

        示例:公司内部现在有一台FTP 和WEB 服务器,FTP的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别适用team1 和team2帐号进行管理。要求仅允许team1 和team2 账号登录FTP 服务器,但不能登录本地系统,并将这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。

#新建两个用户,并限定其不能登录服务器系统
useradd -s /sbin/nologin team1
useradd -s /sbin/nologin team2
#给ftp用户设置密码
echo 123456 | passwd --stdin team1
echo 123456 | passwd --stdin team2
cd /etc/vsftpd
vim vsftpd.conf
#设置本地用户的根目录 
local_root=/var/www/html
#匿名用户禁止登录  
anonymous_enable=NO
#激活chroot功能  
chroot_list_enable=YES
#此文件存放锁定的用户名
chroot_list_file=/etc/vsftpd/chroot_list
touch /etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list

team1

team2

mkdir -p /var/www/html
chmod -R o+w /var/www/html/
cd /var/www/html/
touch test1.txt
 systemctl restart vsftpd

3.6.yum安装Python

yum install python3 python3-devel python3-pip

持续更新中

不断更新中......

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱梦君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值