[linux]--复习整理fx-shell

本文提供了一系列Linux常用命令的快速查阅指南,包括文件操作、用户管理、进程控制、系统监控及网络管理等关键功能。深入解析了如cp、mkdir、useradd、su、sudo等命令的使用方法,并介绍了如何启动jar包、设置环境变量、使用vim编辑器、执行shell脚本等高级技巧。

tail -f -n 100 日志文件名

将文件中下的若干子文件夹中的mp4视频提取出来,然后删除子文件夹

find .  -type f \( -iname "*.mp4" -o -iname "*.MP4" \) -exec sh -c 'mv "$@" "./"' _ {} +

find /path/to/search # 在指定目录搜索
-type f # 只查找文件(不包括目录)
( # 开始组合条件
-iname “.mp4" # 查找.mp4文件(不区分大小写)
-o # 或
-iname "
.MP4” # 查找.MP4文件(不区分大小写)
) # 结束组合条件
-exec # 对找到的文件执行命令
mv -t /path/to/target # 移动文件到目标目录
{} + # 一次性传递所有结果(高效处理大量文件)
sh -c:启动子shell执行命令

“$@”:接收所有找到的文件路径

_:占位符(表示$0)

{} +:批量传递文件路径

dd

<<:表示开启 Here Document,将后续的文本块作为输入。

