[X]关闭

[米联客-XILINX-H3_CZ08_7100] LINUX基础篇连载-06 Linux基础命令

文档创建者:LINUX课程
浏览次数:178
最后更新:2024-09-07
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-SOC » 2_LINUX应用开发
本帖最后由 LINUX课程 于 2024-9-9 12:08 编辑

软件版本:vitis2021.1(vivado2021.1)
操作系统:WIN10 64bit
硬件平台:适用XILINX Z7/ZU系列FPGA
登录“米联客”FPGA社区-www.uisrc.com视频课程、答疑解惑!

1 系统目录结构
在终端输入 ls / 命令,可展示所有根目录下的文件。
image.jpg
Linux的大致文件目录如下图所示。
image.jpg
以下是对这些目录的解释:
/bin:bin是Binaries的缩写,里面是一些普通用户也可以使用的基础命令,比如ls、cp等。
/boot:这里存放的是Linux系统和内核启动所需要的文件。
/dev:dev是Device(设备)的缩写,在Linux中一切都是基于文件,外部设备在这里就被抽象成一个文件,对文件的操作就是对外部设备的操作。
/etc:etc是et cetera(法语等等的意思)的缩写,这里面有大量的配置文件,是用来配置各种各样设置用的,比如网口的ip地址需要修改/etc/network/interfaces这个文件。
/home:这是普通用户的用户主目录,用来存放用户的文件。在这个文件夹下的文件,默认文件的权限都会比较低,不需要root便可读写。
/lib:lib是Library(库)的缩写,这个目录是动态连接共享库,与Windows里的DLL文件类似。几乎所有的应用程序都需要用到这些共享库。
/lost+found:顾名思义,是用来存放丢失文件的,比如强制关机或者意外断电时保存的文件。
/media:用来挂载有关媒体相关的设备,比如光盘,VM共享文件夹等等。在这个文件夹下可以直接打开文件夹来查看里面的内容。
/mnt:mnt是mount的缩写,这个文件夹是用来挂载设备的,与上面media的区别是mnt可以默认挂载u盘。用途一样,只有用法上有一些小的区别。
/opt:opt是optional(可选)的缩写,这个文件夹一般是空的,主要用来存放第三方的软件,如果自己安装的软件可以选用此目录,不过按照习惯安装在/user/local下更常见。
/proc:proc是Processes(进程)的缩写,这个文件夹并不实际存在在硬盘上,而是存在于内存之中,是内存的一个映射,称作虚拟文件系统。其中放置着系统核心、进程信息等等,里面重要的文件比较多,不清楚的情况下不应随意更改。
/root:该目录为超级权限者的用户主目录,和上面的普通用户主目录的作用一致,不过超级用户主目录的文件夹权限要高于普通用户,可以阻止一些没有权限的操作。
/sbin:sbin是Superuser Binaries(超级用户的二进制文件)的缩写,作用于上面的bin文件夹是一样的,区别是这是给超级用户提供的,普通用户使用普通权限无法运行其中的程序。
/srv:srv是service的缩写,是提供一些网络服务存取数据使用的。
/sys:和proc一样,这个文件夹存在于内存之中,是一个特殊文件系统。这个文件夹是设备树思想的集中体现,所有在设备树内注册的设备都会按照一定的顺序组织在这个文件夹内,此外这里还存放着主次设备号文件、块设备、总线等诸多重要文件。
/tmp:tmp是temporary(临时)的缩写,用来存放一些临时文件,一般是供系统使用的 。
/usr:usr是unix shared resources(共享资源)的缩写,注意不是user。大部分的软件都安装在这里。
/usr/bin:普通用户使用的应用程序。
/usr/sbin:超级用户使用的应用程序以及系统守护程序。
/usr/src:内核源代码默认的放置目录,自己下载的源码也可放置在这里。
/var:var是variable(变量)的缩写,常常用来放置一些缓存、日志文件或者软件运行时产生的文件等等。
/run:是一个存放系统启动时所需文件的文件夹,里面的内容应该在关机时被删除,待下次开机时再重新生成。
在Linux系统中大多数目录比较重要,在不熟悉的情况下,不要删除或者随意更改内部文件。
2 Linux文件与目录权限
Linux 系统最大的一个特点就是用户众多,不同于Windows系统,Linux所应用的场景更倾向于多用户操作。因此对于权限的管理也十分的严格,可以说普通用户可以进行的操作是十分有限的,可以使用以下命令控制权限。
  • chown (change owner):修改所属用户与组。
  • chmod (change mode):修改用户的权限。
