【LINUX计算机大白平凡学习linux之路】

@计算机大白平凡学习 之路
千里之行,始于足上。只有基础扎实+思路清析,写脚本才没有问题。多看一些牛人大咖写的脚本。看人家的思路与结构,会收益良多, 一起努力学习吧!

Linux是Torvalds先生所开发出来的,基于GPL的版权宣告之下,可以在x86的架构下运作,也可以被移植到其他的大型主机上面。 由于开发的相关理念与兼容的问题,因此,我们也可以称Linux为Unix Like操作系统的一种。

学习资源


免费提供最新Linux技术教程书籍为开源技术爱好者努力做得更多更好

学习Linux

课程
马哥教育Linux专题课】
马哥教育2021-小白8小时掌握运维自动化Ansible神器【运维必备】
马哥教育2021-8小时拿下LVS企业级实战【运维必备核心技能】
马哥教育2021-负载均衡利器-Tengine、Haproxy入门到精通【加薪必备】
马哥教育2021-新手快速掌握Nginx无敌教程【10W+人学习,98%好评】

【马哥教育python课程】
马哥教育2021-小白必学Python超详细实战教程典藏版【10W+人学习,98%好评】
马哥教育-Python-WEB-SSH实战训练营
Python/Python开发/Python入门/Python学习/Python编程/Python基础
马哥 Python 实战教程:Python Django 从零学会写网站(持续更新)
马哥Python实战教程:Python网络编程实现群聊软件

【云原生专题-马哥亲授】
马哥教育2021-基于Kubernetes和Jenkins的GitOps实战
马哥教育2021-Ceph分布式存储系统快速入门【涨薪30%+】
马哥教育2021-小白快速通关Envoy核心技术【马哥亲授】
马哥教育2021-从0开始学ISTIO【马哥亲授】

【LINUX计算机大白平凡学习linux之路】_第1张图片

目录名称 存放档案类型
/boot 系统开机核心所需档案
/etc 系统设定档案
/home 使用者家目录所在
/dev 设备档案
/lib 函式库档案
/bin 一般执行档﹐系统管理员需要
/sbin 系统执行档﹐系统管理员需要
/usr/bin 一般执行档﹐普通用户需要
/usr/sbin 系统执行档﹐普通用户需要
/tmp 临时档存放目录
/var 系统资讯/设定档

常见的执行Linux命令的格式是下面这样的

命令名称 [命令参数] [命令对象]

  • 命令名称:就是语法中的**“动词”**,表达的是想要做的事情,例如创建用户、查看文件、重启系统等操作。
  • 命令参数:用于对命令进行调整,让“修改”过的命令能更好地贴合工作需求,达到事半功倍的效果。就像买衣服一样,衣服的尺码总会感觉偏大或偏小,要么只能将就着穿,要么就再裁剪修改一下,而这种对命令进行“裁剪”的行为就是加参数。
命令名称、命令参数与命令对象之间要用空格进行分隔,且字母严格区分大小写。
将可选择的、可加或可不加的、非必需的参数使用中括号引起来; 而命令所要求的、必须有的参数或对象值,则不带中括号

如何让脚本执行呢?
命令是从上而下,由左到右分析并执行的,命令与参数之前一些空格或者tab或者空白行都会被忽略。# 符号,可以做为注释批注。后面的所有命令等等,都不会分析执行。

写脚本

  1. 先明白你要干什么事情。
  2. 哪些命令可以帮你实现。达到你想要结果。
  3. 过程中注意每个命令的细节。
  4. 功能需求完成之后,通过历史命令,把过程好好整理一下。按序及格式放到.sh文件里。其余的呢?加上判断,循环。数据重定向。
  5. 可以模块化,采用函数的方式使得更有条理,功能分明。
  6. 在这过程当中,你可以找到当中的共性,设置为参数。增加脚本的易用性。

