Linux Command Line_1_Shell基础

  • A+
所属分类:linux技术
摘要

图形用户界面(GUI)让简单的任务更容易完成,命令行界面(CLI)使完成复杂的任务成为可能。

 

引言

图形用户界面(GUI)让简单的任务更容易完成,命令行界面(CLI)使完成复杂的任务成为可能。

第一部分:Shell

本部分包括命令行基本语言,命令组成结构,文件系统浏览、编写命令行、查找命令帮助文档。

基础知识

基础操作方式

在Linux中,在图形界面中打开Terminal的快捷键是Ctrl+Alt+t。
在Terminal中,按键盘的上下箭头,可以出现曾经输入过的命令,默认500行。关闭Terminal后会保存。
按键盘的左右箭头可以实现输入字符时光标的切换,可以移动到用户正在编辑部分的任意位置。
在Terminal中,鼠标不可以制定光标位置,鼠标左键可以用于选中文本,右键可以进行复制黏贴(有的系统是显示选项卡,有的是直接复制黏贴操作)。
命令行中,会出现一行短文字,格式类似于ebd@ubuntu:~$[me@linuxbox ~]$。解释一下,基本格式是"用户名@主机名 当前工作目录 权限符"。~代表用户的家目录。普通用户的权限符是$,如果变成超级用户,用户名变成root,权限符变成#

Linux基础知识

在Linux中,一切皆文件,文件没有后缀名,文件名和命令名对大小写敏感,文件名以.开头的文件是隐藏文件。

番外1:Ubuntu使用root登录GUI系统

安装Ubuntu后设定root密码及开机使用root用户登录:
CentOS,openSUSE等系统在安装系统过程中会有设置root密码的步骤,而Ubuntu没有此步骤。
在Ubuntu安装完毕后,在Terminal中输入sudo passwd -u root,按提示设置密码后,切换为root用户,输入命令su,输入密码,用户权限符由$变为#。
再安装vim文本编辑器,输入命令apt install vim,按提示安装成功后,用vim打开vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf,按键盘INSERT键进行编辑,在下方加入代码

greeter-show-manual-login=true all-guest=false

按Esc解除编辑,按":wq"保存并退出。
接着用vim /etc/pam.d/gdm-autologin,用vim编辑,在auth required pam_succeed_if.so user != root quiet_success前加上#,备注起来;同理再用vim对vim /etc/pam.d/gdm-passwordauth required pam_succeed_if.so user != root quiet_success前加上#,备注起来。
最后输入reboot进行重启,重启后就可以使用root进行开机图形用户界面登录了,开机用户名处选择未列出,用户名输出root,再输入密码即可。

番外2:Ubuntu搭建c++开发环境和vscode编辑器

教程链接

从零开始学命令

体验命令行之使用date和cal,df和free

输入date命令可以显示系统当前的时间和日期;
输入cal命令可以显示当前月份的日历。
输入df命令可以查看磁盘剩余的数量;
输入free命令可以查看当前内存空闲的情况。
Linux Command Line_1_Shell基础

exit

输入exit命令,可以结束并关闭当前终端会话。

清屏

输入clear命令进行向下翻页;
输入reset命令进行历史内容清空;
输入printf '33c'命令进行历史内容清空。

用户操作概要
reboot 用于重启机器
poweroff 用于关闭系统
useradd    xxxx 用于添加用户
su  xxx 用户将用户切换为xxx
whoami 查看当前用户

在Linux系统中,普通用户可以在没有其他用户时使用reboot进行重启,使用poweroff可以关机,有其他用户时可以按照提示操作。useradd命令可以进行新用户的创建。需要切换用户时,使用命令su NAME切换到NAME用户,可以使用whoami命令来查看当前操作的用户名(其实每行前面的提示符就有)。
Linux Command Line_1_Shell基础
Q&A
Q:shutdown和poweroff和reboot的区别?
A:shutdown是poweroff和reboot的结合,参数-r表示reboot,-h表示poweroff
在root用户下,使用shutdown -r +10表示在10分钟后重新启动系统,shutdown -h now表示立即关机。

网络入门之ifconfig和ping
  • ifconfig —— 列出网络相关信息
  • ping IP/DNS —— 连接某个ip或网址

在Ubuntu系统中,如果提示没有此命令,首先通过sudo apt install net-tools安装网络工具。安装完成后,可以使用ifconfig命令来查看网络相关信息。可以使用ping命令了解网络之间的连接情况。
Linux Command Line_1_Shell基础
除了网络设备和状态外,如果正确启动了can驱动和can卡,can设备状态也会列出。
虚拟机使用桥接网络后,利用Windows下的ipconfig和Linux下的ifconfig得到主机和虚拟机的ip地址,可以相互ping通。