可以使用命令 ll 或 ls -l 来确认文件或文件夹的属性。
image.jpg
由上图可知, uisrc/ 文件夹属性的第一个字母为d,意思是目录文件。另外,Linux还有如下字符分别代表不同含义:
  • d:目录文件(directory)。
  • -:普通文件、纯文本文件(ASCII)、二进制文件(Binary)、数据格式的文件(Data)。
  • l:符号链接文档(link file)。
  • b:块设备文件(block),比如硬盘。
  • c:字符设备文件(character),比如键盘鼠标。
  • s:套接字文件(sockets),通常出现在网络数据连接阶段。
  • p:管道文件(pipe)。
接下来的九个字符,以三个为一组,且均为 rwx 三个参数的重复组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。如果没有权限,当前位置就会被减号 – 代替,而不会缺位少位。
文件类型
拥有者权限
组权限
其他用户权限
0
1
2
3
4
5
6
7
8
9
d
r  w  x
r  w  x
r  -  x
目录文件
执行
执行
执行
2.1 chgrp:更改文件属组
语法:
  1. chgrp [-R] 属组名 文件名
复制代码
参数选项
  • -R: 递归更改文件属组,就是在更改某个目录文件的属组时,如果带上-R的参数,那么该目录下的所有文件的属组都会更改,不带的话只会修改当前文件夹的属组。
2.2 chown:更改文件属主、文件属组
语法:
  1. chown [–R] 属主名 文件名  
  2. chown [-R] 属主名:属组名 文件名
复制代码
进入主目录将test的拥有者改为bin这个账号:
  1. [root@ubuntu ~]# cd ~  
  2. [root@ubuntu ~]# chown bin test  
  3. [root@ubuntu ~]# ls -l  
  4. -rw-r--r--  1 bin  users 124 Jan 13 13:31 test
复制代码
将test的拥有者与群组改回为root:
  1. [root@ubuntu ~]# chown root:root test  
  2. [root@ubuntu ~]# ls -l  
  3. -rw-r--r--  1 root root 124 Jan 13 14:01 test
复制代码
2.3 chmod:更改文件9个属性
Linux文件属性可以通过数字设置,也能通过符号设置。其基本权限有九个,分别是 owner/group/others(拥有者/组/其他)三种身份各有自己的 read/write/execute(读取/写入/执行)权限。
先复习一下刚刚上面4.2节提到的数据:文件的权限字符为: -rwxrwxrwx ,这九个权限是三个三个一组的,分别对应了拥有者、组、其他这三类自己各自的读取/写入/执行权限。其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
  • r:4
  • w:2
  • x:1
三种身份(owner/group/others)对应各自的三个权限(r/w/x)的权值需要计算和,例如当权限为:-rwxr-xrw- ,其权值分数则是:
  • owner = rwx = 4+2+1 = 7
  • group = r-x = 4+0+1 = 5
  • others = rw- = 4+2+0 = 6
所以在设定权限的变更时,该文件的权限数字就是 756。变更权限的指令 chmod 的语法是这样的:
  1. chmod [-R] xyz 文件或文件夹
复制代码
选项与参数:
  • xyz:就是刚刚提到的三个身份,rwx属性数值的和。
  • -R:进行递归的变更,子文件夹于子文件也会一并被修改。
