跳到主要内容

Linux 基础

1. 介绍

大部分用户都已经习惯了 Windows 图形界面化的操作,Core3566日常的基础应用也都可以通过它的图形界面完成,但还是有很多操作无法通过界面完成的,例如系统配置。但是几乎所有的程序都能通过命令行来调用运行,因此,Linux 常用命令的熟练使用在入门学习中占有很高的地位,为更加方便使用Core3566,本章将介绍在Core3566开发时一些常用的 Linux 命令。

2. 终端简介

  1. 在Core3566桌面的左下角打开系统自带的终端System Tools->LXTerminal,使用 SSH 软件连接 默认打开终端。Core3566默认的提示符如下:

    linaro@linaro-alip:~$ 
    • linaro表示当前用户名 / 登录名
    • linaro-alip 表示主机名
    • ~表示当前用户所在的目录是 /home/linaro
    • $字符表示当前登录的是普通用户
    • #字符表示登录的是 root 用户
  2. Core3566默认登录普通 lianro 用户,想要切换 root 用户,在终端输入:

    sudo su root  #普通用户啊切换root用户
    su linaro #root用户切换普通用户

3. 磁盘管理

3.1 Linux目录结构

在 Windows 中每一个分区都是一个树形结构,有多少个分区就有多少个树形结构,而 Linux 中只有一个树形结构,所有的文件、分区都是存在于一个树形结构中。在这个结构中 , 最上层的是根目录,其他所有的目录、文件、分区都是在根目录下建立的。常用目录:

  • /bin:放置与 Core3566系统 有关 ( 包括运行图形界面所需的 ) 的二进制可执行文件。
  • /boot:引导目录,放置 Linux 内核以及其它用来启动 Core3566 的软件包。
  • /dev:设备目录,在 Linux 系统中,所有设备都视为文件,在这个目录中存放了所有设备,例如第一个 SATA 硬盘或 U 盘会被识别为 sda 文件。
  • /etc:系统管理和配置文件。
  • /home:用户目录,除了 root 用户外,其他所有的使用者的数据都存放在这个目录下。
  • /lib:基本系统的动态链接库文件存放位置。
  • /media:放置可移动存储驱动器,例如 U 盘、光驱等等。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。

3.2 显示文件目录

  1. ls 命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录 )。

    ls -a  # 显示所有文件及目录 (. 开头的隐藏文件也会列出 )
    ls -l # 将文件型态、权限、拥有者、文件大小等资讯详细列出
    ls -lh # 文件大小以容易理解的格式列出,例如 4K
  2. 执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。

    linaro@linaro-alip:~$ pwd
    /home/linaro
    linaro@linaro-alip:~$

3.3 切换目录

  1. cd 切换当前工作目录。

    cd              # 返回用户目录
    cd .. # 返回上一层目录
    cd /home/linaro # 进入 /home/pi 目录
    cd ../.. # 进入当前目录的上两层目录
    cd ~ # 进入用户家目录

3.4 查看磁盘空间

  1. df 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。

    df -h

4. 文件管理

4.1 创建文件和目录

  1. touch 命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

    touch file.txt
  2. mkdir 命令用于创建目录。在工作目录下,建立一个名为 luckfox 的子目录:

    mkdir luckfox
  3. 在工作目录下建立一个名为 luckfox/test 的目录:

    mkdir -p luckfox/test
    • 若 luckfox 目录原本不存在,则建立一个。(注:本例若不加 -p 参数,且原本 luckfox 目录不存在,则产生错误。)

4.2 复制和移动

  1. 命令主要用于复制文件或目录。使用指令 cp 将当前目录 test/ 下的所有文件复制到新目录 newtest 下,输入如下命令:

    sudo cp –r test/ newtest
  2. mv 命令用来为文件或目录改名、或将文件或目录移入其它位置。使用指令 mv 将当前目录 test/ 下的 file1 文件复制到新目录 /home/linaro下,输入如下命令:

    sudo mv file1 /home/lianro

4.3 删除

  1. rm 命令用于删除一个文件或者目录,删除文件可以直接使用 rm 命令:

    sudo rm test.txt
  2. 若删除目录则必须配合选项 "-r":

    sudo rm -r homework