文件系统中跳转
  • ls —— 列出目录中的内容
  • cd —— 更改当前目录
  • pwd —— 打印出当前工作的目录位置

Linux的文件系统是一个树形结构,树根是根盘符(根节点),结点按照用户的需求,具有不同的深度。任何时候,用户都像置身迷宫之中。当用户打开一个Terminal时,默认位置在用户的家目录(~)中。使用普通用户登录Linux系统时,家目录及其子目录是唯一允许普通用户进行写操作的地方。
可以键入pwd命令来显示当前的工作目录(绝对路径);
可以用ls命令来列出当前目录下的所有文件和子目录(相对路径);
可以使用cd命令进行当前工作目录的更改(可输入绝对路径或相对路径)。
Linux Command Line_1_Shell基础

在Linux中,可以在输入命令后接上选项。一个相对完整的命令应该是这样的:command -options arguments
ls命令的选项如下表:

ls常用选项一览
选项 长选项 描述
-a --all 展示包括隐藏文件和隐藏目录在内的所有文件和目录
-d --directory  
-l   以列表形式详细显示
-h --human-readable 人性化展示
-r --reverse 以相反的顺序进行显示
-S   按照文件大小排序
-t   按照修改时间排序
-F    
-i   列出文件或目录的索引号

ls长输出时的各字段含义

Linux Command Line_1_Shell基础
drwxr-xr-x,d表示此文件名是一个目录(d表示目录,-表示文件,l表示硬链接),后面9个字母是三组rwx,分别表示文件属主自己、文件属主所在用户组、其他用户是否能对此文件或目录进行读(r)、写(w)、运行(x),有字母表示有此权利,-表示没有此权利。

路径问题

路径可以分为绝对路径和相对路径。绝对路径始于根目录,紧跟着一个一个的子目录,直到达到所期望的目录或文件。 相对路径始于当前工作目录,表示目标文件或目标目录相对于当前工作目录的路径。
在相对路径中,./表示当前目录,../表示回到当前目录的上一级(父)目录。绝对路径默认从根目录开始,即第一个/表示根目录。

研究操作系统
  • ls —— 列出目录中的内容
  • file —— 确定文件类型
  • less —— 浏览文件中文本内容

在Linux中,文件是没有扩展名的,很难通过一个名字知道这个文件是个什么文件。在windows中,.png文件是一张图片,.dll文件是一个动态链接库,那怎么知道在Linux下,一个文件是什么类型的呢?
使用file命令,可以很清楚的知道文件的类型。不论文件名是否有后缀,都可以将文件的类型正确的识别。
Linux Command Line_1_Shell基础
Linux Command Line_1_Shell基础
输入命令less可以查看文本型文件的内容。可以看出,上图中的File_Rename是一段代码,是文本格式的文件,其他的一个是mp3文件,一个是png矢量图文件。使用命令less File_Rename对此文本文件进行查看。在显示文本文件内容后,使用b进行向上翻页,使用空格进行向下翻页,使用上下箭头进行向上或向下一行的移动,使用q键进行退出,使用/键进行索引,使用n键进行/之后的下一次索引,使用G跳到最后一行,用g跳到第一行。

系统目录一览
/ 根目录,根盘符。
/boot 系统启动相关文件。 包含内核,RMA磁盘映像和启动加载程序。
/etc 配置文件,包含一系列Shell脚本,系统启动时脚本会运行每个系统服务,是可读文本文件。
/dev 包含设备结点的目录。内核维护着它支持的设备。
/home 用户的家目录,用户家目录在/home/Username,普通用户只能在自己的目录下创建文件。
/root 管理员的家目录。
/lib 静态库文件和动态库文件,/lib/modules是内核模块文件。
/lost+found 当部分恢复了一个损坏的文件才会用到的目录。
/media 移动设备的自动挂载点目录,如光驱和USB驱动。
/mnt 挂载点目录,是一个额外的临时文件系统。
/opt 可选目录,第三方程序和软件产品的安装目录。
/proc 内核映射文件,是一个伪文件系统,是内核的窥视孔,是只读的。
/sys 跟硬件设备相关的属性映射文件,是一个伪文件系统。
/tmp 临时文件,每次重新启动都会自动清空。还有/usr/tmp。
/var 经常变化的文件,如数据库 假脱机文件 邮件等,/var/log是日志文件目录。
/bin 用户命令,可执行文件;用到的库文件可能在/lib,配置文件在/etc
/sbin 管理命令,可执行文件;用到的库文件可能在/lib,配置文件在/etc
/usr 只读文件,其中/usr/local是第三方软件。
/usr/bin 系统安装的可执行程序。
/usr/lib 是/usr/bin目录中程序所用的库文件。
/usr/local 让系统使用的程序的安装目录,默认为空。由源码编译的程序会在./bin下。
/usr/sbin 包含系统管理程序。
/usr/share 是很多由/usr/bin目录中程序使用的共享数据。
/usr/share/doc 大多数系统中软件的文档所在地。

