<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jiaju_Xie</title>
    <description>The latest articles on DEV Community by Jiaju_Xie (@jubro).</description>
    <link>https://dev.to/jubro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3824020%2F04cf2ebf-6a25-4c08-b890-4ac7edf4550c.png</url>
      <title>DEV Community: Jiaju_Xie</title>
      <link>https://dev.to/jubro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jubro"/>
    <language>en</language>
    <item>
      <title>One small experience to check the node of ros2</title>
      <dc:creator>Jiaju_Xie</dc:creator>
      <pubDate>Sat, 14 Mar 2026 16:29:05 +0000</pubDate>
      <link>https://dev.to/jubro/one-small-experience-to-check-the-node-of-ros2-4mob</link>
      <guid>https://dev.to/jubro/one-small-experience-to-check-the-node-of-ros2-4mob</guid>
      <description>&lt;p&gt;talk and subscribe &lt;/p&gt;

&lt;p&gt;base 24.02 ubuntu &lt;br&gt;
jazzy ros2 &lt;/p&gt;

&lt;p&gt;check the version of ros2&lt;br&gt;
&lt;code&gt;echo $ROS_DISTRO&lt;br&gt;
which ros2&lt;/code&gt;   &lt;/p&gt;

&lt;p&gt;1 &lt;code&gt;Ctrl + Alt + T&lt;/code&gt; open the first terminal &lt;br&gt;
2  source /opt/ros/jazzy/setup.bash&lt;br&gt;
3  mkdir -p ~/ros2_ws/src&lt;br&gt;
   cd ~/ros2_ws/src&lt;br&gt;
 // create package in src workplace ,not in the root &lt;br&gt;
4 creat python package &lt;br&gt;
&lt;code&gt;ros2 pkg create --build-type ament_python my_py_pubsub --dependencies rclpy std_msgs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;5 dive into the package dic &lt;br&gt;
&lt;code&gt;cd ~/ros2_ws/src/my_py_pubsub&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;6&lt;br&gt;
creat talker and listenser code file &lt;br&gt;
&lt;code&gt;cd ~/ros2_ws/src/my_py_pubsub/my_py_pubsub&lt;br&gt;
touch talker.py listener.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;7&lt;br&gt;
talker.py&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;rclpy&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rclpy.node&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;std_msgs.msg&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TalkerNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;talker_node&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;publisher_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_publisher&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chatter&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timer_callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;timer_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Hello World: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;publisher_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_logger&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Publishing: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;rclpy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TalkerNode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;rclpy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;spin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;destroy_node&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;rclpy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shutdown&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8&lt;br&gt;
talker.py&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;rclpy&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rclpy.node&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;std_msgs.msg&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ListenerNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;listener_node&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_subscription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;chatter&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listener_callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="mi"&gt;10&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;listener_callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_logger&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;I heard: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;rclpy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ListenerNode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;rclpy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;spin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;destroy_node&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;rclpy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shutdown&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9  in the first terminal &lt;br&gt;
&lt;code&gt;cd ~/ros2_ws&lt;br&gt;
colcon build --packages-select my_py_pubsub&lt;br&gt;
source ~/ros2_ws/install/setup.bash&lt;br&gt;
ros2 run my_py_pubsub listener&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;10   in the second terminal &lt;br&gt;
&lt;code&gt;source /opt/ros/jazzy/setup.bash&lt;br&gt;
source ~/ros2_ws/install/setup.bash&lt;br&gt;
ros2 run my_py_pubsub talker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuczbrn6nd6abhm5v7rwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuczbrn6nd6abhm5v7rwi.png" alt=" " width="800" height="778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;explain：&lt;br&gt;
这个实验本质上做了什么？&lt;/p&gt;

&lt;p&gt;先说结论。&lt;/p&gt;

&lt;p&gt;我们刚刚做的事情，本质上是：&lt;/p&gt;

&lt;p&gt;建了一个 ROS 2 工作空间&lt;/p&gt;

&lt;p&gt;在这个工作空间里创建了一个 Python 类型的 ROS 2 包&lt;/p&gt;

&lt;p&gt;在这个包里写了两个节点：&lt;/p&gt;

&lt;p&gt;talker.py&lt;/p&gt;

