目录

注:该书是关于RPM的,但前面的基础部分也很有帮助。

稻盛和夫《活着》:

  工作马马虎虎,只想在兴趣和游戏中寻觅快活,充其量只能获得一时的快感,绝不能尝到从心底涌出的惊喜和快乐,但来自工作的喜悦并不像糖果那样——放进嘴里就甜味十足,而是需要从劳苦与艰辛中渗出。因此当我们聚精会神,孜孜不倦,克服艰辛后的成就感,世上没有哪种喜悦可以类比。
   更何况人类生活中工作占据了较大的比重,如果不能从劳动中、工作中获得充实感,那么即使从别的地方找到快乐,最终我们仍然会感到空虚和缺憾。

一、前言

1、Linux概念

  • Linux系统内核:一个由Linux Torvalds负责维护,提供硬件抽象层、硬盘及文件系统控制和多任务功能的系统核心程序。

    Linux系统内核负责完成对硬件资源的分配、调度等管理任务。

  • Linux发行套件系统:Linux操作系统,即Linux系统内核与各种常用软件的集合产品。

2、RPM(红帽软件包管理器)

常用RPM软件包命令:

rpm -ivh filename.rpm % 安装软件
rpm -Uvh filename.rpm % 升级软件
rpm -e filename.rpm % 卸载软件
rpm -qpi filename.rpm % 查询软件描述信息
rpm -qpl filename.rpm % 列出软件文件信息
rpm -qf filename % 查询文件属于哪个RPM

3、Yum软件仓库

RPM只能帮助查询软件的依赖关系,安装仍得由用户自行完成。

Yum软件仓库不仅可以分析依赖关系,还可以自动下载软件包并安装到系统。

常用Yum命令见P26。

二、常用Linux命令

1、Shell

Linux系统中有些图形化工具虽然好,但本质上是调用脚本来完成相应的工作,目的性强,缺乏Linux命令原有的灵活性及可控性,并且更消耗资源。

Shell(终端或壳)就是一个命令行工具,充当人与内核(硬件)的翻译官。

现在包括红帽系统在内的许多Linux系统都默认使用Bash解释器。主要有4大优势:

  • 可以上下键调取历史命令。

  • 可以Tab补全。

  • 具有强大的批处理脚本。

  • 具有实用的环境变量功能。

2、命令基本格式和man命令

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

三者一定要用一个或多个空格分开。

  • 命令对象:要处理的文件、目录或用户等资源。

  • 命令参数:
    可以使用长格式(完整的选项名称),用--作为前缀,如man --help
    也可以使用短格式(单个字母的缩写),用-作为前缀,如man -h
    长格式不能合并,长、短格式不能合并,短格式可以合并,并且只保留一个-即可。

man+命令名称 可以查看该命令的帮助信息。如执行:man man,查看man命令的帮助信息。

帮助信息包括11项,详见P33。

3、常用系统工作命令

echo命令

用于在终端输出字符串或变量提取后的值。

  • echo 字符串
echo Hello world!
  • echo $变量
echo $SHELL % 提取变量SHELL的值,并输出到屏幕上。

date命令

可以按指定格式显示系统时间或日期,多用于按日期打包文件。

date % 默认输出
date "+%Y-%m-%d %H:%M:%S" % 年-月-日 小时:分钟:秒
date "+%j" % 今年的第几天

注意指定格式前都有+号。

reboot命令

只能由root管理员执行的重启操作。

poweroff命令

只能由root管理员执行的关机操作。

wget命令

用于在终端中下载网络文件。

wget [参数] 下载地址
参数见P35。

% 递归下载www.xxx.com网站内所有页面数据及文件,自动保存到同名目录中。
wget -p -r http://www.xxx.com

ps命令

查看系统中的进程状态。

ps [参数]
输出的参数很多,一般和管道符结合使用,获取特定信息,比如PID。
由于短格式可以合并,且ps允许不加-,因此可以写成ps aux。

pidof命令

查询某个指定服务进程的PID值。

pidof [参数] [服务名称]

pidof sshd % 查询本机上sshd服务程序的PID

top命令