举例来说,如果要将 test 这个文件所有的权限都设定启用,那么命令如下:
  1. [root@ubuntu ~]# ls -al test  
  2. -rw-r--r--  1 root root 269 Jan  13 14:14 test  
  3. [root@ubuntu ~]# chmod 777 test  
  4. [root@ubuntu ~]# ls -al test  
  5. -rwxrwxrwx  1 root root 269 Jan  13 14:15 test
复制代码
那如果要将权限变成 -rw-r-xr-- 呢?那么权限的分数就成为 [4+2+0][4+0+1][4+0+0]=654。
还有一个通过符号改变权限的方法,从之前的介绍中可以发现身份其实就三种:
  • user:用户
  • group:组
  • others:其他
那么其实完全可以使用 u, g, o 来代表三种身份的权限。
此外, 还有一个a 则代表 all,即u+g+o的身份。读写的权限可以写成 r, w, x,可以使用下表的方式来看:
身份
符号
权限
作用目标
a
+(加上)
-(除去)
=(设定)
r
w
x
文件与文件夹
u
G
o
如果我们需要将文件权限设置为 -r-xr-xr-- ,可以使用 chmod u=rx,g=rx,o=r 文件名 来设定:
  1. [root@ubuntu ~]# touch test1                                // 创建 test1 文件   
  2. [root@ubuntu ~]# ls -al test1                                // 查看 test1 默认权限   
  3. -rw-r--r-- 1 root root 0 Jan 13 14:42 test1   
  4. [root@ubuntu ~]# chmod u=rx,g=rx,o=r test1        // 修改 test1 权限   
  5. [root@ubuntu ~]# ls -al test1   
  6. -r-xr-xr-- 1 root root 0 Jan 13 14:43 test1
复制代码
而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
  1. [root@ubuntu ~]# chmod  a-x test1   
  2. [root@ubuntu ~]# ls -al test1   
  3. -r--r--r-- 1 root root 0 Jan 13 14:44 test1
复制代码
3 文件与目录管理
Linux的目录结构是一个树状结构,根目录 / 是所有目录的顶端。树上的节点是可以增减的,通过挂载可以添加节点,通过卸载也能删除节点。为了方便本小节的理解,接下来就要学习一下绝对路径与相对路径的概念:
  • 绝对路径:由根目录 / 写起,例如: /home/aaa/music 这个目录。
  • 相对路径:不是由根目录 / 写起,例如cd ../movie,它的意思是由 /usr/aaa/music 到 /usr/aaa/movie 底下。
接下来我们就来看几个常见的处理目录与查看文件的命令:
  • ls:(list files)列出所有文件与文件夹。
  • cd:(change directory)切换路径。
  • pwd:(print work directory)显示目前的目录路径。
  • mkdir:(make directory)创建一个新的文件夹。
  • rmdir:(remove directory)删除一个文件夹。
  • cp:(copy file)复制文件或文件夹。
  • rm:(remove)移除文件或文件夹。
  • mv:(move file)移动文件或文件夹,或修改文件或文件夹的名称。
  • cat:打印出整个文件。
  • tac:倒着打印整个文件,可以看出 tac 是 cat 反过来写。
  • nl:打印的时候带上行号
  • more:通过键盘控制输出内容
  • less:与more的区别是可以向前翻页
  • head:只看头部几行
  • tail:只看尾部几行
3.1 ls:列出文件与文件夹
这个指令绝对是使用最频繁的命令之一。
语法:
  1. [root@ubuntu ~]# ls [-aAdfFhilnrRSt] 目录名称
复制代码
选项与参数:
  • -a:列出所有文件,包括隐藏文件。
  • -d:仅列出目录本身,而不列出目录内的文件。
  • -l:以列表形式列出文件和文件夹的详细信息。
将主目录下的所有文件列出来(包括属性与隐藏文件,~代表的是当前用户主目录,普通用户一般在 /home/用户名/ 这个文件夹下):
  1. [root@ubuntu ~]# ls -al ~
复制代码
3.2 cd:切换路径
cd是Change Directory的缩写,这是用来变换工作路径的命令,同样也是非常常用的命令之一,切换工作路径必备。
语法:
  1. cd [相对路径或绝对路径]
