标签:
在许多没有Linux相关经验的人看来,Linux看起来非常可怕。一些“好”发行版会给你配备华丽的桌面(例如OpenSUSE使用的KDE和Ubuntu使用的Unity),“差一些”的就配备一些朴素的桌面(例如Xfce),而“没人性”的就只有命令行界面了。实际上Linux并不可怕,可怕的是连尝试的勇气都没有。本章就带你了解一下Linux最基础的命令行和文件系统。在你亲自尝试了其中的每个命令之后,你就会了解到命令行的魔力,同时也为之后的学习打下基础。
在第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 普通用户登录
与其他操作系统类似的,Linux文件系统用来组织文件或文件夹。文件系统的根目录(最高层目录)使用“/”来表示。在根文件系统中,有一些主要的目录被包含在绝大多数Linux系统中,如图3.2所示是BeagleBone上的Debian系统根目录下的子目录。
图3.2 Debian的文件系统
其中几个主要目录的介绍在表3.1中。
表3.1 根文件系统中的主要目录
在介绍了基本的目录结构之后,我们就可以开始探索BeagleBone中Linux的文件系统了。你需要学习的第一个命令是pwd,它用来输出当前工作目录以指示你当前在文件系统中的位置:
debian@beaglebone:~$ pwd
/home/debian
上面的输出表明了你当前在所在的目录名为debian。这个目录在home目录下,而home目录在根(/)目录下。
改变路径使用的命令是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目录。
列出目录下的内容使用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
这个列表给出了更全面的信息,包括权限、所有者、大小、修改时间等。
为了避免破坏文件系统,在继续学习之前我们应该回到我们的用户目录:
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的信息。
在命令行下复制文件使用的命令是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。
rm命令用来删除文件。例如删除yes.old可以使用如下的命令:
debian@beaglebone:~$ rm yes.old
如果你想删除一个目录以及其中的所有文件,那么可以使用-r选项。下面的命令删除myDir及其下面的所有文件:
debian@beaglebone:~$ rm -r myDir
需要注意的是,删除后的文件无法恢复,请三思而后行。
就想其他计算机一样,你可能设置一些选项来符合你的口味,如设置壁纸、设置语言、设置时区等。下面就介绍一些你可能想要设置的项目,其中包括日期和时间、软件安装和更新、修改主机名以及设置密码。
现在的绝大多数计算机中都有一个实时时钟,它通过一个后备电池来在电脑关机的时候保持正确的时间。但是不幸的是在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接入和互联网,那么安装或者更新软件和代码库是非常容易的。软件是以包的形式分发的,在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使用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。在登录系统之后,就可以看到修改后的主机名了。
在默认情况下,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的电压也可以关机,但是可能会造成数据丢失或者损坏文件系统。正确关闭Beaglebone的方法是执行shutdown命令:
root@beaglebone:~# shutdown -h now
上面的命令会使板子立即执行关机命令,当然关机过程需要持续一定的时间。当用户LED不再闪烁并且电源指示灯熄灭的时候,你就可以安全地拔下电源了。当再次将电源接入,板子会再次启动。如果你只是想让板子重启,则只需要执行reboot命令即可:
root@beaglebone:~#reboot
本文选自:BeagleBone Black快速入门教程大学霸内部资料,转载请注明出处,尊重技术尊重IT人!
BeagleBone Black教程之BeagleBone Black使用到的Linux基础
标签:
原文地址:http://my.oschina.net/u/1585857/blog/475188