- Linux 基础入门
- 实验一 Linux 系统简介
- 实验 2 基本概念及操作
- 实验 3用户及文件权限管理
- who 命令其它常用参数
- 文件权限
- 遇到问题:
- 实验4 Linux 目录结构及文件基本操作
- 实验5 环境变量与文件查找
- 环境变量
- 变量修改
- 与搜索相关的命令常用的有 whereis,which,find 和 locate。
- 与时间相关的命令参数:
- 实验6 文件打包与解压缩
- zip 压缩打包程序
- 实验7 文件系统操作与磁盘管理
- 实验8 Linux下的帮助命令
- 实验9 Linux任务计划crontab
- 实验10 命令执行顺序控制与管道
- 实验11 简单的文本处理
- tr 命令可以用来删除一段文本信息中的某些文字或者将其进行转换。
- 使用方式:
- 常用的选项有:
- col 命令可以将Tab换成对等数量的空格键,或反转这个操作
- 使用方式:
- 常用的选项有
- join 命令将两个文件中包含相同内容的那一行合并在一起
- 使用方式:
- 常用的选项有:
- paste 命令在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开
- 使用方式:
- 常用的选项有:
- 实验12 数据流重定向
- 实验13 正则表达式基础
- 实验14 Linux下软件安装
linux与windows之间的区别,主要是免费和收费,软件和支持,安全性,使用习惯,可制定性,应用范畴等。linux具有稳定的系统,安全性和漏洞的快速修补,多用户,用户和用户组的规划,相对较少的系统资源占用,可定制裁剪,移植到嵌入式平台(如安卓设备),可选择的多种图形用户界面(如 GNOME,KDE)等优点。因为是第一次接触到Luinx的操作系统,直观感受就是luinx上许多功能的执行都需要通过输入命令来完成的。实验 2 基本概念及操作
UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。在 UNIX/Linux 中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME),但我们的环境中使用的分别是 zsh 和 xfce。
- echo“ ”可以用来打印字符串
- tab键可以补全命令,补全目录,补全命令参数
- Ctrl+c键可以强行终止当前程序
- Ctrl+d 键盘输入结束或退出终端
- Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
- Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
- Ctrl+a 将光标移至输入行头,相当于Home键
- Ctrl+e 将光标移至输入行末,相当于End键
- Ctrl+k 删除从光标所在位置到行末
- Alt+Backspace 向前删除一个单词
- Shift+PgUp 将终端显示向上滚动
- Shift+PgDn 将终端显示向下滚动
通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符。
输入who am i 或者who mom likes输出pts 伪终端,如果要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可。伪终端就是在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端,pts/0 后面那个数字就表示打开的伪终端序号,再打开一个终端,然后在里面输入 who am i,看第二列是不是就变成 pts/1 了,第三列则表示当前伪终端的启动时间。
-a 打印能打印的全部
-d 打印死掉的进程
-m 同am i,mom likes
-q 打印当前登录用户数及用户名
-u 打印当前登录用户登录信息
-r 打印运行等级
在 Linux 系统里, root 账户拥有整个系统至高无上的权限,比如新建和添加用户。su可以切换到用户 user,执行时需要输入目标用户的密码,sudo 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。su - 命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:su -l lilei
sudo ls
也可以通过 sudo passwd shiyanlou 进行设置,或者你直接关闭当前终端打开一个新的终端。然后再切换回 lilei 用户,就可以使用 sudo 获取 root 权限了。
使用 --remove-home 参数在删除用户时候会一并将该用户的工作目录一并删除。删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。
读权限,表示可以使用 cat 之类的命令来读取某个文件的内容;写权限,表示可以编辑和修改某个文件的内容;
执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。
| ls -a | 显示除了 .(当前目录)和 …(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以 . 开头的文件为隐藏文件) |
|---|---|
| ls -dl <目录名> | 查看某一个目录的完整属性,而不是显示目录里面的文件属性 |
| ls -asSh | 显示所有文件大小,并以普通人类能看懂的方式呈现 |
再变更文件所有者时,出现:
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等。
- cd 进入目录
- cd ~ 到用户目录
- cd … 到上一级目录
- cd /xxx/xxx/xxx 绝对路径,输入的必须是最精确的路径
- cd …/…/…/xxx/xxx/xxx 相对路径,从当前位置开始向上一级然后再进入其他文件夹
- cd xxx/xxx/xxx/ 相对路径,从当前位置开始直接走向下一级的文件夹
用cd时多用TAB按键来补全 - pwd 查看当前的路径位置
- ls 查看当前文件夹下所有文件和文件夹
- ll 查看当前文件夹下所有文件和文件夹(更详细)
- touch 新建一个文件
- mkdir 新建一个文件夹
- mkdir -p 新建一个路径(文件夹套文件夹)
- rm 删除(文件)
- rm -r 删除目录路径
- rm -f 强制删除
- cp [文件] [路径] 复制文件到某个路径中
- cp -r [文件夹] [路径] 将整个文件夹(路径)复制到这个目标路径中
- mv [文件] [路径] 剪切文件到某个路径中
- mv [旧文件] [新文件名] 重命名文件/文件夹
- cat 打开文件,查看文件内容(直接打开看)
- more 打开文件,但看得更舒服
- head 只看文件的前几行
- tail 只看该文件里的最后几行【实时监控】
- file 查看文件类型~
- HS 依据文件系统使用的频繁与否以及是否允许用户随意改动(注意,不是不能),将目录定义为四种交互作用的形态
绝对路径
关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)。你可能注意到,我们表示相对路径实际并没有加上表示当前目录的那个 . ,而是直接以目录名开头,因为这个 usr 目录为 / 目录下的子目录,是可以省略这个 . 的(以后会讲到一个类似不能省略的情况);如果是当前目录的上一级目录,则需要使用 … ,比如你当前目录为 /home/shiyanlou 目录下,根目录就应该表示为 …/…/ ,表示上一级目录( home 目录)的上一级目录( / 目录)。
遇到的问题: rename命令无作用。
解决:rename 命令并不是内置命令,若提示无该命令可以使用 sudo apt-get install rename 命令自行安装。
- 打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显。
- nl 命令,添加行号并打印,这是个比 cat -n 更专业的行号打印命令。
- -b : 指定添加行号的方式,主要有两种:
-b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
-b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
-n ln:在行号字段最左端显示
-n rn:在行号字段最右边显示,且不加 0
-n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位) - 使用 more 和 less 命令分页查看文件
如果说上面的 cat 是用来快速查看一个文件的内容的,那么这个 more 和 less 就是天生用来"阅读"一个文件的内容的,比如说 man 手册内部就是使用的 less 来显示内容。其中 more 命令比较简单,只能向一个方向滚动,而 less 为基于 more 和 vi (一个强大的编辑器,我们有单独的课程来让你学习)开发,功能更强大。less 的使用基本和 more 一致,具体使用请查看 man 手册,这里只介绍 more 命令的使用。
- 使用 head 和 tail 命令查看文件
- file 命令查看文件的类型
使用 declare 命令创建一个变量名为 tmp 的变量: declare tmp
其实也可以不用 declare 预声明一个变量,直接即用即创建,这里只是告诉你 declare 的作用,这在创建其它指定类型的变量(如数组)时会用到。
使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou。注意,与其他语言不同的是, Shell 中的赋值操作,= 两边不可以输入空格,否则会报错。
#正确的赋值: tmp=shiyanlou
#错误的赋值 tmp = shiyanlou
读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值,初学者经常忘记输入): echo $tmp
不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。
| 命 令 | 说 明 |
|---|---|
| set | 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 |
| env | 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 |
| export | 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 |
按变量的生存周期来划分,Linux 变量可分为两类:
永久的:需要修改配置文件,变量永久生效;
临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。
这里介绍两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。
PATH 里面的路径是以 : 作为分割符的,所以我们可以这样添加自定义路径:
PATH=$PATH:/home/shiyanlou/mybin
- 注意这里一定要使用绝对路径。
现在就可以在任意目录执行那两个命令了(注意需要去掉前面的 ./)。可能会意识到这样还并没有很好的解决问题,因为我给 PATH 环境变量追加了一个路径,它也只是在当前 Shell 有效,我一旦退出终端,再打开就会发现又失效了。
变量的修改有以下几种方式:
| 变量设置方式 | 说明 |
|---|---|
| ${变量名#匹配字串} | 从头向后开始匹配,删除符合匹配字串的最短数据 |
| ${变量名##匹配字串} | 从头向后开始匹配,删除符合匹配字串的最长数据 |
| ${变量名%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最短数据 |
| ${变量名%%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最长数据 |
| ${变量名/旧的字串/新的字串} | 将符合旧字串的第一个字串替换为新的字串 |
| ${变量名//旧的字串/新的字串} | 将符合旧字串的全部字串替换为新的字串 |
前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source 命令来让其立即生效,如:
cd /home/shiyanlou
source .zshrc
source 命令还有一个别名就是 .,上面的命令如果替换成 . 的方式就该是
. ./.zshrc
- 注意在使用 . 的时候,需要注意与表示当前路径的那个点区分开。
- 注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
- whereis 简单快速
whereis 直接从数据库中查询,只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。 - locate 快而全
使用 locate 命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db 数据库来检索信息。不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。注意这个命令也不是内置的命令,在部分环境中需要手动安装,然后执行更新。
环境里使用 zsh,在 ~/.zshrc 文件里添加了 setopt nonomatch 配置,这样就不会自动处理和修复命令,因此可以不使用 转义。如果其他环境中执行该命令提示 zsh: no matches found: /usr/share/*.jpg,则可以在 .zshrc 中添加上述配置,或者使用 转义。 - which 小而精
- find 精而细
| 参数 | 说明 |
|---|---|
| -atime | 最后访问时间 |
| -ctime | 最后修改文件内容的时间 |
| -mtime | 最后修改文件属性的时间 |
下面以 mtime 参数举例:
| -mtime n | n 为数字,表示为在 n 天之前的“一天之内”修改过的文件 |
| -mtime +n | 列出在 n 天之前(不包含 n 天本身)被修改过的文件 |
| -mtime -n | 列出在 n 天之内(包含 n 天本身)被修改过的文件 |
| -newer file | file 为一个已存在的文件,列出比 file 还要新的文件名 |
| 文件后缀名 | 说明 |
|---|---|
| *.zip | zip 程序打包压缩的文件 |
| *.rar | rar 程序压缩的文件 |
| *.7z | 7zip 程序压缩的文件 |
| *.tar | tar 程序打包,未压缩的文件 |
| *.gz | gzip 程序(GNU zip)压缩的文件 |
| *.xz | xz 程序压缩的文件 |
| *.bz2 | bzip2 程序压缩的文件 |
| *.tar.gz | tar 打包,gzip 程序压缩的文件 |
| *.tar.xz | tar 打包,xz 程序压缩的文件 |
| *tar.bz2 | tar 打包,bzip2 程序压缩的文件 |
| *.tar.7z | tar 打包,7z 程序压缩的文件 |
上面命令将目录 /home/shiyanlou/Desktop 打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小。这里添加了一个参数用于设置压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。最后那个 -x 是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。
常用命令:
zip:
打包 :zip something.zip something (目录请加 -r 参数)
解包:unzip something.zip
指定路径:-d 参数
tar:
打包:tar -cf something.tar something
解包:tar -xf something.tar
指定路径:-C 参数
df :查看磁盘的容量
du:查看目录的容量
du -h #同–human-readable 以K,M,G为单位,提高信息的可读性。
du -a #同–all 显示目录中所有文件的大小。
du -s #同–summarize 仅显示总计,只列出最后加总的值。
dd命令用于转换和复制文件,不过它的复制不同于cp
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
if =输入内容(从键盘输入内容stdin)
of=输出 形成和存入哪个文件里
bs=单位大小 默认byte,可以为K,M,G
count=几个单位
du : 计算出单个文件或者文件夹的磁盘空间占用.
sort : 对文件行或者标准输出行记录排序后输出.
head : 输出文件内容的前面部分.
du:
-a:显示目录占用空间的大小,还要显示其下目录占用空间的大小
sort:
-n : 按照字符串表示的数字值来排序
-r :按照反序排列
head :
-n : 取出前多少行
- help:用于显示 shell 内建命令的简要帮助信息
- man:没有内建与外部命令的区分,显示系统手册页中的内容,这些内容大多数都是对命令的解释信息,还有一些相关的描述
- info:来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息
crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。
| #添加计划任务 | crontab -e |
| #查看已添加任务 | crontab - |
| #删除任务 | crontab -r |
| #确定cron是否成功的在后台启动 | |
| ps aux | grep cron或pgrep cron |
| #查看执行任务命令后再日志中的信息反馈 | sudo tail -f /var/log/syslog |
顺序执行可以使用 ; 隔开多条命令
有选择的执行命令
&& 当上一条命令执行结果返回 0 则执行后面的,否则不执行
|| 当上一条命令执行结果为 ≠0时则执行它后面的命令
#结合 && 和 || 实现一些操作
which cowsay>/dev/null && echo “exist” || echo “not exist”
- cut命令
打印字段
#前五个(包含第五个)
cut /etc/passwd -c -5
#前五个之后的(包含第五个)
cut /etc/passwd -c 5-
#第五个
cut /etc/passwd -c 5
#2 到 5 之间的(包含第五个)
cut /etc/passwd -c 2-5 - grep命令
命令格式:grep [命令选项]… 用于匹配的表达式 [文件]…
-r 参数表示递归搜索子目录中的文件
-n 表示打印匹配项行号
-I 表示忽略二进制文件 - sort排序命令
#默认为字典排序
cat /etc/passwd | sort
#反转排序
cat /etc/passwd | sort -r
#特定字段排序,-t参数用于指定字段的分隔符;-k 字段号用于指定对哪一个字段进行排序
cat /etc/passwd | sort -t’:’ -k 3
tr [option]…SET1 [SET2]
copy
| 选项 | 说明 |
|---|---|
| -d | 删除和 set1 匹配的字符,注意不是全词匹配也不是按字符顺序匹配 |
| -s | 去除 set1 指定的在输入文本中连续并重复的字符 |
col [option]
copy
| 选项 | 说明 |
|---|---|
| -x | 将Tab转换为空格 |
| -h | 将空格转换为Tab(默认选项) |
join [option]… file1 file2
copy
| 选项 | 说明 |
|---|---|
| -t | 指定分隔符,默认为空格 |
| -i | 忽略大小写的差异 |
| -1 | 指明第一个文件要用哪个字段来对比,默认对比第一个字段 |
| -2 | 指明第二个文件要用哪个字段来对比,默认对比第一个字段 |
paste [option] file…
copy
| 选项 | 说明 |
|---|---|
| -d | 指定合并的分隔符,默认为 Tab |
| -s | 不合并到一行,每个文件为一行 |
- tee 命令可以同时重定向到多个文件,并将信息打印在终端
echo ‘hello shiyanlou’ | tee hello - exec 命令实现永久重定向
exec 1>somefile
#后面你执行的命令的输出都将被重定向到文件中,直到退出当前子shell,或取消exec的重定向
ls
exit
cat somefile
一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。
- 表示前面的字符必须出现至少一次(1 次或多次),例如 goo+gle 可以匹配 gooogle,goooogle 等;
? 表示前面的字符最多出现一次(0 次或 1 次),例如,colou?r,可以匹配 color 或者 colour;
- 星号代表前面的字符可以不出现,也可以出现一次或者多次(0 次、或 1 次、或多次),例如,0*42 可以匹配 42、042、0042、00042 等。
-
更新软件源
sudo apt-get update -
升级没有依赖问题的软件包
sudo apt-get upgrade -
升级并解决依赖关系
sudo apt-get dist-upgrade -
不保留配置文件的移除
sudo apt-get purge w3m -
或者
sudo apt-get --purge remove w3m -
移除不再需要的被依赖的软件包
sudo apt-get autoremove -
搜索仓库中的软件
sudo apt-cache search softname1 softname2 softname3……