复制代码
  1. #使用 mkdir 命令创建 test 目录  
  2. [root@ubuntu ~]# mkdir test  

  3. #使用绝对路径切换到 test 目录  
  4. [root@ubuntu ~]# cd /root/test/  
  5.   
  6. #使用相对路径切换到 test 目录  
  7. [root@ubuntu ~]# cd ./test/  
  8.   
  9. # 表示回到超级用户主目录,也就是 /root 这个目录  
  10. [root@ubuntu test]# cd ~  
  11.   
  12. # 表示回到目前目录的上一级目录,也就是 /root 的上一级目录  
  13. [root@ubuntu ~]# cd ..  
复制代码
3.3 pwd:显示目前所在的目录
pwd 是 Print Working Directory 的缩写,也就是打印当前目录的命令,在shell中比较常见。
语法:
  1. [root@ubuntu ~]# pwd [-P]  
复制代码
选项与参数:
  • -P:显示出确实的路径,而非使用链接(link)路径。
单纯显示出目前的工作目录:
  1. [root@ubuntu ~]# pwd  
  2. /root
复制代码
显示出实际的工作目录,而非链接的目录名:
  1. 1.[root@ubuntu ~]# cd /var/mail        #/var/mail是一个链接目录  
  2. 2.[root@ubuntu mail]# pwd  
  3. 3./var/mail                                                #列出目前的工作目录  
  4. 4.[root@ubuntu mail]# pwd -P  
  5. 5./var/test/mail                                #实际的目录  
  6. 6.[root@ubuntu mail]# ls -ld /var/mail  
  7. 7.lrwxrwxrwx 1 root root 10 Jan 17 13:10 /var/mail -> test/mail  
复制代码
看到第三步应该就能明白这是为什么了,/var/mail作为一个链接目录,链接到了/var/test/mail上,所以实际目录为后者。
3.4 mkdir:创建新目录
mkdir是make directory的缩写,如果需要创建新的目录需要用到这个命令。
语法:
  1. mkdir [-mp] 目录名称
复制代码
选项与参数:
  • -m:在创建目录的时候直接规定好文件夹权限。
  • -p:递归创建多层目录。
在/root文件夹下尝试创建多级目录:
  1. [root@ubuntu ~]# cd ~  
  2. [root@ubuntu ~]# mkdir test        #创建一名为test的新目录  
  3. [root@ubuntu ~]# mkdir test1/test2/test3/test4  
  4. mkdir: cannot create directory `test1/test2/test3/test4':   
  5. No such file or directory                #不能直接创建多级目录  
  6. [root@ubuntu ~]# mkdir -p test1/test2/test3/test4
复制代码
加了这个 -p 的选项,就能创建多级目录了。
创建权限为 rwx--x--x 的目录:
  1. [root@ubuntu ~]# mkdir -m 711 test2  
  2. [root@ubuntu ~]# ls -l  
  3. drwxr-xr-x  3 root  root 4096 Jan 17 13:42 test  
  4. drwxr-xr-x  3 root  root 4096 Jan 17 13:45 test1  
  5. drwx--x--x  2 root  root 4096 Jan 17 13:47 test2
复制代码
上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。如果要手动分配权限,如上图中的那个例子一样即可。
3.5 rmdir:删除空的目录
语法:
  1. rmdir [-p] 目录名称
复制代码
选项与参数:
  • -p:连同上一级的空目录也一起删除
删除test目录:
  1. [root@ubuntu ~]# rmdir test/
复制代码
将 mkdir 实例中创建的目录(/root目录下)删除:
  1. [root@ubuntu ~]# ls -l  
  2. drwxr-xr-x  3 root  root 4096 Jan 17 13:42 test  
  3. drwxr-xr-x  3 root  root 4096 Jan 17 13:45 test1  
  4. drwx--x--x  2 root  root 4096 Jan 17 13:47 test2  
  5. [root@ubuntu ~]# rmdir test        #可直接删除  
  6. [root@ubuntu ~]# rmdir test1        #因为不为空,所以无法删除  
  7. rmdir: `test1': Directory not empty  
  8. [root@ubuntu ~]# rmdir -p test1/test2/test3/test4  
  9. [root@ubuntu ~]# ls -l  
  10. drwx--x--x  2 root  root 4096 Jul 18 12:54 test2