4.4 权限设置

  1. chmod 命令是控制用户对文件的权限的命令。

  2. Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

  3. 在下面终端中,显示了 Linux 根目录下的详细文件信息。在这些文件信息中 , 最重要的就是第一列,它详细描述了文件和目录的权限 , 而第三与第四列则显示了这个文件和目录属于哪一个用户或组。

    linaro@linaro-alip:~$ ls -lh /
    total 4.3M
    drwxr-xr-x 2 root root 4.0K Jun 13 09:53 bin
    drwxr-xr-x 3 root root 4.0K Jun 14 20:27 boot
    lrwxrwxrwx 1 root root 8 Jun 13 09:56 data -> userdata
    drwxr-xr-x 13 root root 4.4K Jun 17 15:48 dev
    drwxrwxr-x 111 root root 4.0K Jun 17 16:08 etc
    drwxr-xr-x 3 root root 4.0K May 9 10:29 home
    drwxr-xr-x 15 root root 4.0K May 9 10:27 lib
    drwx------ 2 root root 16K Jun 13 09:56 lost+found
    -rw-r--r-- 1 root root 4.2M May 9 10:29 md5sum.txt
    drwxr-xr-x 2 root root 4.0K May 9 10:13 media
    drwxr-xr-x 4 root root 4.0K Jun 13 09:56 mnt
    drwxr-xr-x 3 root root 1.0K Jun 17 15:48 oem
    drwxr-xr-x 2 root root 4.0K May 9 10:13 opt
    dr-xr-xr-x 249 root root 0 Jan 1 1970 proc
    drwxr-xr-x 17 root root 4.0K May 9 10:32 rockchip-test
    drwx------ 5 root root 4.0K Jun 17 15:48 root
    drwxr-xr-x 23 root root 780 Jun 17 16:08 run
    drwxr-xr-x 2 root root 4.0K Jun 13 09:49 sbin
    lrwxrwxrwx 1 root root 10 Jun 13 09:56 sdcard -> mnt/sdcard
    drwxr-xr-x 2 root root 4.0K May 9 10:13 srv
    dr-xr-xr-x 14 root root 0 Jun 17 15:48 sys
    drwxr-xr-x 4 root root 4.0K May 9 10:37 system
    drwxrwxrwt 14 root root 440 Jun 17 16:08 tmp
    lrwxrwxrwx 1 root root 9 Jun 13 09:56 udisk -> mnt/udisk
    drwxr-xr-x 4 root root 4.0K Jun 17 15:48 userdata
    drwxr-xr-x 10 linaro linaro 4.0K Jun 17 15:48 usr
    drwxr-xr-x 11 root root 4.0K Feb 14 2019 var
    drwxr-xr-x 3 root root 4.0K May 9 10:32 vendor
    linaro@linaro-alip:~$
  4. Linux 的文件属性可以分为三种:只读(r)、写(w)和可执行(x)。但是上面的文件属性却分为 10 小格,这是因为除了第一格显示目录外,另外三组每组三格分别表示文件所有者权限、同一组内的权限以及其他用户权限。第一栏中如果显示 d,则表示这是一个目录;如果是链接文件,则在这里显示 l;如果是设备文件,则显示 c。

    • 第一个 rwx 栏位:- rwx --- --- 表示文件拥有者所拥有的权限。
    • 第二个 rwx 栏位:- --- rwx --- 表示同一工作组内用户权限。
    • 第三个 rwx 栏位:- --- --- rwx 表示其他用户权限。
    • rwx rwx rwx 表示无论哪个用户都可以对这个文件读写与执行。
    • rw- --- --- 表示只有文件拥有者有读写权限,但是没有执行权限。
    • rw- rw- rw- 表示所有用户都有读写权。
  5. 符号模式

    • who(用户类型)

      who用户类型说明
      uuser文件所有者
      ggroup文件所有者所在组
      oothers所有其他用户
      aall所用用户, 相当于 ugo
    • operator(符号模式表)

      Operator说明
      +为指定的用户类型增加权限
      -去除指定用户类型的权限
      =设置指定用户权限的设置,即将用户类型的所有权限重新设置
    • permission (符号模式表)

      模式名字说明
      r设置为可读权限
      w设置为可写权限
      x执行权限设置为可执行权限
      X特殊执行权限只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
      ssetuid/gid当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
      t粘贴位设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位
    • 实例

      sudo chmod a+r file             #给 file 的所有用户增加读权限
      sudo chmod a-x file #删除 file 的所有用户的执行权限
      sudo chmod a+rw file #给 file 的所有用户增加读写权限
      sudo chmod +rwx file #给 file 的所有用户增加读写执行权限
      sudo chmod u=rw,go= file #对 file 的所有者设置读写权限,清空该用户组和其他用户对 file 的所有权限(空格代表无权限)
      sudo chmod -R u+r,go-r LUCKFOX #对目录 LUCKFOX 和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限
  6. 数值模式

    • 八进制语法

      #权限rwx二进制
      7读 + 写 + 执行rwx111
      6读 + 写rw-110
      5读 + 执行r-x101
      4只读r--100
      3写 + 执行-wx011
      2只写-w-010
      1只执行--x001
      0---000
    • 例如:765 的解释如下:

      • 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx, 也就是 4 + 2 + 1 , 应该是 7。
      • 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw-, 也就是 4 + 2 + 0 ,应该是 6。
      • 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x , 也就是 4 + 0 + 1, 应该是 5。
    • 常用数字权限

      • 400 - r-- --- --- 拥有者能够读,其他任何人不能进行任何操作;
      • 644 - rw- r-- r-- 拥有者都能够读,但只有拥有者可以编辑;
      • 660 - rw- rw- --- 拥有者和组用户都可读和写,其他人不能进行任何操作;
      • 664 - rw- rw- r-- 所有人都可读,但只有拥有者和组用户可编辑;
      • 700 - rwx --- --- 拥有者能够读、写和执行,其他用户不能任何操作;
      • 744 - rwx r-- r-- 所有人都能读,但只有拥有者才能编辑和执行;
      • 755 - rwx r-x r-x 所有人都能读和执行,但只有拥有者才能编辑;
      • 777 - rwx rwx rwx 所有人都能读、写和执行(该设置不建议使用)。
    • 实例

      sudo chmod 664 file  #给 file 的所有用户增加读权限 , 拥有者和组用户可编辑权限

