【ROS基础】Linux命令行
ros基础,Linux命令行
系列文章目录
【ROS基础】Linux 命令行
【ROS基础】.launch 文件语法记录
【ROS基础】CMakeLists.txt 文件语法记录
【ROS基础】Package.xml 文件语法记录
【ROS基础】ROS_c++ 语法记录
前言
接触ROS后才开始使用命令行,好记性不如烂笔头。
1、初相见时的疑惑
① 用户名(userName):jyc
② @ 仅起间隔作用
③ 主机名(hostName):hn
④ :仅起间隔作用
⑤ 当前路径: ~ 当前用户的home目录,普通用户等价于 /home/jyc,root用户等价于 /root
⑥ 权限标志位: #代表root,$代表普通用户
补充1、sudo 和 su 命令的全称
- sudo: superuser do 它是一个系统权限管理命令,可以让非root的用户运行只有root才有权限执行的命令,如halt,reboot,su等等。
- su: switch user 它是一个更换使用者身份的命令,除 root 切其他用户外不用输密码,普通用户切其他用户都需要键入密码。
2、修改密码、主机名、用户名
修改密码
打开终端,输入:sudo su 转为root用户
输入:passwd user //user是对应的用户名,或为普通用户jyc,或为根用户root
输入新密码
确认新密码(再输入一遍新密码)
修改密码成功,重启,输入新密码进入Ubuntu
修改主机名
修改 hostname 文件:
输入:sudo nano /etc/hostname //把旧主机名改为新主机名
修改 hosts 文件
输入:sudo nano /etc/hosts //把旧主机名改为新主机名
修改主机名成功,重启,输入新密码进入Ubuntu
修改/etc/hosts文件注意只修改第2行的名字就行,其他地方不用修改:
修改用户名
sudo su //转为 root 用户
gedit /etc/passwd //找到代表你的那一行,修改用户名为新用户名
gedit /etc/shadow //找到代表你的那一行,修改用户名为新用户名
gedit /etc/group //你应该发现你的用户名在很多个组中,全部修改
修改完毕? NO! NO! NO! 千万别急着重启
进入 /home 目录
mv name_dir_old name_dir_new //将old文件夹用户名修改为new文件夹用户名
修改用户名成功,重启,输入新密码进入Ubuntu
注:如果 修改用户名 时不小心提前重启了也不用怕,可以参考这个链接:Ubuntu修改用户名后无法登陆
补充2、su root 认证失败
su root 认证失败,可能是因为密码输错或者 root 用户没有初始化。如果是因为密码输错,可以尝试重新输入密码。如果是因为root用户没有初始化,可以运行以下命令进行初始化:sudo passwd root,之后会提示 “重新输入新的 UNIX密码:” 输入新密码,再次输入上次输入的密码就可以了。
3、进入、退出root权限
进入root权限:① sudo su (我常用) ② su root
退出root权限:①Ctrl + D (我常用) ② exit ③ su user_name
4、关闭当前终端
命令: exit
快捷键: Ctrl + D
5、echo、sh
案例:设置ROS安装源,下面是中科大ustc的镜像源:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" >
/etc/apt/sources.list.d/ros-latest.list'
命令解析:
在Linux中使用echo并配合右移运算符重定向,是实现向文件中写入信息的快捷方式,比如要向file.txt文件中写入一个字符串:
echo "Hello world!" > file.txt //淦!单尖括号会覆盖文件中的内容,慎用!!!
echo "Hello world!" >> file.txt //双尖括号会在最后一行另起一行插入,比较友好
如果将file.txt 的权限设置为只有root才有权限进行操作:
sudo chown root.root file.txt
当使用sudo并配合echo再次向修改权限后的file.txt文件写入信息时会报错:
sudo echo "Hello you!" >> file.txt
bash: file.txt: Permission denied //中文版会报:权限不够
这是因为重定向符号 > 和 >> 也是 bash 的命令。使用sudo只是让echo命令具有了 root 权限,但是没有让> 或 >> 也具有 root 权限,所以 bash 会认为这个命令没有向file.txt写入信息的权限。使用sh -c 命令,它可以让bash将一个字符串作为完整的命令来执行,这样就可以将sudo的影响范围扩展到整条命令。如下:
sudo sh -c 'echo "hello uu" >> file.txt'
6、使用 sudo apt-get install 命令安装软件的目录在哪?
下面也是网上找的说法,挺模棱两可的,估计看了《鸟哥Linux私房菜》再回头给自己解答
bin文件路径: /usr/bin
库文件路径: /usr/lib/
其它的图标啊什么的路径: /usr/share
配置文件路径: /etc/
6.1、apt
Ubuntu 下安装、卸载软件要用 apt (advanced package tool )。
6.2、关于 rpm 和 deb
RPM ( Red Hat Package Manager ),是基于Red hat 的 Linux Distribution 的包管理系统,同时也指 rpm 包本身,RPM用于 rpm 包的管理(诸如安装、卸载、升级等)。对于基于Debian 的系统使用deb格式的包,其安装和升级可用dpkg,不过它不能很好地处理包的依赖关系,比较省事的有dselect和apt-get,Ubuntu是Debian的变种,其软件以deb包或者源文件的形式出现。
6.3、Linux 发行版可以大体分为两类
商业公司维护的发行版本:以RedHat为代表,RedHat系
社区组织维护的发行版本:以Debian为代表,Debian系
7、常用命令(已经背下)
pwd 查看当前路径,print working directory,查看当前工作目录的绝对路径。
cd 切换目录,change directory
参数:
/ 进入根目录
. 当前目录
.. 上一级目录
~ 用户家目录 (不加参数时效果与~相同)
mkdir test_dir 创建一个名为test_dir的文件夹
参数:
-p ~/catkin_ws/src //p parents,make parent directories as needed,根据需要创建父目录
touch test_file //创建一个名为test_file的文件
mv file_name destination_dir //将文件file_name 移动到文件夹destination_dir (相当于剪切+粘贴)
dir_old dir_new //将文件夹dir_old重命名为dir_new
cp file_name destination_dir[/new_file_name] //相当于复制+粘贴,重命名可选
rm file_name //删除文件file_name
参数:
-r dir_name[/] //删除文件夹dir_name,并递归地删除文件夹中的内容, dir_name后的斜杠有、无均可
source file_name //在当前bash环境下读取并执行file_name中的命令 (该命令可由 . 来代替)
. file_name //功能同上
echo string_aa //将字符串 string_aa 送往标准输出,默认为显示器,并在最后加上换行符号
cat /etc/issue //查看 Ubuntu 版本,Dji manifold2 使用的是 Ubuntu 16.04 LTS
./file_name //运行文件file_name ,前提是file_name确为可执行文件,(编译后生成的二进制文件,即可执行文件)
g++ file_name.cpp -o file_aa //编译 file_name.cpp 为可执行文件file_aa
uname -r //查看Linux内核版本
8、bash是什么
bash是shell的一种,所谓shell(壳)是一个接口,这个接口提供给用户操纵系统的能力。
CLI :Command Line Interface 命令行接口
GUI:Graphical User Interface 图形化用户接口
一般我们是用GUI或者CLI去控制计算机,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安
全、复杂性、繁琐等原因,用户不能直接接触内核,内核与用户之间需要一个中间程序,用于接收用户的操作(点击图标、输入命令),
并进行简单的处理, 然后再传递给内核。shell就是内核和用户之间的“中间代理”。
广义的shell包括图形界面和命令行界面,狭义的shell专指命令行界面接口,这里的bash就是一种狭义的shell。shell可以调用其他程序,
也可以执行一些本身支持的命令。
shell是一个命令语言解释器(command-language interpreter),拥有自己内建的shell命令集,键入的命令都被shell所解释。一些命令,
如打印当前工作目录命令 pwd ,是包含在Linux bash 内部的(就像DOS的内部命令)。一些命令,如cp、rm是存在于文件系统中某个目
录下的单独程序。
shell首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序是指Linux本身的实用程序,如ls、rm。然后
shell试着在“搜索路径”($PATH)里寻找这些应用程序。$PATH是一个以冒号分隔的目录列表,你可以在列表指定的目录找到所要执行的命
令。可以用 `echo $PATH`打印搜索路径。如果你键入的命令不是一个内部命令,并且在PATH里没有找到这个可执行文件,终端将会显示一
条错误信息。而如果命令成功被找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。
bash(Bourne again shell)正如它的名字所暗示的,是sh(Bourne shell)的扩展/超集。sh由Steve Bourne开发,是Bourne Shell 的缩
写,sh是Unix标准默认的shell。bash是Bourne again shell 的缩写,是Linux标准默认的shell。
9、dpkg
sudo dpkg -i package_name.deb //安装本地软件包,不解决依赖关系
dpkg -r package //删除软件包
sudo apt-get install package //在线安装软件包,能自动解决软件之间的依赖关系
sudo apt-get remove package //删除软件包
dpkg用于安装.deb文件,但不会解决模块之间的依赖关系,且不会关心Ubuntu软件仓库中的软件。可用于安装本地的.deb文件,比如在Ubuntu安装VSCode、搜狗输入法、百度网盘,就是以这种方式安装的。
查看是否已安装某个包,除了在使用的时候被提醒未安装外,还可以通过如下命令来查看是否安装了某个包:
sudo dpkg -l | grep g++ //查看是否安装了g++
//打印输出如下
ii g++ 4:9.3.0-1ubuntu2 amd64 GNU C++ compiler
ii g++-9 9.4.0-1ubuntu1~20.04.1 amd64 GNU C++ compiler
10、&& 同时执行两条命令
mkdir dir_aa && cd dir_aa //创建一个文件夹dir_aa并进入dir_aa
11、解除文件的 root 权限
sudo chown -R 账户名 文件名 //change owner
12、管道
前面命令所输出的信息,通过管道交由后续的命令继续使用
ls /etc | grep nano* //列出/etc目录下所有以nano开头的文件。竖线叫做管道
13、ROS相关命令
最全面的教程还是得看这个:http://wiki.ros.org/Tools | 8. Command Line Tools
1、 ROS相关环境变量
echo $ROS_PACKAGE_PATH //打印本机含有ROS功能包的,所有路径
echo $ROS_DISTRO //打印ROS发行版本的名称
2、 安装ROS相关功能包命令格式
sudo apt-get install ros-xxx-功能包名
xxx 替换为自己的 ROS 版本。这样安装的功能包会以‘功能包名’为文件夹名,被默认放在 /opt/ros/melodic/share路径下,此路径下已经存在了很多 ROS 默认安装好的功能包。
3、 rostopic
Tips:一个话题(topic_name)对应一个消息类型(message_type)。
消息类型 可以类比为类(class)
话题 可以类比为对象(object)
rostopic list //打印运行时的所有话题名
rostopic echo topic_name //打印运行时被发布话题topic_name中的内容
rostopic info topic_name //打印话题topic_name的详细描述,发布者、订阅者、消息类型
rostopic type topic_name //打印话题topic_name的消息类型
rostopic bw topic_name //打印话题topic_name的带宽
rostopic hz topic_name //打印话题topic_name的发布频率
rostopic pub topic_name 消息类型 数据 //手动发布数据
rostopic find 消息类型 //根据消息类型查找话题
4、 rosmsg
rosmsg list //列出系统当前所有消息数据类型(会列出很多,因为ROS已经预定义好了很多消息数据类型)
rosmsg show 消息类型 //显示消息数据结构
rosmsg info 消息类型 //同 rosmsg show
rosmsg psckage 包名 //显示某个功能包下的所有消息(感觉这个还有点用)
rosmsg packages //显示所有含有含有消息的功能包(感觉这个并没有什么用)
rostopic type 话题名 | rosmsg show //显示话题内消息的具体数据结构
5、 rossrv
用法和 rosmsg 相同
6、 rosservice
Tips:一个服务(service_name)对应一个服务类型(service_type)。服务类型是类,服务为类的实例。
rosservice list //查看当前提供的服务
rosservice call service_name //手动调用服务
rosservice type service_name //查看服务的类型
7、 rosnode
rosnode list
8、 为 python 文件添加可执行权限
①、进入保存 Python 文件的 script 文件夹路径下
②、命令行键入
chmod +x *.py
注:
*.py的意思是对本路径下的所有.py文件执行操作
9、 ROS 查看 tf 树
打开一个终端,键入如下命令即可查看当前 tf 树:
rosrun rqt_tf_tree rqt_tf_tree

10、 ROS 查看 节点通信拓扑
打开一个终端,键入如下命令即可查看当前的节点通信拓扑:
rqt_graph

更多推荐



所有评论(0)