复制代码
利用-p这个选项,就可以将test1/test2/test3/test4一次性删除。此外,rmdir仅能删除空的目录,如果是删除文件,可以使用rm命令来删除,rm命令同样可以用来删除文件夹,详细的介绍可以查看3.7小节。
3.6 cp:复制文件或目录
copy的缩写,用于复制文件。
语法:
  1. [root@ubuntu ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)  
  2. [root@ubuntu ~]# cp [options] source1 source2 source3 .... directory  
复制代码
选项与参数:
  • -a:相当于 -dpr 的意思。(常用)
  • -d:若为链接文件(link file),则复制链接文件的属性而非文件本身。
  • -f:force的缩写,为强制的意思,若目标文件已经存在且无法开启,则会移除后再尝试一次,需要谨慎使用。
  • -i:若目标文件已经存在时,在覆盖时会先询问。(常用)
  • -l:进行硬链接(hard link)的连结档创建,而非复制文件本身。
  • -p:连同文件的属性也一起复制过去。(备份常用)
  • -r:递归复制,用于非空目录的复制。(常用)
  • -s:复制为符号链接文件 (symbolic link)。
  • -u:使用这项参数后只会在源文件的更改时间较目标文件新时,或是名称相互对应的目标文件并不存在时,才复制文件。
用root身份,将root目录下的test文件复制到/tmp下,并命名为test2
  1. [root@ubuntu ~]# cp ~/test /tmp/test2  
  2. [root@ubuntu ~]# cp -i ~/test /tmp/test2  
  3. cp: overwrite `/tmp/test2'? n                #选n不覆盖,y覆盖
复制代码
3.7 rm:移除文件或目录
remove的缩写,用于删除文件或文件夹。
语法:
  1. rm [-fir] 文件或目录
复制代码
选项与参数:
  • -f:force的缩写,强制删除。(常用)
  • -i:互动模式,在删除前会先询问。
  • -r:递归删除,可以删除空或非空的目录,谨慎使用。(常用)
将刚刚在 cp 的实例中创建的 test2 删除掉:
  1. [root@ubuntu tmp]# rm -i test2  
  2. rm: remove regular file `test2'? y
复制代码
如果加上 -i 的选项就会主动询问,避免误删。
3.8 mv:移动文件与目录、修改名称
move的缩写,常用来移动文件,附带改名的功能。
语法:
  1. [root@ubuntu ~]# mv [-fiu] source destination  
  2. [root@ubuntu ~]# mv [options] source1 source2 source3 .... directory
复制代码
选项与参数:
  • -f:force的缩写,强制的意思,如果目标文件已经存在,则不再进行询问就直接覆盖。
  • -i:若目标文件已经存在时,询问是否覆盖。
  • -u:使用这项参数后只会在源文件的更改时间较目标文件新时,或是名称相互对应的目标文件并不存在时,才移动文件。
创建一目录,将文件移动到该目录中:
  1. [root@ubuntu tmp]# mkdir mvtest  
  2. [root@ubuntu tmp]# mv test mvtest
复制代码
将刚刚的目录名称更名为 mvtest2:
  1. [root@ubuntu tmp]# mv mvtest mvtest2  
复制代码
3.9 cat:从第一行开始显示文件内容
语法:
  1. cat [-AbEnTv]  
复制代码
选项与参数:
  • -A:相当于-ETv的组合选项。
  • -b:列出行号,仅对非空白行做行号显示,空白行不标行号。
  • -E:将结尾的断行字节用$显示出来。
  • -n:列印出行号,连同空白行也会有行号。
  • -T:将Tab按键以^I显示出来。
  • -v:列出一些打印不出来的特殊字符。