&lt;p&gt;listener.py&lt;/p&gt;

&lt;p&gt;再通过 colcon build 让 ROS 2 识别这个包&lt;/p&gt;

&lt;p&gt;最后通过 ros2 run 运行节点&lt;/p&gt;

&lt;p&gt;所以，这不是“随便写了两个 Python 文件”，而是：&lt;/p&gt;

&lt;p&gt;我们创建了一个最小的 ROS 2 Python 示例包，用来验证发布/订阅通信机制。&lt;/p&gt;

&lt;p&gt;ROS 2 的思路是：&lt;/p&gt;

&lt;p&gt;写 node → 放进 package → 放进 workspace → build → 用 ros2 run 运行&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqgdbsol6rsr7d2r2t37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqgdbsol6rsr7d2r2t37.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;workplace : ros2_ws/ *&lt;/em&gt;&lt;br&gt;&lt;br&gt;
以后你可以在这个 workspace 里放很多个 ROS 2 包，比如：&lt;/p&gt;

&lt;p&gt;my_py_pubsub&lt;/p&gt;

&lt;p&gt;my_robot_control&lt;/p&gt;

&lt;p&gt;my_camera_pkg&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;src/ 是源码目录。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;自己写的包，通常都放在这里。&lt;br&gt;
所以常见的习惯就是：&lt;/p&gt;

&lt;p&gt;mkdir -p ~/ros2_ws/src&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;src/ 下面的外层 my_py_pubsub/&lt;/strong&gt;，&lt;br&gt;
就是你的 ROS 2 包目录。&lt;/p&gt;

&lt;p&gt;它的名字就是包名，所以以后你运行的时候会用到这个名字：&lt;/p&gt;

&lt;p&gt;ros2 run my_py_pubsub talker&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;package.xml：这个包的身份证&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;package.xml 可以理解成 ROS 2 包的“身份证”或者“说明书”。&lt;/p&gt;

&lt;p&gt;它通常会记录这些信息：&lt;/p&gt;

&lt;p&gt;包名&lt;/p&gt;

&lt;p&gt;版本&lt;/p&gt;

&lt;p&gt;描述&lt;/p&gt;

&lt;p&gt;作者 / 维护者&lt;/p&gt;

&lt;p&gt;依赖项&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;setup.py：告诉系统“这个包怎么装、怎么跑”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;setup.py 是 Python 包的安装配置文件。&lt;/p&gt;

&lt;p&gt;它的作用包括：&lt;/p&gt;

&lt;p&gt;声明 Python 模块&lt;/p&gt;

&lt;p&gt;指定包名&lt;/p&gt;

&lt;p&gt;配置可执行入口&lt;/p&gt;

&lt;p&gt;告诉系统哪些脚本能被当成命令运行&lt;/p&gt;

&lt;p&gt;其中最关键的一段，通常长这样：&lt;/p&gt;