EOF:用户自定义的结束标记(End Of File 的缩写,但可替换为其他字符如 END、`STOP`` 等),标记文本块的结束位置

符号 << EOF 和 EOF 表示一种称为 Here Document(或 Here-Doc)的输入重定向方式。其作用是:将两个标记(这里是 EOF)之间的多行文本内容,作为标准输入传递给前面的命令

ssh 192.168.112.14 << EOF
/opt/cloud2x/cloud-backend/run.sh restart
echo "Rebuild successful"
EOF
将两个 EOF 之间的内容(即两行命令)通过 SSH 发送到远程服务器 192.168.112.14 执行

结束标记必须独占一行:EOF 必须单独一行且顶格写,前后不能有其他字符。

测试-curl调用60次,验证结果分析

# 发起61次请求并保存所有状态码
resp=$(seq 61 | xargs -I{} curl --location --request POST 'https://cloud-test2.gl-inet.cn:9443/cloud-basic/cloud/v2/device' \
                 --header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
                 --header 'Accept: */*' \
                 --header 'Host: cloud-test2.gl-inet.cn:9443' \
                 --header 'Connection: keep-alive' \
                 --header 'Content-Type: application/json' \
                 --data-raw '{
                   "delFlag": "@name",
                   "enableStatus": "@name",
                   "description": null,
                   "mac": "@name",
                   "sn":"@name",
                   "ddns": "@name",
                   "name":"@name",
                   "lat": "@name",
                   "lng": "@name",
                   "position":"@name"
                   }' -o /dev/null -s -w "%{http_code}\n") && \
  count_500=$(echo "$resp" | grep -c '500') && \
  count_201=$(echo "$resp" | grep -c '201') && \
  echo "500: $count_500, 201: $count_201"

–seq 5:生成数字1到5,每个数字占一行。即输出5行,分别是1、2、3、4、5。这个命令通常用于生成序列,通常作为循环的次数或者其他需要迭代的情况。
在这里,用户试图用seq来发起5次curl请求

-o /dev/null:将输出结果(如响应体)重定向到/dev/null,即不保存响应内容。
-s:静默模式,不显示进度或错误信息。
-w “%{http_code}\n”:输出HTTP状态码,并在后面加换行符

ping命令用来测试主机之间网络的连通性

# 尝试确认主机服务器的某个端口是否可用
telnet 192.168.7.42 8080

快捷方式 ->

是一个符号链接(Symbolic Link),类似于快捷方式。
创建链接

ln -s /etc/nginx/sites-available/api-cloud-test.gl-inet.cn /etc/nginx/sites-enabled/

删除链接

rm /etc/nginx/sites-enabled/api-cloud-test.gl-inet.cn

cp

cp -r 递归地向下拷贝所有子目录和文件

递归创建

mkdir -pv a/b/c

用户的新建

前提 需要在root下进行

useradd lihua
passwd lihua
useradd -G wheel wanglei && echo "1qaz2wsx" | passwd --stdin wanglei

切换用户

中间的斜杠不能去掉,不然有些预加载配置不能生效

su - root

sudo的正确理解

sudo是使用其他用户的身份执行命令
例如,root权限付一下全给普通用户lihua,让其可以关机(正常情况下,普通用户是没有关机的权限的)
赋权:

visudo

编辑添加 lihua ALL=/sbin/shutdown -c

验证是否有某个用户

id lihua

彻底删除某个用户

userdel -r lihua

-r代表的是彻底删除

启动你的jar

java -jar chat-ai-admin.jar \
 --server.port=8001 \
 --spring.config.name=application,application-druid \
  --spring.config.location=./resources/ &

nohup java -jar xx.jar >> running.log &

nohup java -jar ..jar &
nohup java -jar ivr-ce-1.0-SNAPSHOT 2>/dev/null &
nohup java -jar miner-job-executor-0.0.1.jar  2>/dev/null  >>./miner-job-executor.log &
nohup  java -jar 
 nohup java   -jar -Xbootclasspath/a:`dirname $0`/conf/ `dirname $0`/bin/devSimulator.jar 2>/dev/null >> `dirname $0`/log/running.log
 
 classpath的设置方法  
// -Xbootclasspath/a: 后缀在核心class搜索路径后面.常用!!
 
// dirname $0,获取当前Shell程序的路径

nohup java -jar XXX.jar > /dev/null 2>&1 &
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。屏蔽输出,起到禁止输出作用:/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是/dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果
“> Log.log 2>&1” :表示将 stdout 和 stderr 合并后重定向到 Log.log
禁止输出,他就自动跑起来了,不用ctrl +c 结束;

手动指定 application.yml

通过 --spring.config.location 参数可以指定配置文件的位置。
java -jar /abc/xxx.jar --spring.config.location=/abc/application.yml

查看那些隐藏的文件

ls -la

a 代表查看隐藏的文件,隐藏文件的特征是前面带一个点

英语

一般 Abort 都是代表出现了异常

看linux的物理内存条大小

free -h

shell是什么

本质就是一种命令解释器,
他的设计哲学是一条命令就做一件事

普通三步走

vim  xxx.sh
#!/bin/bash
chmod u+x xxx.sh
./xxx.sh

内建命令和外部命令

如何查看是内还是外

type cd

内建命令举例:
cd history exit kill alias break echo enable eval exec export false true fc fg pwd read
外部命令距离:
more less cat wget ls

输出的分类

各种命令都是和输出输入关联的,命令可能正确执行了,也可能就因为一些原因,失败了;
so 我们将输入输出分为三种,一种是标准输入,第二种是标准输出,第三者是错误输出
输出的一些符号 > >> &>;建议多使用&>,可以将错的和对的都输入到某个文件,这样就方便进行

echo " It's your message"  >  a.txt
echo "It's your message " >> a.txt
echo"It's your message " &> b.txt 

wc

wc 是 Linux/Unix 系统中的 ‌文本统计工具‌(Word Count),用于计算文件的行数、单词数和字节数。

wc -l < /etc/passwd
该命令会输出 /etc/passwd 文件的总行数

l代表统计行数, < 表示的是输入符号

touch

建立一个文件

touch {1..5}.txt

一句特别哲学的话: file means = files + direction

vim 1.txt

cat > a.txt

变量

001 定义

aa=$1

重点是等号两边不能有空格

002 将命令结果赋值给变量

$()    ``
eg:  aa=$(ls -la/etc)

003引用
“” 当字符串中有双引号,外围用单引号
‘’ 当字符串中有单引号,外围用双引号
eg:

echo  " I'm a hansome man"

004变量的引用

${}

005子进程获取父进程的信息

export aa="hello"

006 如何查看环境变量

env
echo $USER
echi $PATH

命令如果不在path中,那么需要使用绝对路径
007如何添加PATH

PATH=$PATH:/root

冒号杠绝对路径就是你添加的path
008 几个变量
one
$? 上一条命令返回的结果

echo $?
function result(){
if [ 0 -eq $? ] ; then
echo " good result ==== 0"
else
echo " bad result"
fi
}

two
$$当前线程的pid

echo "$$"

three
$0 当前进程的名称

echo "$0"

four
$1 - $2 -------- $n

$1=${-nothing}

上面的技巧用于参数的替换
009环境变量的配置文件
按照一般的加载顺序进行罗列
/etc/profile
~/.bash.profile
~/.bashrc
so,我们我该的话,一般是改 /etc/profile

数组

定义(默认用空格作为分隔符

aa=(111 222 333)

显示所有的元素

echo ${aa[@]}

显示个数

echo ${#aa[@]}

显示第一个指

echo ${aa[0]}

运算

shell的运算只能支持整数
eg:

aa=$(expre 4 + 5)
((bb=5+6))

显然第二种方式更加优秀,加号两边不用空格,而第一种,加号两边都必须有空格

逻辑判断

-eq 等于
-ne 不等于 no equal
-le 小于 less
-gt 大于 greater

技巧 大于小于可以使用加强版测试表达式 [[]] ,使用 <(小于) >(大于)

测试判断符

[]
加强版的测试判断符号 [[]],可以使用 && || > <
备注 测试分三种:数字 字符串 文件

one 测试是否相等

aa="rr"
if  [ ${aa} = "rr" ];then #测试符的等号左右有空格
echo "as you see It's equal"
else
echo " not equal"
fi

[[ -z “$result” ]] 为什么要两对中括号

在 Bash 脚本中,双方括号 [[ ... ]] 是一种条件测试语法。相比于单方括号 [ ... ],双方括号提供了更多的功能和灵活性。

双方括号内的表达式可以进行更复杂的条件判断,并且支持字符串比较、模式匹配、正则表达式等功能。此外,使用双方括号时,不需要像单方括号那样对变量进行引用或转义。

在您提供的例子中,[[ -z "$result" ]] 是一个条件判断语句,用于检查变量 $result 是否为空。这个条件判断的意思是:如果 $result 是空字符串或未定义,则条件为真。

而使用双方括号 [[ ... ]] 作为条件判断的主要优势是,它可以避免由于变量为空时的意外行为。在使用双方括号时,不会出现由于变量未定义而导致执行错误的情况。

-z 检测字符串长度是否为0,为0返回 true。 StringUtil.isBlank()
other 添加链接描述

文件的测试

-e 文件夹是否存在
-d 文件存在且为路径
-f 文件是否存在,且为常规文件

文件的测试

-e 文件夹是否存在
-d 文件存在且为路径
-f 文件是否存在,且为常规文件

nowdate=$(date +%Y:%m:%d--%H:%M:%S)
Log_File_Place=/opt/app/log
function direction(){
if [ ! -d $1 ];then
mkdir -p $1
fi 
}
direction $Log_File_Place
LogFile=$Log_File_Place/${nowdate}.log
echo "tell me what content that you want to save" >>$LogFile

范围输出

{}

eg:

touch {1..10}.txt

{}的内两端无空格

case玩法

case “$变量”  in
"qingkuang one ")
....;;
"qingkuang two" )
....;;
*)
....
;;
esac

cd

回家

 cd ~

回到上次目录

cd -

if

if [[ ]];then
.....
elif [[ ]];then
...
else
...
fi

for

for 的作用
for遍历 命令执行结果/变量/文件内容/

for 参数 in 
do
done

c语言风格的for

for(( i=1; i<=10;i++))
do
echo "It's the $i  time that you do "
done

心得

for 配合if,配合break 配合contiue完成逻辑

函数

$0 代表脚本名称
$* 和 $@ 代表所有位置参数
$# 代表位置参数的数量
local 修饰为本函数里的变量

find

查文件 find . -name “单机*” -print 单机后面的星号特别重要
这个点 路径

删除所有 .DS_Store 文件

find . -name “.DS_Store” -type f -delete

eg

find /Users/wl/maven -name “*.xml” -print

systemctl

最常用的: systemctl restart S17-sms
还有 stop start state

vim

替换--------%s/old/new/g
撤销 u 
恢复 ctrl+r

rz sz

apt-get update
apt-get install lrzsz
C:\Users\Administrator\Downloads
此处我用的是SecureCRT,具体的更改 rz上传/sz下载 的默认的路径的方法:

右键点击当前会话session -> Session Options -> Terminal -> Xmodem/Zmodem ->Directories :
rz的下载路径你要看一下,不然,就不晓得下载到哪里去了

看大小

ls -lht看文件大小
du -sh *看文件大小
du -sh /home 看对应目录下文件大小

传递 scp

scp root@192.168.132.128:/home/simulator20200306/conf/a.dump ./
scp 没有权限,将这个文件夹给到这个账户

sudo chown -R wanglei:wanglei /var/local/roots/
传递这个文件夹
scp -r wanglei@50.19.156.121:/var/local/roots/ /var/local

压缩:tar -zvfc ./aa.tar.gz ./dcs
解压缩 tar -zvfx aa.tar.gz

-z:使用 gzip 压缩归档文件
-v:显示详细操作过程
f 指定归档文件的名称

x 解压归档文件
c 创建一个新的归档文件

rsync不支持远程到远程的拷贝,但scp支持

rsync

rsync的目的是实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式),

查询部署文件的位置

查询模拟器的为,44629 模拟器的pid
lsof -p 44629 |grep dev

查看某个端口建立了多少TCP链接

netstat -anp |grep 21852 -wc

21852 是端口
在这里插入图片描述

grep

查文件中内容: grep -rn “fix_Bug_Store” *
r是递归查询 *表示当前目录下的所有文件

能通过grep的方式查关键字,具体用法是, grep 关键字 文件名,如果要两次在结果里查找的话,就用grep 关键字1 文件名 | 关键字2 --color。最后–color是高亮关键字。

grep -n -A 3 -H "upstream" ./*

-n 显示行号
-A 多显示几行
-H显示文件名

linux使用ftp传递文件

ftp 192.168.26.66
输入账户密码 ,连接成功。
得到文件 get/111/a.txt a.txt ------下载111文件夹下面的a.txt文件
上传文件 post/111/b.txt ------上传b.txt到111文件夹

如果您觉得我的付出对您有帮助,还请关注+点赞哦

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值