操作文件和目录
  • cp —— 复制文件和目录
  • mv —— 移动/重命名文件和目录
  • mkdir —— 创建目录
  • rm —— 删除文件和目录
  • ln —— 创建硬链接和符号链接

在图形文件管理器中对上面列出的任务会更容易些,而命令行的程序优点在于对复杂文件任务的操作。

可以输入mkdir dir1在当前路径下创建一个名为dir1的目录,也可以在当前路径下一次创建多个目录,如mkdir dir1 dir2 dir3

可以输入 cp item1 item2将item1复制到item2,item要求是一个可以识别的路径,可以使文件或者目录;

可以输入 mv item1 item2将item1移动到item2,具体要求和cp命令类似;

可以输入rm item,将当前目录下的item进行删除;
(请注意:务必先用ls item将需要的item列出,正确后使用rm进行删除,以免错删造成麻烦!)

通配符

在Terminal中,可以按照名字,使用通配符进行匹配。通配符可以理解为另一个维度的正则表达式。利用通配符的规则,可以在指定的文件范围内正确匹配出满足通配条件的文件和目录。

通配符 含义 示例
* 匹配任意长度的字符,包括0 1或多个 a*.cpp     以a开头的以.cpp结尾的文件或目录
? 匹配任意的单个字符 RT?123456     RT和123456中间有一个字母的文件或目录
[ ] 匹配括号中出现的单个字符  
[:upper:]
[A-Z]
匹配一个大写字母 [:upper:]*[:digit:]     大写字母开头,数字结尾的文件活目录
[:lower:]
[a-z]
匹配一个小写字母  
[:alpha:]
[a-Z]
匹配一个字母,大小写均可  
[:digit:]
[0-9]
匹配一个数字字符  
[:alnum:]
[A-Z,a-z,0-9]
匹配一个数字或字母  
[^…] 匹配…之外的一个字符  
[:blank:] 匹配一个水平空白字符  
[:space:] 匹配一个水平或垂直空白字符  
[:punct:] 匹配一个标点  
[:print:] 匹配一个可打印字符  
[:cntrl:] 匹配一个不可打印字符  

使用通配符,可以匹配出满足用户条件的文件和目录。

小技巧:多个命令顺序执行

用户可以通过;将多条命令放在一起一同执行。

使用命令
  • type —— 说明怎样解释一个命令
  • which —— 显示会执行哪个可执行程序
  • man —— 显示命令手册页
  • apropos —— 显示一系列适合的命令
  • info —— 显示命令info
  • whatis —— 显示一个命令的简洁描述
  • alias —— 创建命令别名

一共可以分成4种命令:

  • 可执行程序(file)
  • shell的内建命令(builtin)
  • shell函数(keyword)
  • 命令别名(alias)

利用type command来显示命令的类型,参数-t可以说明命令类型,-p可以知道可执行文件的路径,-P可以知道可执行文件和别名命令的路径。
Linux Command Line_1_Shell基础
利用命令help可以显示shell内建命令的帮助文档。对于内部命令,使用help command;对于外部命令,使用command --help。一般来说,builtin和keyword类型的命令使用help command,如help kill和help if; file和alias类型的命令使用 command --help,如vi --help和grep --help。

利用man命令可以查看所有文件(命令)的相关帮助。man一共有9个章节的内容,如man 7 man就可以查看第七章中的man命令的相关解释。一般使用man commandman加命令名就可以查看帮助了。另外,如果使用man加命令名找到了用户不想要的东西(也就是发生重名),可以更改章节号进行进一步查看。 第一章是可以从Shell运行的命令(man命令的默认参数);第二章是必须由内核完成的功能(系统调用);第三章是库调用;第四章是dev中的文件;第五章是配置文件的格式;第六章是游戏;第七章是宏;第八章是管理命令;第九章是废弃章节。另外,如果不知道这命令是什么类型或属于哪个章节,可以使用man -a command进行章节一览,看看哪些章节中有这个命令,按照指示执行即可。

利用info命令可以得到比help更为详细的帮助文档。

利用alias命令可以创建别名。如alias fooo='cd ~ ; ls'就是把等号后面的命令创建一个新的别名,以后每次使用fooo,就会回到用户家目录并列出所有项。当然,在用户不想使用自定义别名后可以使用unalias命令将之前定义的别名命令进行取消,如unalias fooo之后就不再能使用fooo命令了。