绝对路径的第一个字母一定是/ ﹐否则就是相对路径。因为整个系统只有一个/ ﹐所以对任何档案而言﹐都只有一个绝对路径。相对的﹐相对路径则根据您当前的工作目录(pwd 的结果)﹐到目标档案的路径。比方说﹐当前的工作目录是在/root/ 这里﹐而目标的绝对路径是/tmp/test.txt﹐那相对路径就是…/tmp/test.txt (分析﹕… 是/root/ 的上一级目录﹐也就是/ ﹐然后其下有一个tmp/ 的目录﹐然后就是目标档案了)。再举一个例子﹕如果目标档案的绝对路径是/root/tmp/test.txt﹐那相对路径就是./tmp/text﹐但是﹐通常来说﹐如果相对路径是在当前目录之下延伸出去的话﹐那么这个./ (当前目录)就可以省略﹐直接用tmp/test.txt 是一样的。

  • 前提,脚本得有读和执行的权限。
    1. 直接执行,用脚本的绝对路径,在终端,直接输入就可以;
    2. 对应的相对路径也可以执行;
    3. 也可把脚本放到环境变量的路径下。
    4. 还一种是指定bash进程来执行。基本上就这些办法

LINUX 报错

学会查看 README.md文件

Linux 软件安装

  1. conda 安装法

  2. 下载二进制软件安装

  3. 从源码编译安装

    这里整理下Linux用来处理数据文本的命令,以供遗忘时查看
    Linux命令大全网

    1. 我们登陆上服务器,然后输入ls 命令:
    2. echo 命令用于在终端设备上输出字符串或变量提取后的值
    3. 语法格式:echo [参数] [字符串]

常用参数:

-n 不输出结尾的换行符
-e “\b” 删除前面的一个字符
-e “\c” 结尾不加换行符
-e “\n” 换行,光标移至行首
—version 查看版本信息
–help 查看帮助信息
 4. 	which ls可以查看到ls所在的位置
 5. `$ which ls`
 6. pwd

它的意思是﹕Print Working Directory﹐也就是您目前所处的档案系统中的位置﹐您或许会发现您正在/root 中。这通常是您登录后首先进入的目录﹐也就是使用者家目录(home directory)啦﹐每一个使用者都有其自己的家目录。
7. ls其实是保存在/bin/ls这个目录下的。而我们之所以可以随时随地的调用ls,是因为当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找
8. 接下来我们看看当前的环境变量PATH是什么,用echo P A T H 可 以 查 看 到 9. ‘ PATH可以查看到 9. ` PATH9. echo $PATH`
PATH记录的是很多个目录,这些目录以冒号:作分割,为了让大家看的清楚,我们把冒号:替换成\n