4.5 解压和压缩

  1. zip 命令用于压缩文件,zip 是个使用广泛的压缩程序,压缩后的文件后缀名为 .zip。

    #将 /home/linaro/luckfox 这个目录下所有文件和文件夹打包为当前目录下的 luckfox.zip
    sudo zip -q -r luckfox.zip /home/pi/luckfox
    #进入目录打包
    sudo zip -q -r luckfox.zip *
    • 其中 -r 递归处理,将指定目录下的所有文件和子目录一并处理,-q 不显示指令执行过程。
  2. unzip 命令用于解压缩 zip 文件,unzip 为 .zip 压缩文件的解压缩程序。

    sudo unzip luckfox.zip -d user/
    • 其中 -d 为指定文件解压缩后所要存储的目录。
  3. tar 命令是用来建立,还原备份文件的工具程序,它可以解压缩备份文件内的文件。

    #压缩文件
    sudo tar -cvzf luckfox.tar.gz *
    #解压文件
    sudo tar -xvzf luckfox.tar.gz

4.5 查找

  1. find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

    • 通过文件名查找,例如我们查找 luckfox.py 文件:

      sudo find -name luckfox.py 
    • 通过文件嵌套层数查找。

      #文件查找最大层数为 1,找出的文件全部在 /etc 目录下,例如查找 /etc 目录下的 .conf 文件
      sudo find /etc/ -maxdepth 1 -name *.conf

      #文件查找最小层数为 2,找出的文件不会包含 /etc 目录下文件,而是去 /etc 子目录查找
      sudo find /etc/ -mindepth 2 -name *.conf
    • 将当前目录及其子目录下所有最近 20 天内更新过的文件列出:

      sudo find . -ctime -20
    • 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

      sudo find . -type f -perm 644 -exec ls -l {} \;
    • 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:

      sudo find / -type f -size 0 -exec ls -l {} \;
  2. 使用 cat 列出文件的内容,可用于列出多个文件的内容:

    • 在终端上显示 test.txt 文件的内容:

      cat test.txt
    • 列出 .txt 当前目录下所有文件的内容:

      cat *.txt 
  3. grep 命令作为 Linux 文本处理三剑客的一员,另外两个是 sed 和 awk。grep 在文件内部搜索某些搜索模式 , 可以列出包含特殊字母所有组合。

    • 搜索目录下包含 sys 字符串的文件:

      ls | grep sys
    • 搜索 config.txt 文件,使用正则表达式找出以 arm 开头的数据行:

      grep ^arm config.txt
    • 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行:

      grep test *file
  4. awk 是一个功能强大的文本数据处理工具,关于 awk 用法很多,这里只介绍常用基础用法。

    • 每行按空格或 TAB 分割,输出文本中的 1、4 项:

      awk '{print $1,$4}' luckfox.txt
    • 输出第一列大于 2 的行:

      awk '$1>2' luckfox.txt
    • 输出第一列等于 2 的行:

      awk '$1==2' luckfox.txt
    • 输出第一列大于 2 并且第三列等于 'SQL' 的行:

      awk '$1>2 && $3=="SQL"' luckfox.txt
    • 输出包含关键词 "Python" 的行:

      awk '/Python/ ' luckfox.txt

