快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → 在ubuntu20.04上用shell配置开机自启动

在ubuntu20.04上用shell配置开机自启动

时间:2022-09-25 17:16:04人气:作者:快盘下载我要评论

一周学的shell;一周半学的ros;然后这个人给了一个实战和一个开机自启动的任务;头发都掉光了~~


实战练习

有一个文件夹;里面有一堆.png图片和.jpeg;怎么把他们分开;分别存放在两个文件夹里

代码如下

代码1.0

#! /bin/bash

find . -name ;*.png; | xargs mv -t *demoPng/
find . -name ;*.jpeg; | xargs mv -t *demoJpeg/

代码2.0

#! /bin/bash

cp demo/*.jpeg -a demo/*png demoJpeg
cp demo/*.jpg demoJpg

sudo chmod ;x ./movefile.sh #给movefile权限

在ubuntu20.04上用shell配置开机自启动其实这个不算难;看了看C站上的一些博客;可以很轻松解决。

补充知识点

shell脚本之find

是实时查找工具;通过遍历指定路径下的文件完成文件查找
工作方式;沿着文件层次结构向下遍历;匹配符合条件的文件;执行响应的操作
find [options] ... [查找条件] [处理动作]
查找路径;指定具体的目标路径;默认当前目录
查找条件;指定的查找标准;可以是文件名;大小;类型;权限等;默认为找出指定路径下的所有文件

根据文件名查找;

-name;文件名称;;支持通配符查找-iname;文件名称;;不区分文件名大小写
# 匹配/home/dou目录下所有以.txt为结尾的文件
find /home/dou -name ;*.txt; -print 

根据属主;属组查找

-user USERNAME;查找属主为指定用户的文件-group GROUPNAME;查找属组为指定用户的文件-uid USERID;查找属主为指定uid号的文件-gid GroupID;查找属组为指定GID号的文件-nouser;查找没有属主的文件-nogroup;查找没有属组的文件
find . -type f -user doudou -print
# 打印出当前目录下doudou拥有的所有文件

根据文件类型查找

-type TYPEf;普通文件d;目录文件l;符号链接文件s;套接字文件b;块设备文件c;符号设备文件p;管道文件
# 匹配当前目录下所有的目录文件
find . -type d -print

组合条件
与;-a
或;-o
非;-not;!

#匹配包含这两种文件类型的文件
find .(-name ;*.txt; -o ;*pdf;) -print  

根据文件大小进行查找

-size[;,-]num单位;常用单位有;K,M,Gnum单位;显示的是大于num-1;小于等于num这个区间内的值-num单位;显示的是大于0,小于num-1区间内的值;num单位;大于num至无穷大区间内的所有取值
# 匹配当前目录下大于2k的文件
find . -type f -size ;2k

根据文件时间进行查找

访问时间;-atime;;用户最近一次访问文件的时间修改时间;-mtime;;文件内容最后一次被修改的时间变换时间;-ctime;;文件元数据;例如权限和所有权;最后一次改变的时间
# 匹配打印最近7天内访问的所有文件
find . -type f -atime -7 -print
-amin ;访问时间-分钟
-mmin ;修改时间-分钟
-cmin ;变化时间-分钟

根据目录的深度进行查找
-mindepth,-maxdepth选项来限制find命令遍历的目录深度
#列出当前目录下的所有以f开头的文件;即使有子目录;也不会被打印和遍历
find . -maxdepth 1 -name ;f*; -print

处理动作
-print;默认处理动作;显示至屏幕
-ls;类似于对查找到的文件执行“ls -l”命令
-delete;删除查找到的文件
-fls /PATH/TO/SOMEFILE;查找到的所有文件的长格式信息保存至指定文件中

shell脚本之xargs

xargs是给命令传递参数的一个过滤器;也是组合多个命令的一个工具
xargs可以将管道或标准输入数据转换成命令行参数;也能够从文件的输出中读取数据
xargs也可以将单行或者多行文本输入转为其他格式;多行变单行;单行变多行;
xargs的默认命令是echo;这意味着通过管道传递给xargs的输入将会包含换行和空白;不过通过xargs的处理;换行和空白将被空格取代


格式;
somecommand | xargs -item command



-a file 从文件中读入作为sdtin
-e flag ;注意有的时候可能会是-E;flag必须是一个以空格分隔的标志;当xargs分析到含有flag这个标志的时候就停止。
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数;表示命令在执行的时候一次用的argument的个数;默认是用所有的。
-t 表示先打印命令;然后再执行。
-i 或者是-I;这得看linux支持了;将xargs的每项名称;一般是一行一行赋值给 {};可以用 {} 代替。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs;不用再去执行了。
-s num 命令行的最大字符数;指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符;默认的xargs分隔符是回车;argument的分隔符是空格;这里修改的是xargs的分隔符。
-x exit的意思;主要是配合-s使用。。
-P 修改最大的进程数;默认是1;为0时候为as many as it can ;这个例子我没有想到;应该平时都用不到的吧。



xargs cat命令参数
cat main.c | xargs //没加命令;默认为echo
xargs -i命令参数
ls *.c | xargs -i tar -zcvf 2.tgz {}
xargs sh -c命令参数
cat file.txt | xargs -i  sh -c ‘command {} | command2 {} && command3 {}‘

shell脚本之mv
shell 的 mv 命令为移动;moving;的意思;实际可分为文件间的移动;文件到目录的移动;目录到目录的移动。

格式;
mv [选项] 源文件或目录 目标文件或目录


命令功能;

1.视mv命令中第二个参数类型的不同(是目标文件还是目标目录);mv命令将文件重命名或将其移至一个新的目录中。

2.当第二个参数类型是文件时;mv命令完成文件重命名;此时;源文件只能有一个(也可以是源目录名);它将所给的源文件或目录重命名为给定的目标文件名。

3.当第二个参数是已存在的目录名称时;源文件或目录参数可以有多个;mv命令将各参数指定的源文件均移至目标目录中。

4.在跨文件系统移动文件时;mv先拷贝;再将原有文件删除;而链至该文件的链接也将丢失。



参数;
-b ;若需覆盖文件;则覆盖前先行备份。

-f ;force 强制的意思;如果目标文件已经存在;不会询问而直接覆盖;

-i ;若目标文件 (destination) 已经存在时;就会询问是否覆盖;

-u ;若目标文件已经存在;且 source 比较新;才会更新(update)

-t  ; --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY;即指定mv的目标目录;该选项适用于移动多个源文件到一个目录的情况;此时目标目录在前;源文件在后。

开机自启动程序

开机自启动脚本1.0

大概是因为每次运行ros结点时都要打开好几个终端;所以下意识的;就想到了打开多个终端执行;可惜的是;这一版不仅不能开机自启动;就连最基本的运行都很难做到。而且;这个人还指出了这些脚本名字都很难听;于是开始第二版;

FYT2023.service

[Unit]

Description=...

[Service]

#寻找ros包
Environment=LD_LIBRARY_PATH=/opt/ros/noetic/share/cv_bridge:/opt/ros/noetic/share/image_transport:/opt/ros/noetic/share/fyt_msg:/opt/ros/noetic/share/roscpp:/opt/ros/noetic/share/sensor_msgs:/opt/ros/noetic/share/std_mags


#执行的目标脚本
ExecStart=/bin/FYT2023.sh
#异常中止后是否重启的选项;一直重启
Restart=always
Type=simple
#重启间隔;1s
RestartSec=1
#重启次数限制;无限制
StartLimitInterval=0

[Install]

WantedBy = multi-user.target

openrostest.sh

#!/bin/bash


shdir=$(pwd)/FYT2023.sh
shdir1=$(pwd)/openroscore.sh
shdir2=$(pwd)/openconfig.sh
shdir3=$(pwd)/openimg_catcher.sh
shdir4=$(pwd)/opentest_img_catcher.sh

shdir_tls=$(pwd)

echo ;#!/bin/bash; > $shdir1
echo ;cd ../; >> $shdir1
echo ;source devel/setup.bash; >> $shdir1
echo ;roscore; >> $shdir1

echo ;#!/bin/bash; > $shdir2
echo ;cd ../; >> $shdir2
echo ;source devel/setup.bash; >> $shdir2
echo ;rosrun config node; >> $shdir2

echo ;#!/bin/bash; > $shdir3
echo ;cd ../; >> $shdir3
echo ;source devel/setup.bash; >> $shdir3
echo ;rosrun img_catcher node; >> $shdir3

echo ;#!/bin/bash; > $shdir4
echo ;cd ../; >> $shdir4
echo ;source devel/setup.bash; >> $shdir4
echo ;rosrun test_img_catcher node; >> $shdir4

echo ;#!/bin/bash; > $shdir
#echo ;cd ../; >> $shdir
#echo ;catkin_make --pkg fyt_msg; >> $shdir
#echo ;catkin_make; >> $shdir
#echo ;sleep 8s; >> $shdir
#echo ;cd Tools; >> $shdir
echo ;{; >> $shdir
echo ;   gnome-terminal -- bash -c ;;$shdir_tls/openroscore.sh;exec bash;;; >> $shdir
echo ;}&; >> $shdir
echo ;sleep 1s; >> $shdir
echo ;{; >> $shdir
echo ;   gnome-terminal -- bash -c ;;$shdir_tls/openconfig.sh;exec bash;;; >> $shdir
echo ;}&; >> $shdir
echo ;sleep 1s; >> $shdir
echo ;{; >> $shdir
echo ;   gnome-terminal -- bash -c ;;$shdir_tls/openimg_catcher.sh;exec bash;;; >> $shdir
echo ;}&; >> $shdir
echo ;sleep 1s; >> $shdir 
echo ;{; >> $shdir
echo ;   gnome-terminal -- bash -c ;;$shdir_tls/opentest_img_catcher.sh;exec bash;;; >> $shdir 
echo ;}; >> $shdir
echo ;cd $(pwd); >> $shdir
echo ;$(pwd)/FYT2023; >> $shdir


sudo chmod ;x $(pwd)/openroscore.sh
sudo chmod ;x $(pwd)/openconfig.sh
sudo chmod ;x $(pwd)/openimg_catcher.sh
sudo chmod ;x $(pwd)/opentest_img_catcher.sh

sudo cp ./FYT2023.service /etc/systemd/system/ #将服务文件FYT2021.service加入到系统服务文件夹中
sudo cp $shdir /bin/ #将FYT2021.sh复制到 /bin 文件夹中
sudo chmod ;x /bin/FYT2023.sh #给bin中的FYT2021.sh赋予可执行权限
sudo chmod ;x $(pwd)/FYT2023.sh #给bin中的FYT2021.sh赋予可执行权限
sudo systemctl daemon-reload #刷新系统服务列表
sudo systemctl enable FYT2023.service #启动系统服务

开机自启动脚本2.0

这一版又加了删除部署的脚本;基本可以部署成功;只是很奇怪;开机之后执行【rosnode list】查看运行结点的时候;显示链接不上master。想不出来;发给组长。

FYT2023.service

[Unit]

Description=...

[Service]

#寻找OpenVINO中的OpenCV包
Environment=LD_LIBRARY_PATH=/opt/ros/noetic/share/cv_bridge:/opt/ros/noetic/share/image_transport:/opt/ros/noetic/share/fyt_msg:/opt/ros/noetic/share/roscpp:/opt/ros/noetic/share/sensor_msgs:/opt/ros/noetic/share/std_mags



#执行的目标脚本
ExecStart=/bin/FYT2023.sh
#异常中止后是否重启的选项;一直重启
Restart=always
Type=simple
#重启间隔;1s
RestartSec=1
#重启次数限制;无限制
StartLimitInterval=0

[Install]

WantedBy = multi-user.target

Deploy.sh

#!/bin/bash


shdir=$(pwd)/FYT2023.sh
shdir_tls=$(pwd)



echo ;#!/bin/bash; > $shdir

echo ;cd $shdir_tls/../; >> $shdir

echo ;source devel/setup.bash; >> $shdir
echo ;roscore &; >> $shdir
echo ;sleep 8s; >> $shdir
echo ;rosrun config node &; >> $shdir
echo ;rosrun img_catcher node &; >> $shdir
echo ;rosrun test_img_catcher node &; >> $shdir
echo ;cd $(pwd); >> $shdir
echo ;$(pwd)/FYT2023; >> $shdir


sudo cp ./FYT2023.service /etc/systemd/system/ #将服务文件FYT2023.service加入到系统服务文件夹中
sudo cp $shdir /bin/ #将FYT2023.sh复制到 /bin 文件夹中
sudo chmod ;x /bin/FYT2023.sh #给bin中的FYT2023.sh赋予可执行权限
sudo systemctl daemon-reload #刷新系统服务列表
sudo systemctl enable FYT2023.service #启动系统服务
sudo systemctl start FYT2023.service #启动系统服务

Undelpoy.sh

#!/bin/sh
sudo systemctl disable FYT2023.service
sudo rm /etc/systemd/system/FYT2023.service
sudo rm /bin/FYT2023.sh
开机自启动脚本3.0
组长想不出来;摆烂~
但还是有一个奇怪的解决方案;就是第三版

Deploy.sh

#!/bin/bash


shdir=$(pwd)/FYT2023.sh
shdir_tls=$(pwd)



echo ;#!/bin/bash; > $shdir

echo ;cd $shdir_tls/../; >> $shdir

echo ;source devel/setup.bash; >> $shdir
echo ;roscore &; >> $shdir
echo ;sleep 8s; >> $shdir
echo ;rosrun config node &; >> $shdir
echo ;rosrun img_catcher node &; >> $shdir
echo ;rosrun test_img_catcher node &; >> $shdir

echo ;sleep 500000000s; >> $shdir

sudo cp ./FYT2023.service /etc/systemd/system/ #将服务文件FYT2023.service加入到系统服务文件夹中
sudo cp $shdir /bin/ #将FYT2023.sh复制到 /bin 文件夹中
sudo chmod ;x /bin/FYT2023.sh #给bin中的FYT2023.sh赋予可执行权限
sudo systemctl daemon-reload #刷新系统服务列表
sudo systemctl enable FYT2023.service #启动系统服务
sudo systemctl start FYT2023.service #启动系统服务

Knode.sh

#!/bin/sh

rosnode list | xargs rosnode kill	

开机自启动脚本4.0

好不容易搞完了;组长说这一版不稳定;需要用ros的launch来启动多个结点;好吧我不会;但最后组长搞出来了;如下

组长的博客

Deploy.sh

#!/bin/bash


shdir=$(pwd)/FYT2023.sh
shdir_tls=$(pwd)


# 生成 FYT2023.sh 脚本
echo ;#!/bin/bash; > $shdir
echo ;cd $shdir_tls/../; >> $shdir
echo ;export ROS_HOME=;pwd;; >> $shdir
echo ;source devel/setup.sh; >> $shdir
echo ;roslaunch start.launch; >> $shdir





#将服务文件FYT2023.service加入到系统服务文件夹中
sudo cp ./FYT2023.service /etc/systemd/system/ 
#将FYT2023.sh复制到 /bin 文件夹中
sudo cp $shdir /bin/ 
#给bin中的FYT2023.sh赋予可执行权限
sudo chmod ;x /bin/FYT2023.sh 
#给当前目录中的FYT2023.sh赋予可执行权限
sudo chmod ;x $(pwd)/FYT2023.sh 
#刷新系统服务列表
sudo systemctl daemon-reload 
#启动系统服务
sudo systemctl enable FYT2023.service 

部署

cd Tools
sudo chmod ;x Deploy.sh
sudo ./Deploy.sh

取消部署

sudo ./Undeploy.sh
另外;这些脚本文件都在Tools文件夹下面;但start.launch文件却在Tools文件夹外面

start.launch

<launch>

    <node pkg=;config; type =;node; name=;config; respawn=;true;/>
    <node pkg=;img_catcher; type =;node; name=;img_catcher; respawn=;true;/> 
    <node pkg=;test_img_catcher; type =;node; name=;test_img_catcher; respawn=;true;/>
</launch>

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。