Linux Command Line_1_Shell基础
引言
图形用户界面(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-password
在auth required pam_succeed_if.so user != root quiet_success
前加上#,备注起来。
最后输入reboot进行重启,重启后就可以使用root进行开机图形用户界面登录了,开机用户名处选择未列出,用户名输出root,再输入密码即可。
番外2:Ubuntu搭建c++开发环境和vscode编辑器
从零开始学命令
体验命令行之使用date和cal,df和free
输入date命令可以显示系统当前的时间和日期;
输入cal命令可以显示当前月份的日历。
输入df命令可以查看磁盘剩余的数量;
输入free命令可以查看当前内存空闲的情况。
exit
输入exit命令,可以结束并关闭当前终端会话。
清屏
输入clear命令进行向下翻页;
输入reset命令进行历史内容清空;
输入printf '\033c'
命令进行历史内容清空。
用户操作概要
reboot | 用于重启机器 |
poweroff | 用于关闭系统 |
useradd xxxx | 用于添加用户 |
su xxx | 用户将用户切换为xxx |
whoami | 查看当前用户 |
在Linux系统中,普通用户可以在没有其他用户时使用reboot进行重启,使用poweroff可以关机,有其他用户时可以按照提示操作。useradd命令可以进行新用户的创建。需要切换用户时,使用命令su NAME
切换到NAME用户,可以使用whoami命令来查看当前操作的用户名(其实每行前面的提示符就有)。
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命令了解网络之间的连接情况。
除了网络设备和状态外,如果正确启动了can驱动和can卡,can设备状态也会列出。
虚拟机使用桥接网络后,利用Windows下的ipconfig和Linux下的ifconfig得到主机和虚拟机的ip地址,可以相互ping通。
文件系统中跳转
- ls —— 列出目录中的内容
- cd —— 更改当前目录
- pwd —— 打印出当前工作的目录位置
Linux的文件系统是一个树形结构,树根是根盘符(根节点),结点按照用户的需求,具有不同的深度。任何时候,用户都像置身迷宫之中。当用户打开一个Terminal时,默认位置在用户的家目录(~)中。使用普通用户登录Linux系统时,家目录及其子目录是唯一允许普通用户进行写操作的地方。
可以键入pwd命令来显示当前的工作目录(绝对路径);
可以用ls命令来列出当前目录下的所有文件和子目录(相对路径);
可以使用cd命令进行当前工作目录的更改(可输入绝对路径或相对路径)。
在Linux中,可以在输入命令后接上选项。一个相对完整的命令应该是这样的:command -options arguments
。
ls命令的选项如下表:
ls常用选项一览 | ||
选项 | 长选项 | 描述 |
-a | --all | 展示包括隐藏文件和隐藏目录在内的所有文件和目录 |
-d | --directory | |
-l | 以列表形式详细显示 | |
-h | --human-readable | 人性化展示 |
-r | --reverse | 以相反的顺序进行显示 |
-S | 按照文件大小排序 | |
-t | 按照修改时间排序 | |
-F | ||
-i | 列出文件或目录的索引号 |
ls长输出时的各字段含义
如drwxr-xr-x
,d表示此文件名是一个目录(d表示目录,-表示文件,l表示硬链接),后面9个字母是三组rwx,分别表示文件属主自己、文件属主所在用户组、其他用户是否能对此文件或目录进行读(r)、写(w)、运行(x),有字母表示有此权利,-表示没有此权利。
路径问题
路径可以分为绝对路径和相对路径。绝对路径始于根目录,紧跟着一个一个的子目录,直到达到所期望的目录或文件。 相对路径始于当前工作目录,表示目标文件或目标目录相对于当前工作目录的路径。
在相对路径中,./
表示当前目录,../
表示回到当前目录的上一级(父)目录。绝对路径默认从根目录开始,即第一个/
表示根目录。
研究操作系统
- ls —— 列出目录中的内容
- file —— 确定文件类型
- less —— 浏览文件中文本内容
在Linux中,文件是没有扩展名的,很难通过一个名字知道这个文件是个什么文件。在windows中,.png文件是一张图片,.dll文件是一个动态链接库,那怎么知道在Linux下,一个文件是什么类型的呢?
使用file命令,可以很清楚的知道文件的类型。不论文件名是否有后缀,都可以将文件的类型正确的识别。
输入命令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可以知道可执行文件和别名命令的路径。
利用命令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 command
man加命令名就可以查看帮助了。另外,如果使用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>>"。
重定向STDOUT和STDERR到同一文件
上文注释到,STDOUT和STDERR的重定向符是不同的,那如何通过一条命令,可以同时重定向STDOUT和STDERR两种输出,到同一个文件中呢?
可以在原命令最后添加2>&1
在STDOUT重定向(1)的功能上增加STDSTDERR(2)功能。
将不需要的输出重定向到/dev/null
可以将不需要的数据进行重定向,位置是/dev/null
,这个操作相当于没有存储、没有显示任何数据。
连接命令cat
cat命令读取一个或多个文件,然后复制他们到标准输出。换而言之,cat file.txt
可以把文本类型的文档直接输出在命令行中。
利用cat命令和>重定向符也可以对简单文本进行输入。使用cat > file
可以进行文档输入工作。
要记得,使用cat命令输入完毕后,是使用键盘的Ctrl+D键进行结束操作的。
管道线 |
如果在命令行中,有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的进行输出。
Linux Command Line_1_Shell基础的更多相关文章
- Linux系统优化及基础命令
1.Linux系统优化及基础命令 2. vim编辑器 vim 操作命令 在命令模式下操作 pageup 往上翻页(重要指数****)pagedown 往下翻页(重要指数****)H 移动到屏幕首行gg ...
- 鸟哥Linux私房菜基础学习篇学习笔记2
鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux应急响应基础
文件排查 敏感目录文件分析 tmp目录 命令目录 /usr/bin /usr/sbin 开机启动项 /etc/init.d /etc/init.d是/etc/rc.d/init.d的软链接 文件时间 ...
- Linux 脚本编写基础
txt去重 http://man.linuxde.net/sort Linux 脚本编写基础 http://www.cnblogs.com/linn/archive/2007/03/05/664 ...
- linux发行版基础目录
linux发行版基础目录 linux 基础目录 linux基础目录 目录 作用 / 根目录,起源 /boot linux引导启动目录 /lib 库目录 /bin 常用内部命令 /sbin 常用内部管理 ...
- LINUX二十个基础命令
LINUX二十个基础命令 一. useradd命令 1.命令格式: useradd 选项 用户名 2.命令功能: 添加新的用户账号 3.常用参数: -c comment 指定一段注释性描述.-d 目录 ...
- 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令
Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...
- 《The Linux Command Line》 读书笔记02 关于命令的命令
<The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...
随机推荐
- 关于node回调函数中同步和异步操作的理解
1.node的回调函数:如果一个方法的参数是另一个函数的名字,则这个参数本身就要回调函数,这个函数就是回调函数 1).同步操作文件(阻塞I/O) 同步就是一个人干完这个再干那个-- 所 ...
- 关于设置Vscode缩进,保存代码任然缩进无效解决方式
在Vscode按F1,运行命令,输入Formatter config 把内容更改为以下代码 { "onSave": true, "javascript": { ...
- 动态规划专题一:线性dp
第一篇博客随笔,被迫写的bushi 上课讲的动态规划入门,还是得总结一下吧 背包 01背包 背包有容量限制,每一件物品只能够取一件(这就是为什么j从V至v[i]循环的原因) 思路:f数组表示当前状态的 ...
- drf 视图使用及源码分析
前言 drf视图的源码非常的绕,但是实现的功能却非常的神奇. 它能够帮你快速的解决ORM增删改查的重复代码,非常的方便好用. 下面是它源码中的一句话: class ViewSetMixin: &quo ...
- 【django-simpleui】‘simpletags‘ is not a registered tag library报错的解决方法
1:创建 templatetags文件夹 2:创建simpletags.py文件将内容粘贴进去,在下面 3:setting.py添加文件指定: 1 TEMPLATES = [ 2 { 3 'BACK ...
- 关于ansible命令的执行过程
首先说明一下.每一个模块.都是有相应的.py文件的,可以通过rpm -ql ansible看到 要观察模块执行过程,可以在ansible命令执行时加上-v或-vvv,或者-vvvv看得更加详细 ans ...
- 文本的3D效果
HTML <div class="g-box"> <h1>CSS的世界很美</h1> </div> CSS .g-box { wid ...
- Scala-1-字符处理
// s插值val s = s"a = $a, b = $b"val s = s"a = ${a*2}, b = ${b*3}" // 顶格 及 插值val s ...
- 简单入门Rabbitmq
什么是RabbitMQ RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写.支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScr ...
- vue API 知识点(2)---选项总结
一.选项 / 数据 1.data 当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例,如果 data 仍然是一个纯碎的对象,则所有的实例将被共享引用同一个 ...