BeagleBone Black教程之BeagleBone Black使用到的Linux基础
BeagleBone Black涉及到的Linux基础
在许多没有Linux相关经验的人看来,Linux看起来非常可怕。一些“好”发行版会给你配备华丽的桌面(例如OpenSUSE使用的KDE和Ubuntu使用的Unity),“差一些”的就配备一些朴素的桌面(例如Xfce),而“没人性”的就只有命令行界面了。实际上Linux并不可怕,可怕的是连尝试的勇气都没有。本章就带你了解一下Linux最基础的命令行和文件系统。在你亲自尝试了其中的每个命令之后,你就会了解到命令行的魔力,同时也为之后的学习打下基础。
BeagleBone Black的命令行
在第2章中,我们的主要任务就是连接BeagleBone,并且得到命令提示符。在命令提示符下,你可以输入命令来执行启动程序、管理文件、更新系统以及编译程序等等的操作。默认情况下,BeagleBone的命令提示符类似这样:
- root@beaglebone:~#
这看似是一串没规律的字符串,但其中大有文章,下面就来一一解释其中的各个部分:
- q root:这部分用来表示当前的登录用户,这里是root。root用户是一个特殊的用户,它存在于每一个Linux系统中。它也被称作超级用户(superuser)或者系统管理员。当然,越大的能力对应越大的责任——你可以操作操作系统中的任何部分,当然包括修改系统配置以及删除整个系统。这也就印证了计算机界的一句话:再强大的系统也扛不住猪一样的管理员。
- q beaglebone:这部分用来表示主机名(hostname)。这是网络中其他计算机可以使用这个名字访问到BeagleBone。当然,这个名字并不是固定的,在本章之后的部分将会介绍如何修改它。
- q ~:这部分用来指示当前工作目录。它是你当在所在文件系统的路径。如果你不指定路径地使用创建文件的命令,那么文件就会创建在这个目录下。波浪号(~)在文件系统中并不存在,它是登录用户home路径的简写方式。例如,如果使用root用户登录,那么它代表路径/root;如果使用debian用户登录,则代表/home/debian。
- q #:这部分是输入提示符。同时也表示登录的用户是超级用户。如果你使用普通用户登录,它将变为$,如图3.1所示是使用普通用户debian登录时的提示符。
图3.1 普通用户登录
BeagleBone Black文件系统
与其他操作系统类似的,Linux文件系统用来组织文件或文件夹。文件系统的根目录(最高层目录)使用“/”来表示。在根文件系统中,有一些主要的目录被包含在绝大多数Linux系统中,如图3.2所示是BeagleBone上的Debian系统根目录下的子目录。
图3.2 Debian的文件系统
其中几个主要目录的介绍在表3.1中。
表3.1 根文件系统中的主要目录
在介绍了基本的目录结构之后,我们就可以开始探索BeagleBone中Linux的文件系统了。你需要学习的第一个命令是pwd,它用来输出当前工作目录以指示你当前在文件系统中的位置:
- debian@beaglebone:~$ pwd
- /home/debian
上面的输出表明了你当前在所在的目录名为debian。这个目录在home目录下,而home目录在根(/)目录下。
BeagleBone Black改变路径
改变路径使用的命令是cd,例如将当前目录改为根目录:
- debian@beaglebone:~$ pwd #输出当前工作目录
- /home/debian
- debian@beaglebone:~$ cd / #进入根目录
- debian@beaglebone:/$ pwd #再次输出当前工作目录
- /
在执行cd命令之后再执行pwd可以看到当面目录已经变为了根目录(/),同时你应该注意到命令提示符$前面的“~”变成了“/”。当然想要回到用户目录,可以使用“~”也可以使用用户目录的绝对路径“/home/debian”:
- debian@beaglebone:/$ cd ~ #进入用户目录
- debian@beaglebone:~$ pwd #输出当前工作目录
- /home/debian
- debian@beaglebone:~$ cd /home/debian/ #进入/home/debian目录
- debian@beaglebone:~$ pwd #再次输出当前工作目录
- /home/debian
符号“~”是用户目录的简写,cd命令使用它可以方便地回到用户目录。但cd命令还提供了一种回到用户目录的最简单方式——不指定参数:
- debian@beaglebone:~$ cd / #进入根目录
- debian@beaglebone:/$ pwd #输出当前工作目录
- /
- debian@beaglebone:/$ cd #进入用户主目录
- debian@beaglebone:~$ pwd #再次输出当前工作目录
- /home/debian
要切换到当前目录的父目录也非常容易,使用“..”作为cd的参数即可:
- debian@beaglebone:~$ pwd #输出当前工作目录
- /home/debian
- debian@beaglebone:~$ cd .. #进入当前目录的父目录
- debian@beaglebone:/home$ pwd #再次输出当前工作目录
- /home
- debian@beaglebone:/home$ cd .. #进入当前目录的父目录
- debian@beaglebone:/$ pwd #再次输出当前工作目录
- /
从上面的一系列命令可以看出,我们使用两次“cd ..”从用户目录返回到了根目录(/)。当然,“..”同样可以像使用普通目录那样使用:
- debian@beaglebone:~$ pwd #输出当前工作目录
- /home/debian
- debian@beaglebone:~$ cd ../../tmp #进入当前工作目录父目录的父目录下的tmp
- debian@beaglebone:/tmp$ pwd #再次输出当前工作目录
- /tmp
“cd ../../tmp”的含义就是向上走两个目录,然后进入同一目录下的tmp目录。
BeagleBone Black中列出目录下的内容
列出目录下的内容使用ls命令。现在将当前目录导航到根目录,然后使用ls即可查看根目录下的所有子目录:
- debian@beaglebone:/tmp$ cd / #进入根目录
- debian@beaglebone:/$ ls #列出目录下的内容
- bin dev home lost+found mnt proc run selinux sys usr
- boot etc lib media opt root sbin srv tmp var
这些目录中的绝大部分都在表3.1中有说明。如果你还想了解这些目录的更多信息,那么可以为ls传递-l参数:
- debian@beaglebone:/$ ls -l
- total 76
- drwxr-xr-x 2 root root 4096 May 15 10:34 bin
- drwxr-xr-x 3 root root 4096 May 15 10:27 boot
- drwxr-xr-x 14 root root 3640 May 15 10:19 dev
- drwxr-xr-x 106 root root 4096 Nov 10 15:53 etc
- drwxr-xr-x 3 root root 4096 May 15 10:52 home
- drwxr-xr-x 15 root root 4096 May 13 21:30 lib
- drwx------ 2 root root 16384 May 15 10:19 lost+found
- drwxr-xr-x 2 root root 4096 Oct 30 13:31 media
- drwxr-xr-x 2 root root 4096 Apr 20 2014 mnt
- drwxr-xr-x 5 root root 4096 May 15 10:27 opt
- dr-xr-xr-x 111 root root 0 Jan 1 1970 proc
- drwx------ 4 root root 4096 Oct 30 17:27 root
- drwxr-xr-x 23 root root 740 May 15 10:19 run
- drwxr-xr-x 2 root root 4096 May 15 10:39 sbin
- drwxr-xr-x 2 root root 4096 Jun 10 2012 selinux
- drwxr-xr-x 2 root root 4096 May 15 10:13 srv
- dr-xr-xr-x 12 root root 0 Jan 1 2000 sys
- drwxrwxrwt 8 root root 4096 Nov 10 15:17 tmp
- drwxr-xr-x 10 root root 4096 Feb 21 2014 usr
- drwxr-xr-x 12 root root 4096 May 15 10:32 var
这个列表给出了更全面的信息,包括权限、所有者、大小、修改时间等。
BeagleBone Black创建文件和目录
为了避免破坏文件系统,在继续学习之前我们应该回到我们的用户目录:
- debian@beaglebone:/$ cd
- debian@beaglebone:~$ pwd
- /home/debian
如果你是以root用户登录的,那么可以使用su命令切换到其他用户。BeagleBone使用的Debian系统默认已经创建了一个名为debian的用户,可以使用如下的命令切换:
- su debian
在切换用户之后首先查看当前目录下的内容:
- debian@beaglebone:~$ ls
- bin Desktop
可以看到,在debian用户的目录下已经有两个文件了。
创建目录可以使用mkdir命令。下面的命令在当前目录下创建名为myDir的目录:
- debian@beaglebone:~$ mkdir myDir
- debian@beaglebone:~$ ls
- bin Desktop myDir
再次使用ls后,可以看到新目录已经被创建。如果你想创建一个新文件,并且向其中写入一些简单的内容,使用如下的命令可以方便地完成:
- debian@beaglebone:~$ echo 'Hello, world!' > hello.txt
上面的语句使用大于符号(>)将“Hello, world!”重定向到了hello.txt文件。由于hello.txt之前并不存在,所以这条命令会创建这个文件,使用ls命令可以看到这个新文件:
- debian@beaglebone:~$ ls
- bin Desktop hello.txt myDir
需要特别注意的是,如果hello.txt文件已经存在,那么前面的命令会清空文件中的内容。cat命令可以将文件中的内容输出:
- debian@beaglebone:~$ cat hello.txt
- Hello, world!
如果你只是想在原来文件内容的基础上追加一些内容,那么需要使用“>>”符号重定向。下面的命令将“Yes!”追加到hello.txt文件中:
- debian@beaglebone:~$ echo 'Yes!' >> hello.txt
使用cat命令再次查看hello.txt文件:
- debian@beaglebone:~$ cat hello.txt
- Hello, world!
- Yes!
可以看到,“Yes!”已经被正确地添加进去。如果你只是想创建一个空文件而不进行任何操作,那么可以使用如下的命令:
- debian@beaglebone:~$ > empty.txt
是的,直接使用重定向符“>”即可,上面的命令在当前目录下建立了名为empty.txt的空文件。使用ls命令即可看到新建的文件:
- debian@beaglebone:~$ ls
- bin Desktop empty.txt hello.txt myDir
当然,重定向符号不仅仅可以重定向echo,还可以重定向cat的输出,如下的命令就将hello.txt中的内容输入到empty.txt文件中去:
- debian@beaglebone:~$ cat hello.txt > empty.txt
使用cat查看hello.txt和empty.txt的内容:
- debian@beaglebone:~$ cat hello.txt
- Hello, world!
- Yes!
- debian@beaglebone:~$ cat empty.txt
- Hello, world!
- Yes!
可以看到,这两个文件中的内容是完全一致的。前面介绍的这些命令可以创建文件并简单地写入一些内容。如果你想要查看并编辑内容的话,还是使用一个编辑器比较好。在Linux系统中,通常都带有nano编辑器。下面的命令使用nano打开empty.txt文件:
- debian@beaglebone:~$ nano empty.txt
nano是字符界面下的文本编辑器,如图3.3是打开empty.txt文件后的效果。
图3.3 nano编辑器
当然,这个编辑器是不支持鼠标操作的,一切操作都使用键盘完成,一些常用的操作都在屏幕下边做了提示,其中符号“^”表示键盘上的Ctrl键。移动光标可以使用方向键;保存文件使用Ctrl+O;退出nano则使用Ctrl+X。当然,nano可以完成的功能远不像看起来那么简陋,它还可以执行搜索、剪贴板操作以及拼写检查。使用Ctrl+G组合键可以查看更多关于nano的信息。
BeagleBone Black复制、移动(剪切)和重命名文件
在命令行下复制文件使用的命令是cp,在3.2.3节中我们创建了myDir文件夹。下面的命令将hello.txt复制一份到myDir中:
- debian@beaglebone:~$ cp hello.txt myDir
使用ls命令查看myDir目录下的内容:
- debian@beaglebone:~$ ls myDir
- hello.txt
使用cat命令查看hello.txt中的内容:
- debian@beaglebone:~$ cat myDir/hello.txt
- Hello, world!
- Yes!
可以看到hello.txt中的内容与myDir目录外的hello.txt中的内容是一致的。
移动文件的命令与复制命令类似,只不过直接移动文件而不进行复制,使用的命令是mv。在使用这个命令前我们列出当前用户目录下的文件:
- debian@beaglebone:~$ ls
- bin Desktop empty.txt hello.txt myDir
下面的命令将empty.txt文件移到myDir文件夹中:
- debian@beaglebone:~$ mv empty.txt myDir
执行完成后再次查看当前目录下的文件:
- debian@beaglebone:~$ ls
- bin Desktop hello.txt myDir
可以看到,empty.txt文件已不复存在。查看myDir目录下的文件:
- debian@beaglebone:~$ ls myDir
- empty.txt hello.txt
可以看到,empty.txt出现在了myDir目录下。
mv命令的一个技巧用法就是重命名文件。在操作之前先确认当前目录下的文件:
- debian@beaglebone:~$ ls
- bin Desktop hello.txt myDir
下面的操作将hello.txt重命名为yes.old:
- debian@beaglebone:~$ mv hello.txt yes.old
再次查看当前目录下的文件:
- debian@beaglebone:~$ ls
- bin Desktop myDir yes.old
可以看到,hello.txt已经被重命名为yes.old。
BeagleBone Black删除文件和目录
rm命令用来删除文件。例如删除yes.old可以使用如下的命令:
- debian@beaglebone:~$ rm yes.old
如果你想删除一个目录以及其中的所有文件,那么可以使用-r选项。下面的命令删除myDir及其下面的所有文件:
- debian@beaglebone:~$ rm -r myDir
需要注意的是,删除后的文件无法恢复,请三思而后行。
BeagleBone Black系统设置
就想其他计算机一样,你可能设置一些选项来符合你的口味,如设置壁纸、设置语言、设置时区等。下面就介绍一些你可能想要设置的项目,其中包括日期和时间、软件安装和更新、修改主机名以及设置密码。
BeagleBone Black日期和时间
现在的绝大多数计算机中都有一个实时时钟,它通过一个后备电池来在电脑关机的时候保持正确的时间。但是不幸的是在BeagleBone中并没有配备这样的设备。也就是说在你刚启动BeagleBone后,它并不知道当前的时间。查看系统中的时间可以使用date命令:
- debian@beaglebone:~$ date
- Mon Nov 10 17:29:34 CST 2014
当然,在系统启动之后就可以正确地计时了,你只需要手动为他设置一个正确的时间即可。但是,每次系统启动都这样做是任何人受不了的。幸运的是,如果将BeagleBone接入互联网,它就可以通过NTP来设置时间。当然,你可能发现你的BeagleBone已经联网了,但是时间还是不正确的。这是因为你还需要进行一些设置。
1.设置时区
你需要做的第一件事情就是设置时区(Timezone)。板子上已经预置了时区的数据库,你需要做的就是将对应的时区链接到/etc/localtime。首先,你应该备份原来的配置,将localtime重命名为localtime.old:
- root@beaglebone:~# mv /etc/localtime /etc/localtime.old
如果你使用的是普通用户,则需要在命名前加上sudo:
- debian@beaglebone:~$ sudo mv /etc/localtime /etc/localtime.old
现在我们就可以查看数据库中允许的时区了:
- debian@beaglebone:~$ ls /usr/share/zoneinfo/
- Africa Chile Factory Iceland MET posix UCT
- America CST6CDT GB Indian Mexico posixrules Universal
- Antarctica Cuba GB-Eire Iran MST PRC US
- Arctic EET GMT iso3166.tab MST7MDT PST8PDT UTC
- Asia Egypt GMT0 Israel Navajo right WET
- Atlantic Eire GMT-0 Jamaica NZ ROC W-SU
- Australia EST GMT+0 Japan NZ-CHAT ROK zone.tab
- Brazil EST5EDT Greenwich Kwajalein Pacific Singapore Zulu
- Canada Etc Hongkong Libya Poland SystemV
- CET Europe HST localtime Portugal Turkey
需要注意的是,一些时区可能包含在以洲命名的文件夹中,例如上海,就包含在Asia中:
- debian@beaglebone:~$ ls /usr/share/zoneinfo/Asia/
- Aden Choibalsan Irkutsk Kuwait Qyzylorda Tokyo
- Almaty Chongqing Istanbul Macao Rangoon Ujung_Pandang
- Amman Chungking Jakarta Macau Riyadh Ulaanbaatar
- Anadyr Colombo Jayapura Magadan Saigon Ulan_Bator
- Aqtau Dacca Jerusalem Makassar Sakhalin Urumqi
- Aqtobe Damascus Kabul Manila Samarkand Ust-Nera
- Ashgabat Dhaka Kamchatka Muscat Seoul Vientiane
- Ashkhabad Dili Karachi Nicosia Shanghai Vladivostok
- Baghdad Dubai Kashgar Novokuznetsk Singapore Yakutsk
- Bahrain Dushanbe Kathmandu Novosibirsk Taipei Yekaterinburg
- Baku Gaza Katmandu Omsk Tashkent Yerevan
- Bangkok Harbin Khandyga Oral Tbilisi
- Beirut Hebron Kolkata Phnom_Penh Tehran
- Bishkek Ho_Chi_Minh Krasnoyarsk Pontianak Tel_Aviv
- Brunei Hong_Kong Kuala_Lumpur Pyongyang Thimbu
- Calcutta Hovd Kuching Qatar Thimphu
接下来需要做的就是建立localtime到期望时区的符号链接,这里以Shanghai为例:
- root@beaglebone:~# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
如果你使用的是普通用户登录,则需要在命令前加上sudo:
- debian@beaglebone:~$ sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
符号链接就类似Windows操作系统下的快捷方式。
2.同步时间
在设置完时区以后,就可以手动触发一次时间同步了。在Debian下使用的命令是ntpdate-debian:
- root@beaglebone:/home/debian# ntpdate-debian
- 10 Nov 17:55:25 ntpdate[3536]: adjust time server 202.112.31.197 offset -0.448913 sec
再次执行date即可查看同步后的时间:
- debian@beaglebone:~$ date
- Mon Nov 10 17:57:11 CST 2014
现在,只要BeagleBone上电,时间就会被追踪。BeagleBone同时也将NTP同步设置为每小时执行一次,这就会导致BeagleBone在上电的一段时间内时间不正确。你可以使用上面的命令来强制进行同步。
BeagleBone Black软件安装和更新
如果你的BeagleBone接入和互联网,那么安装或者更新软件和代码库是非常容易的。软件是以包的形式分发的,在Debian下,使用apt-get来进行软件包管理。
apt-get保存了一份最新软件版本的数据库,但是随着时间的推移,这个数据库就过期了。所以,在安装软件包之前,首先需要更新这个数据库。更新的命令非常简单,如下:
- root@beaglebone:~# apt-get update
此时,屏幕会滚动一些字符串以表示正在执行的步骤。如果你想将你安装的软件全部更新到最新版本,则可以执行upgrade命令:
- root@beaglebone:~# apt-get upgrade
这个命令依赖于你的网络状况以及需要更新的软件包的数量,整个处理过程可能会经历相当长的一段时间。
如果你想安装确定的软件或者代码库,你可以使用install参数以及相应软件包的名字,例如安装VIM可以使用如下的命令:
- root@beaglebone:~# apt-get install vim
如果你不想进行upgrade整个系统而只是想升级某个软件,那么可以为upgrade指定要升级的软件包的名字。如下是升级Python的命令:
- root@beaglebone:~# opkg upgrade python
BeagleBone Black修改主机名
默认情况下,BeagleBone使用beaglebone来标识自己,所以你可以在浏览器中使用http://beaglebone.local或者在SSH客户端中使用ssh root@beaglebone.local来访问它。在大多数情况下是不需要修改它的。但是如果在你的路由器中同时接入多个BeagleBone,你就不知道这个主机名对应的板子了。这就需要为他们分别指定一些个性化的名字。
主机名保存在/etc/hostname中,你可以使用cat查看其中的内容:
- root@beaglebone:~# cat /etc/hostname
- beaglebone
要修改主机名非常容易,只需要将你想要的主机名写入hostname即可,可以使用nano也可以使用echo,这里以使用echo演示:
- root@beaglebone:~# echo 'mybeaglebone' > /etc/hostname
上面的命令将板子的主机名改为“mybeaglebone”。需要注意的是主机名只可以包含字母、数字和下划线,不可以包含@、#、$等这些特殊符号。
为了Beaglebone可以认出自己的主机名,还需要修改hosts文件:
- root@beaglebone:~# nano /etc/hosts
hosts文件的内容如图3.4所示。
图3.4 hosts文件
我们需要将其中的“beaglebone”改为对应的主机名,之后保存修改并退出nano。修改完之后,你需要重启Beaglebone。在登录系统之后,就可以看到修改后的主机名了。
BeagleBone Black设置密码
在默认情况下,Debian的root用户是没有设置密码的,如果你只通过USB的方式连接或者在自己的私有网络中使用Beaglebone,那么有没有密码都无所谓。但是如果你将Beaglebone接入公共的互联网,最好还是为它设置一个唯一的密码。
在Linux中,设置和修改密码均使用passwd:
- root@beaglebone:~# passwd
- Enter new UNIX password: #输入的密码不回显
- Retype new UNIX password: #输入的密码不回显
- passwd: password updated successfully
root用户想要设置其他用户的密码可以为passwd命令指定参数,例如下面的命令为debian用户设置密码:
- root@beaglebone:~# passwd debian
- Enter new UNIX password:
- Retype new UNIX password:
- passwd: password updated successfully
BeagleBone Black关机
虽然直接切断Beaglebone的电压也可以关机,但是可能会造成数据丢失或者损坏文件系统。正确关闭Beaglebone的方法是执行shutdown命令:
- root@beaglebone:~# shutdown -h now
上面的命令会使板子立即执行关机命令,当然关机过程需要持续一定的时间。当用户LED不再闪烁并且电源指示灯熄灭的时候,你就可以安全地拔下电源了。当再次将电源接入,板子会再次启动。如果你只是想让板子重启,则只需要执行reboot命令即可:
- root@beaglebone:~#reboot
本文选自:BeagleBone Black快速入门教程大学霸内部资料,转载请注明出处,尊重技术尊重IT人!