检看/proc/version这个文件的内容:
  1. [root@ubuntu ~]# cat /proc/version  
  2. Linux version 4.15.0-91-generic (buildd@lgw01-amd64-013) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020
复制代码
4 Linux用户管理
Linux系统是一个多用户的操作系统,我们在安装系统的时候便被要求注册一个用户,此外系统还会默认自带一个root用户。这些用户拥有不同的权限,管理着不同的文件与目录,所以Linux自带了用户管理的命令。
每个账户都会有自己的一个主目录,对于普通用户这个主目录在/home对应的用户名文件夹下,对于超级用户在/root下。
这些账号彼此间独立,可以同时登录,并拥有着自己独有的密码。通过不同的用户,系统可以更好地管理资源,并对用户进行监测。
要实现用户账号的管理,需要完成的工作主要有如下几个方面:
  • 用户账号的添加、删除与修改。
  • 用户口令的管理。
  • 用户组的管理。
4.1 useradd:添加新的用户
语法:
  1. useradd 选项 用户名
复制代码
参数说明:
  • -c:添加描述。
  • -d:目录的缩写,用来指定用户主目录。如果此目录不存在,则同时使用-m选项可以创建主目录。
  • -g:指定用户所属的用户组。
  • -G:指定用户所属的附加组。
  • -s:指定用户的登录Shell。
  • -u:指定用户的用户号。
创建用户可以使用以下操作:
  1. useradd –d /home/test -m test
复制代码
此命令创建了一个用户test,其中-d和-m选项用来为登录名test产生一个主目录 /home/test。(/home为默认的用户主目录所在的父目录)
4.2 userdel:删除账号
删除一个用户需要删除用户的各种配置文件,比如说passwd之类,或许还需要删除该用户的主目录。
使用userdel命令删除一个已存在的用户账号,其格式如下:
  1. userdel 选项 用户名
复制代码
常用的选项是 -r,它的作用是把用户的主目录一起删除。
例如:
  1. userdel -r test
复制代码
此命令删除用户test在系统文件中(主要是/etc/passwd、/etc/shadow、 /etc/group等)的记录,同时删除用户的主目录。
4.3 passwd:用户密码
创建完的账户是没有密码的,需要使用passwd命令进行密码修改操作,或者在需要更换命令的情况下,也可以使用此命令。
指定和修改用户密码的命令是passwd。超级用户可以为自己和其他用户设定修改密码,普通用户只能用它修改自己的密码。命令的格式为:
  1. passwd 选项 用户名
复制代码
可使用的选项:
  • -l:锁定密码无权修改,仅能通过root修改。
  • -u:解除锁定。
  • -d:删除密码,只能以root身份执行。
  • -f:强迫用户下次登录时修改密码,只能以root身份执行。
如果不输入用户名,则默认修改自己这个账户的密码。例如,假设当前用户是test,则下面的命令修改该用户自己的密码:
  1. [root@ubuntu ~]# passwd   
  2. [root@ubuntu ~]# Old password:******   
  3. [root@ubuntu ~]#
  4. [root@ubuntu ~]# Re-enter new password:*******
复制代码
如果是超级用户,可以用下列形式指定任何用户的密码:
  1. [root@ubuntu ~]# passwd test   
  2. [root@ubuntu ~]#
  3. [root@ubuntu ~]# Re-enter new password:*******
复制代码
普通用户修改自己的密码时,使用passwd命令会先询问原密码,验证通过后会再要求用户输入两遍新密码,如果两次输入的密码一致,则将这个密码设定。而超级用户为用户指定密码时,就不需要知道原密码可直接修改。
为用户设定空密码时,执行下列形式的命令:
  1. passwd -d test
复制代码
此命令将用户test的口令删除,这样用户test下一次登录时,系统就不再允许该用户登录了。
passwd 命令还可以用-l(lock)选项锁定某一用户,使其不能登录,例如:
  1. [root@ubuntu ~]# passwd -l test  
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则