&lt;p&gt;entry_points={&lt;br&gt;
    'console_scripts': [&lt;br&gt;
        'talker = my_py_pubsub.talker:main',&lt;br&gt;
        'listener = my_py_pubsub.listener:main',&lt;br&gt;
    ],&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;这段配置非常重要。&lt;/p&gt;

&lt;p&gt;它的意思是：&lt;/p&gt;

&lt;p&gt;当你执行：&lt;/p&gt;

&lt;p&gt;ros2 run my_py_pubsub talker&lt;/p&gt;

&lt;p&gt;ROS 2 实际上会去调用：&lt;/p&gt;

&lt;p&gt;my_py_pubsub/talker.py&lt;/p&gt;

&lt;p&gt;里面的：&lt;/p&gt;

&lt;p&gt;main()&lt;/p&gt;

&lt;p&gt;函数。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. talker.py 和 listener.py 分别干嘛？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这两个就是你真正写的 ROS 2 节点代码。&lt;/p&gt;

&lt;p&gt;talker.py&lt;/p&gt;

&lt;p&gt;它是发布者节点，主要做三件事：&lt;/p&gt;

&lt;p&gt;创建一个 publisher&lt;/p&gt;

&lt;p&gt;定时生成消息&lt;/p&gt;

&lt;p&gt;把消息发到 topic chatter&lt;/p&gt;

&lt;p&gt;所以它负责“说话”。&lt;/p&gt;

&lt;p&gt;listener.py&lt;/p&gt;

&lt;p&gt;它是订阅者节点，主要做两件事：&lt;/p&gt;

&lt;p&gt;创建一个 subscriber&lt;/p&gt;

&lt;p&gt;收到 chatter 上的消息后打印出来&lt;/p&gt;

&lt;p&gt;所以它负责“听话”。&lt;/p&gt;

&lt;p&gt;这两个文件合起来，就是 ROS 2 最小的通信实验。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. build/、install/、log/ 是什么？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这三个目录通常不是你手动创建的，&lt;br&gt;
而是执行下面这个命令后自动生成的：&lt;/p&gt;

&lt;p&gt;colcon build&lt;/p&gt;

&lt;p&gt;它们分别代表不同阶段的构建结果。&lt;/p&gt;

&lt;p&gt;build/&lt;/p&gt;

&lt;p&gt;这里是编译过程中的中间文件。&lt;br&gt;
可以理解成构建缓存和临时产物。&lt;/p&gt;

&lt;p&gt;install/&lt;/p&gt;

&lt;p&gt;这里是构建完成后的“安装结果”。&lt;/p&gt;

&lt;p&gt;这个目录非常重要，因为构建完成后你通常要执行：&lt;/p&gt;

&lt;p&gt;source ~/ros2_ws/install/setup.bash&lt;/p&gt;

&lt;p&gt;这样系统才知道你自己写的包在哪里，才能用 ros2 run 找到它。&lt;/p&gt;

&lt;p&gt;log/&lt;/p&gt;

&lt;p&gt;这里是构建日志。&lt;br&gt;
如果编译失败，很多时候可以来这里查问题。&lt;/p&gt;

&lt;p&gt;所以这三个目录里，初学阶段你最需要理解的是：&lt;/p&gt;

&lt;p&gt;install/ 很重要，因为它决定你的包能不能被 ROS 2 正确加载&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Linux Common Commands</title>
      <dc:creator>Jiaju_Xie</dc:creator>
      <pubDate>Sat, 14 Mar 2026 13:53:11 +0000</pubDate>
      <link>https://dev.to/jubro/linux-common-commands-2ol2</link>
      <guid>https://dev.to/jubro/linux-common-commands-2ol2</guid>
      <description>&lt;p&gt;Linux Common Commands — English Explanation&lt;/p&gt;

&lt;p&gt;参考文档：菜鸟教程 &lt;a href="https://www.runoob.com/w3cnote/linux-common-command-2.html" rel="noopener noreferrer"&gt;https://www.runoob.com/w3cnote/linux-common-command-2.html&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ls&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: list files and directories.&lt;/p&gt;

&lt;p&gt;You use ls to see what is inside a folder. It can also show hidden files, file permissions, file size, and modification time.&lt;/p&gt;

&lt;p&gt;Common options:&lt;/p&gt;

&lt;p&gt;ls -a → show all files, including hidden ones&lt;/p&gt;

&lt;p&gt;ls -l → show detailed information&lt;/p&gt;

&lt;p&gt;ls -h → show file sizes in human-readable form&lt;/p&gt;

&lt;p&gt;ls -t → sort by modification time&lt;/p&gt;

&lt;p&gt;ls -S → sort by file size&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;ls -lhrt&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;p&gt;-l detailed list&lt;/p&gt;

&lt;p&gt;-h readable sizes&lt;/p&gt;

&lt;p&gt;-r reverse order&lt;/p&gt;

&lt;p&gt;-t sort by time&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;cd&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: change directory.&lt;/p&gt;

&lt;p&gt;Used to move from one folder to another.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;cd /&lt;/p&gt;

&lt;p&gt;Go to the root directory.&lt;/p&gt;

&lt;p&gt;cd ~&lt;/p&gt;

&lt;p&gt;Go to the home directory.&lt;/p&gt;

&lt;p&gt;cd -&lt;/p&gt;

&lt;p&gt;Go back to the previous directory.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;pwd&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: print working directory.&lt;/p&gt;

&lt;p&gt;It shows your current directory path.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;pwd&lt;br&gt;
pwd -P&lt;/p&gt;

&lt;p&gt;Shows the real path, not the symbolic link path.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;mkdir&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: make directory.&lt;/p&gt;

&lt;p&gt;Used to create new folders.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;mkdir t&lt;/p&gt;

&lt;p&gt;Create a folder named t.&lt;/p&gt;

&lt;p&gt;mkdir -p /tmp/test/t1/t&lt;/p&gt;

&lt;p&gt;Create nested directories at once.&lt;br&gt;
-p means create parent directories if needed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;rm&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: remove files or directories.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;rm -i *.log&lt;/p&gt;

&lt;p&gt;Delete .log files, but ask for confirmation first.&lt;/p&gt;

&lt;p&gt;rm -rf test&lt;/p&gt;

&lt;p&gt;Delete the test directory and everything inside it.&lt;/p&gt;

&lt;p&gt;-r recursive&lt;/p&gt;

&lt;p&gt;-f force&lt;/p&gt;

&lt;p&gt;This command is powerful and dangerous.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;rmdir&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: remove empty directories only.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;rmdir -p parent/child/child11&lt;/p&gt;

&lt;p&gt;Delete the last empty directory, and also remove parent directories if they become empty.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;mv&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: move or rename files.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;mv test.log test1.txt&lt;/p&gt;

&lt;p&gt;Rename test.log to test1.txt.&lt;/p&gt;

&lt;p&gt;mv log1.txt log2.txt log3.txt /test3&lt;/p&gt;

&lt;p&gt;Move multiple files into /test3.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;cp&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: copy files or directories.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;cp -ai a.txt test&lt;/p&gt;

&lt;p&gt;Copy a.txt to test, keep original time, and ask before overwriting.&lt;/p&gt;

&lt;p&gt;cp -s a.txt link_a.txt&lt;/p&gt;

&lt;p&gt;Create a symbolic link to a.txt.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;cat&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: display file content, create files, or combine files.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;cat filename&lt;/p&gt;

&lt;p&gt;Display the whole file.&lt;/p&gt;

&lt;p&gt;cat &amp;gt; filename&lt;/p&gt;

&lt;p&gt;Create a new file from keyboard input.&lt;/p&gt;

&lt;p&gt;cat file1 file2 &amp;gt; file&lt;/p&gt;

&lt;p&gt;Combine two files into one.&lt;/p&gt;

&lt;p&gt;Also:&lt;/p&gt;

&lt;p&gt;cat -n → show line numbers&lt;/p&gt;

&lt;p&gt;cat -b → show line numbers only for non-empty lines&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;more&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: view a file page by page.&lt;/p&gt;

&lt;p&gt;Useful when a file is too long for one screen.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;more +3 text.txt&lt;/p&gt;

&lt;p&gt;Start showing the file from line 3.&lt;/p&gt;

&lt;p&gt;You can press:&lt;/p&gt;

&lt;p&gt;Space → next page&lt;/p&gt;

&lt;p&gt;b → previous page&lt;/p&gt;

&lt;p&gt;q → quit&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;less&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: better file viewer than more.&lt;/p&gt;

&lt;p&gt;It lets you scroll forward and backward more freely.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;less 1.log 2.log&lt;/p&gt;

&lt;p&gt;Open multiple files.&lt;/p&gt;

&lt;p&gt;Useful keys:&lt;/p&gt;

&lt;p&gt;/text → search forward&lt;/p&gt;

&lt;p&gt;?text → search backward&lt;/p&gt;

&lt;p&gt;n → next match&lt;/p&gt;

&lt;p&gt;N → previous match&lt;/p&gt;

&lt;p&gt;Q → quit&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;head&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: show the beginning of a file.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;head -n 20 1.log&lt;/p&gt;

&lt;p&gt;Show the first 20 lines.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;tail&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: show the end of a file.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;tail -f ping.log&lt;/p&gt;

&lt;p&gt;Continuously monitor new content added to a log file.&lt;/p&gt;

&lt;p&gt;Very useful for watching logs in real time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;which&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: find the location of an executable command.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;which ls&lt;/p&gt;

&lt;p&gt;Shows where the ls command is located.&lt;/p&gt;

&lt;p&gt;It only searches commands in the PATH.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;whereis&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: find the binary file, source code, and manual page of a command.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;whereis locate&lt;/p&gt;

&lt;p&gt;Compared with which, whereis gives more related locations.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;locate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: quickly search for files by name using a database.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;locate pwd&lt;/p&gt;

&lt;p&gt;It is fast, but may miss very new files because it depends on a database that updates periodically.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;find&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: search files and directories in the file system.&lt;/p&gt;

&lt;p&gt;This is one of the most important Linux commands.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;find ./ -name '*.log'&lt;/p&gt;

&lt;p&gt;Find all .log files in the current directory.&lt;/p&gt;

&lt;p&gt;find /opt -perm 777&lt;/p&gt;

&lt;p&gt;Find files with permission 777.&lt;/p&gt;

&lt;p&gt;find . -type f -mtime +10 -exec rm -f {} \;&lt;/p&gt;

&lt;p&gt;Find files older than 10 days and delete them.&lt;/p&gt;

&lt;p&gt;find can search by:&lt;/p&gt;

&lt;p&gt;name&lt;/p&gt;

&lt;p&gt;type&lt;/p&gt;

&lt;p&gt;size&lt;/p&gt;

&lt;p&gt;time&lt;/p&gt;

&lt;p&gt;owner&lt;/p&gt;

&lt;p&gt;permissions&lt;/p&gt;

&lt;p&gt;It can also run commands on the results using -exec.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;chmod&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: change file permissions.&lt;/p&gt;

&lt;p&gt;Linux permissions include:&lt;/p&gt;

&lt;p&gt;r = read&lt;/p&gt;

&lt;p&gt;w = write&lt;/p&gt;

&lt;p&gt;x = execute&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;chmod a+x t.log&lt;/p&gt;

&lt;p&gt;Give execute permission to everyone.&lt;/p&gt;

&lt;p&gt;chmod 751 t.log&lt;/p&gt;

&lt;p&gt;Set permissions numerically:&lt;/p&gt;

&lt;p&gt;owner = 7 = rwx&lt;/p&gt;

&lt;p&gt;group = 5 = r-x&lt;/p&gt;

&lt;p&gt;others = 1 = --x&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;tar&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: archive files, and often compress them.&lt;/p&gt;

&lt;p&gt;Important idea:&lt;/p&gt;

&lt;p&gt;archive = pack many files into one&lt;/p&gt;

&lt;p&gt;compress = reduce file size&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;tar -zcvf /tmp/etc.tar.gz /etc&lt;/p&gt;

&lt;p&gt;Create a compressed archive of /etc.&lt;/p&gt;

&lt;p&gt;tar -ztvf /tmp/etc.tar.gz&lt;/p&gt;

&lt;p&gt;List contents of a compressed archive.&lt;/p&gt;

&lt;p&gt;Common options:&lt;/p&gt;

&lt;p&gt;-c create&lt;/p&gt;

&lt;p&gt;-x extract&lt;/p&gt;

&lt;p&gt;-t list contents&lt;/p&gt;

&lt;p&gt;-f specify filename&lt;/p&gt;

&lt;p&gt;-z gzip&lt;/p&gt;

&lt;p&gt;-j bzip2&lt;/p&gt;

&lt;p&gt;-v verbose&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;chown&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: change file owner and group.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;chown -c mail:mail log2012.log&lt;/p&gt;

&lt;p&gt;Change the owner and group to mail.&lt;/p&gt;

&lt;p&gt;chown -cR mail: test/&lt;/p&gt;

&lt;p&gt;Recursively change ownership for a directory.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;df&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: display disk space usage.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;df -haT&lt;/p&gt;

&lt;p&gt;Show all file systems, in readable format, with file system type.&lt;/p&gt;

&lt;p&gt;Use this to check how much disk space is left.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;du&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: show disk usage of files and directories.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;du -ah scf/&lt;/p&gt;

&lt;p&gt;Show the size of all files and subdirectories.&lt;/p&gt;

&lt;p&gt;du -hc test/ scf/&lt;/p&gt;

&lt;p&gt;Show sizes plus a total.&lt;/p&gt;

&lt;p&gt;Difference:&lt;/p&gt;

&lt;p&gt;df = disk free space of the whole filesystem&lt;/p&gt;

&lt;p&gt;du = size used by specific files/folders&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ln&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: create links.&lt;/p&gt;

&lt;p&gt;Two types:&lt;/p&gt;

&lt;p&gt;soft link (ln -s) = like a shortcut&lt;/p&gt;

&lt;p&gt;hard link = another name for the same file data&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;ln -sv source.log link.log&lt;/p&gt;

&lt;p&gt;Create a symbolic link.&lt;/p&gt;

&lt;p&gt;ln -v source.log link1.log&lt;/p&gt;

&lt;p&gt;Create a hard link.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;date&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: display or set the system date and time.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;date&lt;/p&gt;

&lt;p&gt;Show current date and time.&lt;/p&gt;

&lt;p&gt;date -d tomorrow +%Y%m%d&lt;/p&gt;

&lt;p&gt;Show tomorrow’s date in YYYYMMDD format.&lt;/p&gt;

&lt;p&gt;Useful for scripts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;cal&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: display a calendar.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;cal 9 2012&lt;/p&gt;

&lt;p&gt;Show the calendar for September 2012.&lt;/p&gt;

&lt;p&gt;cal -y 2013&lt;/p&gt;

&lt;p&gt;Show the full calendar for 2013.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;grep&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: search text by pattern.&lt;/p&gt;

&lt;p&gt;This is one of the most useful commands in Linux.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;ps -ef | grep svn&lt;/p&gt;

&lt;p&gt;Search for processes containing svn.&lt;/p&gt;

&lt;p&gt;grep -lR '^grep' /tmp&lt;/p&gt;

&lt;p&gt;Recursively find files in /tmp whose content starts with grep.&lt;/p&gt;

&lt;p&gt;Useful options:&lt;/p&gt;

&lt;p&gt;-i ignore case&lt;/p&gt;

&lt;p&gt;-n show line numbers&lt;/p&gt;

&lt;p&gt;-c count matches&lt;/p&gt;

&lt;p&gt;-R recursive search&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;wc&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: count lines, words, and bytes.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;wc text.txt&lt;/p&gt;

&lt;p&gt;Shows:&lt;/p&gt;

&lt;p&gt;number of lines&lt;/p&gt;

&lt;p&gt;number of words&lt;/p&gt;

&lt;p&gt;number of bytes&lt;/p&gt;

&lt;p&gt;filename&lt;/p&gt;

&lt;p&gt;cat test.txt | wc -l&lt;/p&gt;

&lt;p&gt;Count lines in output.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ps&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: show current running processes.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;ps -ef&lt;/p&gt;

&lt;p&gt;Show all processes in full format.&lt;/p&gt;

&lt;p&gt;ps -aux | grep apache&lt;/p&gt;

&lt;p&gt;Find the Apache process.&lt;/p&gt;

&lt;p&gt;This command helps you inspect what programs are running.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;top&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: dynamic process monitor.&lt;/p&gt;

&lt;p&gt;It shows:&lt;/p&gt;

&lt;p&gt;CPU usage&lt;/p&gt;

&lt;p&gt;memory usage&lt;/p&gt;

&lt;p&gt;running processes&lt;/p&gt;

&lt;p&gt;system load&lt;/p&gt;

&lt;p&gt;It updates in real time.&lt;/p&gt;

&lt;p&gt;Useful interactive keys:&lt;/p&gt;

&lt;p&gt;P sort by CPU&lt;/p&gt;

&lt;p&gt;m sort by memory&lt;/p&gt;

&lt;p&gt;c show full command line&lt;/p&gt;

&lt;p&gt;h help&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;kill&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: send a signal to a process.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;kill -9 PID&lt;/p&gt;

&lt;p&gt;Forcefully stop a process.&lt;/p&gt;

&lt;p&gt;-9 means SIGKILL, which cannot be ignored.&lt;/p&gt;

&lt;p&gt;Safer default:&lt;/p&gt;

&lt;p&gt;kill PID&lt;/p&gt;

&lt;p&gt;This sends SIGTERM first.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;free&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meaning: show memory usage.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;free -m&lt;/p&gt;

&lt;p&gt;Show memory usage in MB.&lt;/p&gt;

&lt;p&gt;free -s 10&lt;/p&gt;

&lt;p&gt;Refresh every 10 seconds.&lt;/p&gt;

&lt;p&gt;Useful for checking RAM and swap usage.&lt;/p&gt;

&lt;p&gt;Main idea of the whole article&lt;/p&gt;

&lt;p&gt;This article is trying to teach basic Linux command-line operations.&lt;br&gt;
It covers 4 major areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;File and directory operations&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;ls&lt;/p&gt;

&lt;p&gt;cd&lt;/p&gt;

&lt;p&gt;pwd&lt;/p&gt;

&lt;p&gt;mkdir&lt;/p&gt;

&lt;p&gt;rm&lt;/p&gt;

&lt;p&gt;mv&lt;/p&gt;

&lt;p&gt;cp&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;File viewing and searching&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;cat&lt;/p&gt;

&lt;p&gt;more&lt;/p&gt;

&lt;p&gt;less&lt;/p&gt;

&lt;p&gt;head&lt;/p&gt;

&lt;p&gt;tail&lt;/p&gt;

&lt;p&gt;grep&lt;/p&gt;

&lt;p&gt;find&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;System monitoring&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;ps&lt;/p&gt;

&lt;p&gt;top&lt;/p&gt;

&lt;p&gt;free&lt;/p&gt;

&lt;p&gt;df&lt;/p&gt;

&lt;p&gt;du&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Permissions and archive management&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;chmod&lt;/p&gt;

&lt;p&gt;chown&lt;/p&gt;

&lt;p&gt;tar&lt;/p&gt;

&lt;p&gt;ln&lt;/p&gt;

&lt;p&gt;A more natural English summary&lt;/p&gt;

&lt;p&gt;You could describe this page like this:&lt;/p&gt;

&lt;p&gt;This article introduces commonly used Linux commands for beginners. It explains how to navigate directories, manage files, search for content, check system resources, change file permissions, and handle processes. These commands are essential for daily Linux usage and system administration.&lt;/p&gt;

&lt;p&gt;中文意思：&lt;/p&gt;

&lt;p&gt;这篇文章向初学者介绍了常用的 Linux 命令，内容包括目录切换、文件管理、内容搜索、系统资源查看、权限修改以及进程管理。这些命令是日常使用 Linux 和进行系统管理的基础。&lt;/p&gt;

&lt;p&gt;If you want to study this efficiently&lt;/p&gt;

&lt;p&gt;I’d group them like this:&lt;/p&gt;

&lt;p&gt;Must learn first&lt;/p&gt;

&lt;p&gt;ls&lt;/p&gt;

&lt;p&gt;cd&lt;/p&gt;

&lt;p&gt;pwd&lt;/p&gt;

&lt;p&gt;mkdir&lt;/p&gt;

&lt;p&gt;rm&lt;/p&gt;

&lt;p&gt;cp&lt;/p&gt;

&lt;p&gt;mv&lt;/p&gt;

&lt;p&gt;cat&lt;/p&gt;

&lt;p&gt;Very practical next&lt;/p&gt;

&lt;p&gt;grep&lt;/p&gt;

&lt;p&gt;find&lt;/p&gt;

&lt;p&gt;head&lt;/p&gt;

&lt;p&gt;tail&lt;/p&gt;

&lt;p&gt;less&lt;/p&gt;

&lt;p&gt;For system monitoring&lt;/p&gt;

&lt;p&gt;ps&lt;/p&gt;

&lt;p&gt;top&lt;/p&gt;

&lt;p&gt;df&lt;/p&gt;

&lt;p&gt;du&lt;/p&gt;

&lt;p&gt;free&lt;/p&gt;

&lt;p&gt;For admin tasks&lt;/p&gt;

&lt;p&gt;chmod&lt;/p&gt;

&lt;p&gt;chown&lt;/p&gt;

&lt;p&gt;kill&lt;/p&gt;

&lt;p&gt;tar&lt;/p&gt;

</description>
      <category>liux</category>
      <category>basic</category>
      <category>commend</category>
    </item>
  </channel>
</rss>