相当于强化版的Windows任务管理器,可以动态查看系统运维状态。

kill命令

终止某进程。

kill [参数] [进程PID]

killall命令

复杂的软件服务一般会有多个进程,因此killall可以一次性解决多个进程。

killall [参数] [进程名称]

立即结束进程或后台运行 ⭐⭐⭐

  • 如果我们在终端中执行了一个命令后,想立即停止,可以按下Ctrl+C,即可立即结束该命令的进程。
  • 如果有些进程会不断输出信息,影响后续操作,可以在执行命令时在末尾添加 & 符号,使之后台运行。

4、系统状态检测命令

uname命令

查看系统内核名称、版本等信息。

uname -a

uptime命令

查看系统负载信息。负载值越低越好,一般不要长期大于1,生产环境下不要大于5。

uptime

free命令 ⭐⭐⭐

显示当前内存使用情况。

free -h

who命令

查看当前登入主机的用户终端信息。

history命令

显示历史1000条命令

history
history  -c % 清空
!num %执行某条历史命令

5、工作目录切换命令

pwd命令

显示当前工作目录

cd命令

切换目录

cd [目录名称]

cd - % 返回上一次所处目录
cd .. % 返回上一级目录
cd ~ % 切换到当前用户home目录

ls命令

显示目录中的文件信息。

ls [选项] [文件]
-a:查看全部文件(包括隐藏文件)。
-l:查看文件属性、大小等详细信息。
-ld:查看该目录的属性、大小等。

6、文本文件编辑命令

cat命令

用于查看内容较少的纯文本文件。

cat [选项] [文件]
cat -n % 显示行号

more命令

用于查看内容较多的纯文本文件。
在最下面有百分比提示阅读了多少内容;可以使用空格或回车向下翻页。

tr命令

借助cat和管道符命令,替换特定字符。

cat anaconda -ks.cfg | tr [a-z] [A-Z] % 把该文档的英文全部大写

wc命令

用于统计制定文本的行数、字数、字节数

wc [参数] 文本文件

wc -l /etc/passwd % 只显示行数,即统计有多少个用户

7、文件目录管理命令

mkdir命令

创建空白的目录

mkdir [选项] 目录

mkdir test
mkdir -p test1/test2/test3 % 创建嵌套目录

cp命令

复制文件或目录

cp [选项] 源文件 目标文件
如果目标是目录,就会把文件复制到目录中;
如果目标是文件,就会询问是否覆盖;
如果目标文件不存在,则直接复制。
选项见P52。

mv命令

剪切文件,或将文件重命名。

mv [选项] 源文件 [目标路径 or 目标文件名]
不同于复制,剪切会把源文件删除;在同一目录下剪切,等效于重命名。

rm命令

删除文件或目录

rm [选项] 文件
一般会询问是否删除,加上-f可以强制删除。
删除目录必须加-r

file命令

用于查看文件类型。

file 文件名

8、打包压缩与搜索命令⭐⭐⭐

tar命令

对文件进行打包压缩或解压。

tar [选项] [文件]
参数见P54

有一些压缩过程非常长,建议用-v参数,实时反馈解压或压缩过程。
建议使用:
tar -czvf 压缩包名称.tar.gz 要打包的目录
tar -xzvf 压缩包名称.tar.gz

tar -czvf etc.tar.gz /etc % 把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz

mkdir /root/etc
tar xzvf etc.tar.gz -C /root/etc % 解压到/root/etc

grep命令

在文本中搜索关键词。

grep [选项] [文件]
参数见P55。
-n:显示目标行号
-v:反选信息,即选择不含该目标的其他所有行。

find命令

按指定条件查找文件。

find [查找路径] 寻找条件 操作
参数见P56。
-exec:把find结果交给随后的命令处理。虽然是长格式,也用一个-。

三、管道符、重定向与环境变量

1、输入输出重定向

输入重定向:把文件导入到命令中。

标准输入重定向STDIN(文件描述符为0):默认从键盘输入,也可以从其他文件或命令中输入。

输出重定向:把原本要输出的屏幕的数据信息写入指定文件。