5. 软件管理

目前比较流行的 Linux 发行版本都提供了一个集中的软件包管理机制,以帮助用户搜索、安装和管理软件。而软件通常以「包」的形式存储在仓库「repository」中,对软件包的使用和管理被称为包管理。本节将介绍在使用 Ubuntu、Debian 系统时,搜索、安装和升级等包管理方面的基本方式和快速参考,可以帮助你快速了解不同 Linux 包管理基本操作与技巧。

5.1 软件安装

  1. 大多数软件包管理系统是建立在包文件上的集合,包文件通常有编译好的二进制文件和其他资源组成,例如:软件、安装脚本、元数据及其所需的依赖列表。Debian 系统包的格式为 .deb文件,要直接安装生成 .deb 包时需要使用 dpkg 命令,具体如下:

    sudo dpkg -i filename.deb
  2. 使用的是本地数据库存储远程可用的包仓库列表,所以在安装或升级包之前最好更新这个数据库,命令如下:

    sudo apt-get update
  3. 更新完成后,就可以使用软件名称安装,命令如下:

    sudo apt-get install XXX -y     #-y 直接跳过提示安装

5.2 软件升级

  1. 如果没有包管理系统,要升级并保持 Linux 已安装的软件处在最新版本是一项巨大的工程,管理员和用户不得不手动跟踪上游软件版本变化及安全警告。包管理系统只需几条命令便可保持软件最新,具体如下:

    sudo apt-get upgrade            # 更新已安装的软件包
    sudo apt-get dist-upgrade # 将系统升级最新版本(谨慎使用)
  2. upgrade 和 dist-upgrade 都用于升级系统上已安装的软件包。但是,apt-get upgrade 命令无法安装新软件包或从系统中删除已安装的软件包,dist-upgrade 可以安装新包或在需要时删除现有包。

5.3 软件卸载

  1. 由于包管理知道哪些文件是由哪个包提供的,所以在卸载了不需要的软件包之后,可以获得一个干净的系统。可以通过以下命令卸载一个已经安装的软件包:

    #删除软件包命令
    sudo apt remove <package_name>
    #清理不再使用的依赖和库文件
    sudo apt autoremove
    #移除软件包及配置文件
    sudo apt purge <package_name>

6. 系统管理

  1. Core3566的关机是不建议直接拔掉电源线的,如果使用TF卡启动直接拔掉电源线会使一些在内存中的数据没有来得及写入 TF 卡中,从而造成数据的丢失或是损坏 TF 卡上的数据 , 造成系统无法启动:

    sudo shutdown -h now         # 立即关机
    sudo shutdown -r now # 重新启动计算机
    sudo shutdown -h 10 # 指定 10 分钟后关机
    sudo reboot # 重启(经常使用)
  2. 无论使用哪一个命令来关闭系统都需要 root 用户权限,如果用户使用 linaro 这样的普通用户,可以使用 sudo 命令暂时获得 root 权限。

7. 联网

  1. ifconfig 命令用来查看和配置网络设备。当网络环境发生改变时可通过此命令对网络进行相应的配置。注意:用 ifconfig 命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了:

    sudo ifconfig eth0          # 查看有线网络 IP 地址
    sudo ifconfig wlan0 # 查看无线网络 IP 地址