$ echo $PATH|tr` :' '\n' 

如何修改环境变量

修改环境变量,其实就是对环境变量进行重新赋值

# 下载
wget -c https://XXXXXXXX.tar.gz
# 解压
tar zxvf XXXXXXXX.tar.gz
# 安装
bash XXXXXXXX.sh

这个软件安装好了之后,会在用户的家目录下的生成一个隐藏目录.aspera,需要用ls -a来查看
【LINUX计算机大白平凡学习linux之路】_第2张图片
进一步查看这个目录的结构:
【LINUX计算机大白平凡学习linux之路】_第3张图片
发现它的下下层目录也有一个叫bin的目录,包涵的可执行文件有

$ ls .aspera/connect/bin/
ascp  asperaconnect  asperaconnect.bin  asperacrypt  asunprotect

假如我们想像调用ls那样随时随地的调用这个软件的命令,即~/.aspera/connect/bin/目录中的可执行文件,那么就需要把这个路径添加到环境变量里面去,方法是:

export PATH="~/.aspera/connect/bin/:$PATH"
# 注意这里要用双引号,不能用单引号

运行上面这一行命令之后,就可以随时随地得调用了,如:
【LINUX计算机大白平凡学习linux之路】_第4张图片
但是,如果想一劳永逸,我们需要把它写进去.bashrc里面去
.bashrc文件

  • .bashrc是一个配置文件,也是一个隐藏文件,存在于用户的家目录~下,需要用ls -a才能查看到,当我们每次登陆服务器时,这个文件就会被执行一次,也就是说文件内的代码会被运行一遍。
  • 因此,当我们把export PATH="~/.aspera/connect/bin/:$PATH"这一行命令写入.bashrc后,以后每次登陆服务器,系统就会帮我们把这一行命令执行一次,我们就不能再自行运行了,方法如下:
echo export PATH="~/.aspera/connect/bin/:$PATH" >>.bashrc
  1. head, tail查看文档头尾。
  2. -n选项可以指定行数。
  3. less -SN 用来查阅文档,
  4. q退出,
  5. w # 查看用户运行
  6. ceho $[SHELL] #查看shell 版本

纯文本信息汇总

  1. wc命令默认依次输出单词数、行数、总字符数。查看行数使用 wc -l。 如果存在空行,空行会被计数。
  2. 可以使用 grep命令实现非空行计数
grep -c "[^ \\n\\t]" some_data.bed

man命令中常用按键以及作用

按键 作用
空格键 向下翻一页
PaGe down 向下翻一页
PaGe up 向上翻一页
home 直接前往首页
end 直接前往尾页
/ 从上至下搜索某个关键词,如“/linux”
? 从下至上搜索某个关键词,如“?linux”
N 定位到上一个搜索到的关键词
n 定位到下一个搜索到的关键词
q 退出帮助文档
在输入命令前就已经存在的“[root@linuxprobe~]#”这部分内容是终端提示符,它用于向用户展示一些基本的信息—当前登录用户名为root,简要的主机名是linuxprobe,所在目录是~(这里的~是指用户家目录,第6章会讲解),#表示管理员身份(如果是$则表示普通用户,相应的权限也会小一些)。
13. **ls -lh** 以易读形式查看文件大小

14.Tab键 在Bash解释器的快捷键中, 随后敲击了两下Tab键#够实现对命令、参数或文件的内容补全
14. Ctrl+c组合键:## 终止当前进程的运行
15. Ctrl+l组合键:##会清空当前终端中已有的内容(相当于清屏操作)。
16. date命令用于显示或设置系统的时间与日期

参数 作用
%S 秒 (00~59)
%M 分钟 (00~59)
%H 小时
%I 小时
%m 月份
%p 显示出AM或PM
%a 缩写的工作日名称(例如:Sun)
%A 完整的工作日名称(例如:Sunday)
%b 缩写的月份名称(例如:Jan)
%B 完整的月份名称(例如:January)
%q 季度(1~4)
%y 简写年份(例如:20)
%Y 完整年份(例如:2020)
%d 本月中的第几天
%j 今年中的第几天 date “+%j”
%n 换行符(相当于按下回车键)
%t 跳格(相当于按下Tab键)
date “+%Y-%m-%d %H:%M:%S”
  1. wget命令用于在终端命令行中下载网络文件,英文全称为“web get”,语法格式为“wget [参数] 网址”。
wget命令 参数以及作用
-c 断点续传
-b 后台下载模式
-P 下载到指定目录
-t 最大尝试次数
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载
  1. ps命令用于查看系统中的进程状态,英文全称为“processes”,语法格式为“ps [参数]”
ps -a 进程状态
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程的所有者 进程ID号 运算器占用率 内存占用率 虚拟内存使用量(单位是KB) 占用的固定内存量(单位是KB) 所在终端 进程状态 被启动的时间 实际使用CPU的时间 命令名称与参数
  1. pstree命令用于以树状图的形式展示进程之间的关系,英文全称为“process tree”,输入该命令后按回车键执行即可。

  2. top命令用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。

    • 第1行:系统时间、运行时间、登录终端数、系统负载(3个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。

    • 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

    • 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“99.9 id”意味着有99.9%的CPU处理器资源处于空闲。

    • 第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。

    • 第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。

  3. nice命令用于调整进程的优先级,语法格式为“nice优先级数字 服务名称”

  4. ifconfig命令用于获取网卡配置与网络状态等信息,英文全称为
    “interface config”,语法格式为“ifconfig [参数] [网络设备]”。

    • 使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量(即下面加粗的信息内容):
  5. uname命令用于查看系统内核版本与系统架构等信息,英文全称为“unix
    name”,语法格式为“uname [-a]”。

    • uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分),负载值越低越好:
  6. who命令用于查看当前登入主机的用户终端信息,输入该命令后按回车键执行即可。

  7. last命令用于调取主机的被访记录,输入该命令后按回车键执行即可。.

  8. ping命令用于测试主机之间的网络连通性,语法格式为“ping [参数] 主机地址”

  9. tracepath命令用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为“tracepath [参数] 域名”。

  10. netstat命令用于显示如网络连接、路由表、接口状态等的网络相关信息,英文全称为“network status”,语法格式为“netstat [参数]”。

  11. history命令用于显示执行过的命令历史,语法格式为“history [-c]”。

    • 历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容:
  12. sosreport命令用于收集系统配置及架构信息并输出诊断文档,输入该命令后按回车键执行即可。

查找定位文件命令

chmod u+x test.ls
chmod g+wx test.ls
chmod o+x test.ls
这个chmod命令是change mode 的意思﹐第一行是为user 增加x 权限
第二行是为group 增加w 和x 权限
而第三行则是为others 增加x 权限﹐如果您这时候再使用ls -l 的话﹐您会看到test.ls 的权限会变成

rwxrwxr-x 这样的权限值了。我们使用“+”来增加权限﹐如果使用“-”是删除权限﹐如果使用“=”则是指定权限值。不过﹐您是否觉得这样输入命令很麻烦呢﹖ 有没用更方便的办法啊﹖ 答案是﹕有的﹗ 现在﹐请您输入这样的命令﹕
chmod 777 test.ls
  1. pwd命令用于显示用户当前所处的工作目录,英文全称为“print working directory”,输入该命令后按回车键执行即可。

  2. cd命令用于切换当前的工作路径,英文全称为“change directory”,语法格
    “cd [参数] [目录]”。

    这个命令应该是最常用的一个Linux命令了。可以通过cd命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd~”命令切换到当前用户的家目录,抑或使用“cd~username”命令切换到其他用户的家目录(就像在游戏中使用了“回城”技能一样)。例如,使用下述的cd命令切换进/etc目录中:
    
  3. ls命令用于显示目录中的文件信息,英文全称为“list”,语法格式为“ls [参数] [文件名称]”。

     所处的工作目录不同,当前工作目录下能看到的文件肯定也不同。使用ls命令的-a参数可以看到全部文件(包括隐藏文件),使用-l参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息:式为
    
  4. tree命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。

  5. find命令用于按照指定条件来查找文件所对应的位置,语法格式为“find [查找范围] 寻找条件”。

  6. locate命令用于按照名称快速搜索文件所对应的位置,语法格式为“locate文件名称”。

  7. which命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为“which命令名称”。

文本文件编辑命令

  1. cat命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”,语法格式为“cat [参数] 文件名称”。

  2. 显示档案的时候能够上下来回翻页﹐那就用less 命令吧。这样﹐您按Enter 或向下方向键﹐则往下卷动一行﹔按空白键或PageDown 则往下卷动一个荧幕﹔按向上方向键则往上卷动一行﹔按PageUp 则往上卷动一个荧幕。但是﹐用less 命令就算档案显示最后一行了﹐也不会自动结束﹐您得按Q键才能离开。

  3. more命令用于查看纯文本文件(内容较多的),语法格式为“more [参数] 文件名称”。

  4. head命令用于查看纯文本文件的前N行,语法格式为“head [参数] 文件名称”。

  5. tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为“tail [参数] 文件名称”。

  6. tr命令用于替换文本内容中的字符,英文全称为“transform”,语法格式为“tr [原始字符] [目标字符]”。

    • 在很多时候,我们想要快速地替换文本中的一些词汇,又或者想把整个文本内容都进行替换。如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用cat命令读取待处理的文本,然后通过管道符(详见第3章)把这些文本内容传递给tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:
  7. wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”,语法格式为“wc [参数] 文件名称”

  8. grep命令用于按行提取文本内容,语法格式为“grep [参数] 文件名称”。

  9. cut命令用于按“”提取文本内容,语法格式为“cut [参数] 文件名称”。

    • 一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按“列”搜索,不仅要使用-f参数设置需要查看的列数,还需要使用-d参数来设置间隔符号

    • cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,

    • cut的-d选项的默认间隔符就是制表符,而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符。

    • cut命令主要是接受三个定位方法:

      第一,字节(bytes),用选项-b

      第二,字符(characters),用选项-c

      第三,域(fields),用选项-f
      $ cat /etc/passwd|head -n 5|cut -d : -f 1

  10. 制表符(TAB),那么会显示为\t符号

  11. diff命令用于比较多个文件之间内容的差异,英文全称为“different”,语法格式为“diff [参数] 文件名称A 文件名称B”

在使用diff命令时,不仅可以使用--brief参数来确认两个文件是否相同,还可以使用-c参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:
  1. uniq命令用于去除文本中连续的重复行,英文全称为“unique”,语法格式为“uniq [参数] 文件名称”。
  2. sort命令用于对文本内容进行再排序,语法格式为“sort [参数] 文件名称”。
参数 作用
-f 忽略大小写
-b 忽略缩进与空格
-n 以数值型排序
-r 反向排序
-u 去除重复行
-t 指定间隔符
-k 设置字段范围

文件目录管理命令

  1. touch命令用于创建空白文件或设置文件的时间,语法格式为“touch [参数] 文件名称”。

  2. mkdir命令用于创建空白的目录,英文全称为“make directory”,语法格式为“mkdir [参数] 目录名称”。

  3. cp命令用于复制文件或目录,英文全称为“copy”,语法格式为“cp [参数] 源文件名称 目标文件名称”。

  4. mv命令用于剪切或重命名文件,英文全称为“move”,语法格式为“mv [参数] 源文件名称 目标文件名称”。

  5. rm命令用于删除文件或目录,英文全称为“remove”,语法格式为“rm [参数] 文件 名称”

  6. dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为“dd if=参数值of=参数值count=参数值bs=参数值”。

  7. file命令用于查看文件的类型,语法格式为“file文件名称”。

  8. tar命令用于对文件进行打包压缩或解压,语法格式为“tar参数 文件名称”。

    首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式的参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。刘遄老师一般使用“tar -czvf压缩包名称.tar.gz要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf压缩包名称.tar.gz”。下面我们逐个演示打包压缩与解压的操作,先使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:

管道命令符

同时按下键盘上的Shift+反斜杠(\)键即可输入管道符,其执行格式为“命令A | 命令B”
把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入”。

通配符 含义
* 任意字符
? 单个任意字符
[a-z] 单个小写字母
[A-Z] 单个大写字母
[a-Z] 单个字母
[0-9] 单个数字
[[:alpha:]] 任意字母
[[:upper:]] 任意大写字母
[[:lower:]] 任意小写字母
[[:digit:]] 所有数字
[[:alnum:]] 任意字母加数字
[[:punct:]] 标点符号

重要的环境变量

变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。

第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行,否则进入第2步继续判断。

第2步:Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。之前在使用rm命令删除文件时,Linux系统都会要求用户确认是否执行删除操作,其实这就是Linux系统为了防止用户误删除文件而特意设置的rm别名命令—“rm -i”。可以用alias命令来创建一个属于自己的命令别名,语法格式为“alias别名=命令”。若要取消一个命令别名,则是用unalias命令,语法格式为“unalias别名”。
 
第3步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令:# type echo

第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。
echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
PATH=$PATH:/root/bin
echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin

Vim文本编辑器

Vim的发布最早可以追溯到1991年,英文全称为Vi Improved。它也是Vi编辑器的提升版本,
“在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。
Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了3种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。要想高效地操作文本,就必须先搞清这3种模式的操作区别以及模式之间的切换方法(见图4-1)。

命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。

输入模式:正常的文本录入。

末行模式:保存或退出文档,以及设置编辑环境。

【LINUX计算机大白平凡学习linux之路】_第5张图片

在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作。而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在Vim中,无法直接从输入模式切换到末行模式。Vim编辑器中内置的命令有成百上千种用法,为了能够帮助读者更快地掌握Vim编辑器,表4-1总结了在命令模式中最常用的一些命令。

运行脚本

  1. 上面用Bash解释器命令直接运行Shell脚本文件外,# bash example.sh

  2. 第二种运行脚本程序的方法是通过输入完整路径的方式来执行 chmod u+x example.sh

     `./example.sh`
    

【LINUX计算机大白平凡学习linux之路】_第6张图片

【LINUX计算机大白平凡学习linux之路】_第7张图片
文件的可读、可写、可执行权限的英文全称分别是read、write、execute,可以简写为r、w、x,亦可分别用数字4、2、1来表示,文件所有者、文件所属组及其他用户权限之间无关联

1(x)+2(w)+4®

【LINUX计算机大白平凡学习linux之路】_第8张图片
文件权限的数字表示法基于字符(rwx)的权限计算而来,其目的是简化权限的表示方式。例如,若某个文件的权限为7,则代表可读、可写、可执行(4+2+1);若权限为6,则代表可读、可写(4+2)。我们来看一个例子。现在有这样一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;其他人只有可读的权限。那么,这个文件的权限就是rwxrw-r–,数字法表示即为764。不过大家千万别再将这3个数字相加,计算出7+6+4=17的结果,这是小学的数学加减法,不是Linux系统的权限数字表示法,三者之间没有互通关系。

减号是占位符,代表这里没有权限,在数字表示法中用0表示。也就是说,rw-转换后是420,r-x转换后是401,-w-转换后是020。然后,将这3组数字之间的每组数字进行相加,得出652,这便是转换后的数字表示权限。
将数字表示权限转换回字母表示权限的难度相对来说就大一些了,这里以652权限为例进行讲解。首先,数字6是由4+2得到的,不可能是4+1+1(因为每个权限只会出现一次,不可能同时有两个x执行权限);数字5则是4+1得到的;数字2是本身,没有权限即是空值0。接下来按照表5-6所示的格式进行书写,得到420401020这样一串数字。有了这些信息就好办了,就可以把这串数字转换成字母了,如图5-2所示。

大家一定要心中牢记,文件的所有者、所属组和其他用户的权限之间无关联。一定不要写成rrwwx----的样子,一定要把rwx权限位对应到正确的位置,写成rw-r-x-w-。

【LINUX计算机大白平凡学习linux之路】_第9张图片
【LINUX计算机大白平凡学习linux之路】_第10张图片

【LINUX计算机大白平凡学习linux之路】_第11张图片
包含了文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁盘大小、最后修改时间和文件名称等信息。通过分析可知,该文件的类型为普通文件,所有者权限为可读、可写(rw-),所属组权限为可读(r–),除此以外的其他人也只有可读权限(r–),文件的磁盘占用大小是34298字节,最近一次的修改时间为4月2日的0:23,文件的名称为install.log。

排在权限前面的减号(-)是文件类型(减号表示普通文件),新手经常会把它跟“无权限”混淆。尽管在Linux系统中一切都是文件,但是不同的文件由于作用不同,因此类型也不尽相同(有一点像Windows系统的后缀名)。常见的文件类型包括普通文件(-)、目录文件(d)、链接文件(l)、管道文件(p)、块设备文件(b)以及字符设备文件(c)。

普通文件的范围特别广泛,比如纯文本信息、服务配置信息、日志信息以及Shell脚本等,都属于普通文件。几乎在每个目录下都能看到普通文件(-)和目录文件(d)的身影。块设备文件(b)和字符设备文件(c)一般是指硬件设备,比如鼠标、键盘、光驱、硬盘等,在/dev/目录中最为常见。应该很少有人会对鼠标、键盘进行硬件级别的管理吧。

判断用户的参数

在这里插入图片描述
按照测试对象来划分,条件测试语句可以分为4种:

文件测试语句;

逻辑测试语句;

整数值比较语句;

字符串比较语句。
操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

下面使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则意味着它不是目录,或这个目录不存在:

[root@linuxprobe ~] [ -d /etc/fstab ]
[root@linuxprobe ~] echo $?
1
$0对应的是当前Shell脚本程序的名称,
$#对应的是总共有几个参数,
$*对应的是所有位置的参数值,
$?对应的是显示上一次命令的执行返回值,
而$1、$2、$3……则分别对应着第N个位置的参数值,

在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。
逻辑“或”它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份:
第三种逻辑语句是“非”,在Linux系统中的运算符号是一个叹号(),它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;原本测试错误的结果,则将其变成正确的。

叹号应该放到判断语句的前面,代表对整个的测试语句进行取反值操作,而不应该写成“$USER != root”,因为“!=”代表的是不等于符号(≠),尽管执行效果一样,但缺少了逻辑关系,这一点还请多加注意。

&&是逻辑“与”,只有当前面的语句执行成功的时候才会执行后面的语句。
||是逻辑“或”,只有当前面的语句执行失败的时候才会执行后面的语句。
!是逻辑“非”,代表对逻辑测试结果取反值;之前若为正确则变成错误,若为错误则变成正确。

进一步学习资料

linux命令行文本操作一文就够

你可能感兴趣的:(Linux,linux)