标准输出重定向STDOUT(文件描述符为1,可省略):默认输出到屏幕。
错误输出重定向STDERR(文件描述符为2,必须写):同上。

重定向中用到的符号及其作用见P61。

例:我们知道,man bash命令会输出bash的帮助文档(到屏幕)。我们现在要把该信息写入readme.txt。

man bash > readme.txt
cat readme.txt % 显示内容
echo "See u~" >> readme.txt % 不清空,追加

例2:执行某个Shell脚本时,将报错信息记录下来,以便于排错。

ls -l xxxxxx 2> /root/stderr.txt
cat /root/stderr.txt

例3:利用输入重定向,将readme.txt文件导入,交给wc -l命令统计行数。

wc -l < readme.txt

例4:利用输入重定向,让用户一直输入邮件内容,直至over。

mail -s "Readme" root@linuxprobe.com << over

2、管道命令符

例:从屏幕读入新密码,用passwd修改。

echo "newpasswd" | passwd --stdin root % 修改root的密码。

3、命令行的通配符

ls -l /dev/sda* % 匹配所有/dev目录中以sda开头的文件,后面是零个或多个字符皆可
ls -l /dev/sda? % 以sda开头,后面跟一个任意字符
ls -l /dev/sda[0-9] 后面一个字符是0到9中的某个数字
ls -l /dev/sda[135] 后面一个字符是1、3、5中的某个数字

4、重要的环境变量

命令在Linux中的执行分为4个步骤:

  1. 判断是否以绝对路径或相对路径的方式输入命令。如果是,直接执行。

  2. 检查命令是否为“别名命令”。

    可以用"alias 别名=命令"来创建别名,也可以用"unalias 别名"来取消别名。
    rm就是一个别名,实现了二次确认功能。

  3. Bash解释器判断是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行。否则进入第四步。

  4. 系统在多个路径中查找用户输入的命令文件。

    定义这些路径的变量叫PATH。PATH由多个路径组成,用:间隔:
    说白了就是:PATH设定了解释器搜索所执行命令的路径。
    P67例为添加/root/bin路径到PATH变量中。
    虽然将当前路径.添加到PATH中会很方便,但会很危险。比如木马文件伪装成ls或cd命令,放在公共目录/tmp中,那么木马文件会被轻易执行。

Linux系统中最重要的10个环境变量见P68。

Linux作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境。
因此,一个相同的变量,在不同用户下的值不同。

有时要输入一个较深的路径比较麻烦,我们可以赋给一个变量:

mkdir /home/workdir
DIR=/home/workdir % 不要加空格
cd $DIR
pwd

如果希望改变量全局可用,需要声明:

export DIR
su linuxprobe
cd $DIR
pwd

四、Vim编辑器与Shell命令脚本

在Linux系统中一切都是文件;配置一个服务就是在修改其配置文件的参数。

Vim编辑器三大模式:

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

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

  • 底行模式:保存或退出文档,设置编辑环境。

切换方法见P71。注意,输入模式和底行模式之间必须通过命令模式。

Shell脚本是用户和Linux系统的通信媒介。其工作方式有两种:

  • 交互式Interactive:用户输入一条命令即执行。

  • 批处理Batch:用户事先写好一个完整的Shell脚本,Shell一次性执行脚本的诸多命令。

编写例子见P81。

五、用户身份与文件权限

root管理员

root管理员是存在于所有类UNIX系统中的超级用户。它可以添加/删除用户,启动/关闭进程等。但如果误操作,会毁掉系统。

passwd命令

一般用户只能用passwd修改自身的密码,而root管理员可以修改其他所有人的密码,而且不需要验证旧密码。

sudo命令

sudo给予普通用户额外的权限,来完成原本root管理员才能完成的任务。具体权限见P109。

六、存储结构与磁盘划分

在Linux系统中,目录、字符设备、块设备、打印机等都被抽象成了文件。

在Linux中,一切文件都从根(/)目录开始,并按照文件系统层次化标准FHS采用树形结构存放。
FHS是一种经验规则,不是强制要求的。常用目录和相应内容见P114。

注意,Linux中的文件和目录名称是严格区分大小写的,且文件名称中不得包含斜杠。

  • 绝对路径:从根目录开始写起的文件或目录名称。

  • 相对路径:相对于当前路径的写法。