利用whatis命令可以得到一个简洁的命令介绍。

重定向
  • cat —— 连接文件
  • sort —— 排序文本行
  • uniq —— 报道或省略重复行
  • grep —— 打印匹配行
  • wc —— 打印文件的行数、单词数和字节个数
  • head —— 输出文件第一部分
  • tail —— 输出文件的最后一部分

在默认情况下的Terminal中,标准输入是键盘,标准输出和标准错误会直接显示在屏幕上。根据Linux一切皆文件的思想, 实际上的输入输出是在叫做STDIN、STDOUT或STDERR的特殊文件中。所谓的重定向,就是更改输出走向和输入来向,将输入输出和磁盘文件进行挂钩,而不仅仅是使用STDIN、STDOUT或STDERR这些特殊文件。

文件种类 英文简称 标示符
标准输入设备 STDIN 0
标准输出设备 STDOUT 1
标准错误输出 STDERR 2

重定向标准输出

I/O重定向允许我们重新定义标准输出送到哪里。使用">"或">>"进行输出重定向,>表示覆盖输出,>>表示追加输出。ls -l /usr/bin > ls_output.txt表示将bin中的文件列出,保存在当前工作目录的ls_output.txt文件中。如果只用覆盖输出">"重定向符号,会导致文件被覆盖,只能保留最新的一次重定向指令的结果;如果要保留多次的重定向结果,建议使用">>"符号。

重定向标准错误输出

如果命令输入错误,进行重定向标准输出符">"或">>",就会得到一个空文件。因为像ls之类的指令,错误的位置不会得到任何标准输出。这可以作为清空文件的一个命令,但是如果你想在文件中得到这个错误信息,就必须进行重定向,使用"2>"和"2>>"来进行标准错误重定向。
注:">"和">>"默认为重定向标准输出,如果需要重定向标准错误输出,应使用"2>"和"2>>"。
Linux Command Line_1_Shell基础

重定向STDOUT和STDERR到同一文件

上文注释到,STDOUT和STDERR的重定向符是不同的,那如何通过一条命令,可以同时重定向STDOUT和STDERR两种输出,到同一个文件中呢?
可以在原命令最后添加2>&1在STDOUT重定向(1)的功能上增加STDSTDERR(2)功能。
Linux Command Line_1_Shell基础

将不需要的输出重定向到/dev/null

可以将不需要的数据进行重定向,位置是/dev/null,这个操作相当于没有存储、没有显示任何数据。

连接命令cat

cat命令读取一个或多个文件,然后复制他们到标准输出。换而言之,cat file.txt可以把文本类型的文档直接输出在命令行中。

利用cat命令和>重定向符也可以对简单文本进行输入。使用cat > file可以进行文档输入工作。
要记得,使用cat命令输入完毕后,是使用键盘的Ctrl+D键进行结束操作的。
Linux Command Line_1_Shell基础

管道线 |

如果在命令行中,有command1 | command2形式出现,则表示先执行command1再执行command2,且command2的输入是command1的输出,|表示管道线。利用管道线,可以运行多个命令,最终输出一个结果。例如:ls -l / | less就是将根目录中的详细项利用less文本查看器进行输出。
将若干跟管道线结合在一起使用,形成一个复杂的操作,就被称作过滤器。在过滤器中常见的命令有sort、uniq等。sort命令可以进行排序,uniq命令可以进行去重,wc命令可以查看文本大小。例如,使用ls /usr/bin /bin会将两个文件分别排序后输出,使用ls /usr/bin /bin | sort | less会将两个文件合并排序后输出,使用ls /usr/bin /bin | sort | uniq | less会将两个文件合并排序并去重后输出。wc命令输出的三个数字分别是文档总行数,总单词数,总字节数。
Q&A
Q:Linux中的";"和"|"都可以进行执行,区别是什么?
A:";"是依次执行,不论成功失败,都会执行每一条语句,而"|"是管道,需要符合后一个参数的输入是前一个参数的输出,相当于执行一条复杂的语句。

打印匹配行grep

使用grep pattern file可以将文本文件中和通配符pattern的匹配行进行打印。例如:ls /usr/bin /bin | sort | uniq | grep zip可以将名字中含有zip的行进行打印。 grep的常用参数主要有-i(忽略大小写)和-v(打印不包含字符)。

打印并保存tee

在Linux中,结果要么被显示出来,要么被打印出来。将tee命令安装在管道上可以在打印的同时保存文件。例如ls /bin | tee file1.txt | grep zip,这个命令将/bin中的文件名都保存在file1.txt中,并在这些文件名中找出带有zip的进行输出。