/home目录和/root目录都存放家目录数据。但/root目录存放的是root管理员的家目录数据。

Reading | 《Linux就该这么学》的更多相关文章

  1. Reading C type declarations(引用http://unixwiz.net/techtips/reading-cdecl.html)

    Even relatively new C programmers have no trouble reading simple C declarations such as int foo[5]; ...

  2. Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:9001/api/size/get. (Reason: CORS header 'Access-Control-Allow-Origin' missing).

    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http:/ ...

  3. Git Learning - By reading ProGit

    Today I begin to learn to use Git. I learn from Pro Git. And I recommend it which is an excellent bo ...

  4. MySQL远程连接丢失问题解决方法Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0

    最近远程连接mysql总是提示 Lost connection 很明显这是连接初始化阶段就丢失了连接的错误 其实问题很简单,都是MySQL的配置文件默认没有为远程连接配置好,只需要更改下MySQL的配 ...

  5. 论文阅读(Weilin Huang——【AAAI2016】Reading Scene Text in Deep Convolutional Sequences)

    Weilin Huang--[AAAI2016]Reading Scene Text in Deep Convolutional Sequences 目录 作者和相关链接 方法概括 创新点和贡献 方法 ...

  6. Flesch Reading Ease -POJ3371模拟

    Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Description Flesch Reading Ease, a reada ...

  7. Mac下遇到 'reading initial communication packet’ 问题

    今天在开发过程中,一个单位跑的好好的项目,在家中的Mac下运行时,遇到了下面这个错误:   "Lost connection to MySQL server at 'reading init ...

  8. A log about Reading the memroy of Other Process in C++/WIN API--ReadProcessMemory()

    Memory, is a complex module in Programing, especially on Windows. This time, I use cpp with win wind ...

  9. Error: Cannot open main configuration file '//start' for reading! 解决办法

    当执行service nagios start启动nagios时,报错:Error: Cannot open main configuration file '//start' for reading ...

  10. Spring mvc 中使用ftl引用共通文件出错 FreeMarker template error: Error reading included file "/WEB-INF/ftl/common/errormessage.ftl"

    初次接触spring mvc,想做一个小的练习项目,结果在ftl文件中引用其它的共通ftl文件时出错.

随机推荐

  1. [UnityAPI]SerializedObject类 & SerializedProperty类

    以Image类为例 1.MyImage.cs using UnityEngine; using UnityEngine.UI; public class MyImage : Image { ; pro ...

  2. kettle实现多表同步

    本样例实现源库的所有表到目标库的同步sqlserver=>mysql(目标表存在表结构则同步),总调度如下: 由于复制记录到结果保存了多个表名,存在多个值,在高级选择对每个输入行执行一次进行循环 ...

  3. python——数字问题之_ 变量

    在交互模式中,最后被输出的表达式结果被赋值给变量 _ ._ 变量应被用户视为只读变量 >>> a=12/2.3 >>> b=1.2 >>> a*b ...

  4. js程序的调试方法

  5. mysql 库 表 和 时间查询

    -- 查询 worker 库中 表 和 视图 select table_name from information_schema.tables where table_schema='worker' ...

  6. Java学习笔记(十三):package关键字

  7. VMware12上安装CentOS7无法上网问题

    常安装使用VMware的搭建集群环境,VMare安装后虚拟机默认的是自动获取IP,有时候用的过程中突然XSHELL中断或者需要固定IP上网,遇到几次居然,但忘了步骤,总结一下,省的每次去找资料 环境配 ...

  8. Handler实现消息的定时发送

    话不多说,直接上代码 private Handler mHandler = new Handler() { @Override public void handleMessage(Message ms ...

  9. 算法练习LeetCode初级算法之链表

    删除链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne ...

  10. Eclipse 创建Android 模拟器失败:no cpu/abi system image available for this target

    (从网上搜了一个使用Android 4.4 API 20编译的图片) 这是因为SDK中没有模拟器使用的操作系统镜像. 如果项目使用API 19编译,则SDK中的system-images文件夹下,需要 ...