引言
- 人们说,“图形用户界面让简单的任务更容易完成, 而命令行界面使完成复杂的任务成为可能”,到现在这句话仍然很正确。
学习 shell
第二章:什么是shell
shell是一个程序,接受命令,然后让操作系统去执行。
- sh和bash区别:bash 是最初 Unix 上由 Steve Bourne 写成 shell 程序 sh 的增强版。
- 终端仿真器:另一个和 shell 交互的叫做终端仿真器的程序
- #和$区别:
#表示有超级管理员权限。
第三章:文件系统中跳转
-
pwd: print working directory(的缩写))命令,来显示当前工作目录。
-
当我们首次登录系统(或者启动终端仿真器会话)后,当前工作目录是我们的家目录。 每个用户都有他自己的家目录,当用户以普通用户的身份操控系统时,家目录是唯一 允许用户写入文件的地方。
-
相对与绝对路径: 绝对路径开始于根目录,用 / 开始,相当路径开始于当前目录,用 . 或者 .. 来表示。
./ 用来表示当前目录,在几乎所有的情况下,你可以省略 ./ ,它是隐含的,如果不指定一个文件的路径,那它被默认为在当前工作目录下。 -
cd快捷键
平时我们登陆linux后的目录就是家目录
关于文件名的重要规则
-
以 “.” 字符开头的文件名是隐藏文件。这仅表示,ls 命令不能列出它们, 用 ls -a 命令就可以了。当你创建帐号后,几个配置帐号的隐藏文件被放置在 你的家目录下。稍后,我们会仔细研究一些隐藏文件,来定制你的系统环境。 另外,一些应用程序也会把它们的配置文件以隐藏文件的形式放在你的家目录下面。
-
文件名和命令名是大小写敏感的。文件名 “File1” 和 “file1” 是指两个不同的文件名。
-
Linux 没有“文件扩展名”的概念,不像其它一些系统。可以用你喜欢的任何名字 来给文件起名。文件内容或用途由其它方法来决定。虽然类 Unix 的操作系统, 不用文件扩展名来决定文件的内容或用途,但是有些应用程序会。
-
虽然 Linux 支持长文件名,文件名可能包含空格,标点符号,但标点符号仅限 使用 “.”,“-”,下划线。最重要的是,不要在文件名中使用空格。如果你想表示词与 词间的空格,用下划线字符来代替。过些时候,你会感激自己这样做
第四章:探究操作系统
-
ls — 列出目录内容
除了当前目录以外,还可以指定别的目录,也可以指定多个目录[root@localhost /]# ls /home/ /usr/ /home/: ceshi ceshi2 ceshi3 docker-test mysql mysql5.7 /usr/: bin etc games include lib lib64 libexec local sbin share src tmp
选项和参数:
command -options arguments
深入研究长格式输出:
-
file — 确定文件类型
-
less — 浏览文件内容
-
系统目录介绍
第五章:操作文件和目录
cp — 复制文件和目录
cp item... directory
支持多个目录或文件移动到一个目录
cp不加参数默认复制的是文件,而非目录。递归的复制文件目录需要加 -a或者-r 。
通配符 :
mv — 移动/重命名文件和目录
mv item... directory
把一个或多个条目从一个目录移动到另一个目录中。
mkdir — 创建目录
rm — 删除文件和目录
rm item...
item代表一个或多个文件或目录。
ln — 创建硬链接和符号链接
符号链接: 可以链接文件或者目录
简单地加上-s选项就可以创建一个符号链接,不加-s为硬链接
[root@localhost playground]# ln -s dir1 dir1-sym
[root@localhost playground]# ls
dir1 dir1-sym dir2 fun fun-hard fun-sym
[root@localhost playground]#
第六章:使用命令
type – 说明怎样解释一个命令名
which – 显示会执行哪个可执行程序
man – 显示命令手册页
apropos – 显示一系列适合的命令
info – 显示命令 info
whatis – 显示一个命令的简洁描述
alias – 创建命令别名
第七章:重定向
-
快速清空或者创建文本
$ > ls-output.txt
。 -
当我们使用 “>” 重定向符来重定向输出结果时,目标文件总是从开头被重写,使用”>>“操作符,将导致输出结果添加到文件内容之后。
-
我们使用单单一个表示法 &> 来重定向标准输出和错误到文件
ls -l /bin/usr222 &> ls-output.txt
-
管道命令: 上一个命令的输出作为下一个命令的输入。
-
grep : 是个很强大的程序,用来找到文件中的匹配文本并且打印匹配行。这样使用 grep 命令:
# ps -ef命令查询出来的结果,作为参数传递给下一个命令grep
[root@localhost ~]# ps -ef | grep ess-news
root 10692 10629 0 10:32 pts/2 00:00:00 grep --color=auto ess-news
root 11911 1 1 May25 ? 00:16:43 /usr/local/jdk1.8/bin/java -jar -Xms256m -Xmx256m -Duser.timezone=Asia/shanghai /apphome/service/ess-news-web.jar --namespace=test
root 32487 1 0 May11 ? 02:38:47 /usr/local/jdk1.8/bin/java -jar -Xms256m -Xmx256m -Duser.timezone=Asia/shanghai /apphome/service/ess-news-job.jar --namespace=test
[root@localhost ~]#
第九章:键盘高级操作技巧
- history | grep /usr/bin :给历史记录增加了搜索的条件
- 对于history,可以通过Ctrl-r来启动增量搜索
第十章:权限
id – 显示用户身份号
chmod – 更改文件模式
umask – 设置默认的文件权限
su – 以另一个用户的身份来运行 shell
sudo – 以另一个用户的身份来执行命令
chown – 更改文件所有者
chgrp – 更改文件组所有权
passwd – 更改用户密码
adduser - 添加用户
useradd
groupadd 添加用户组
第十一章:进程
ps – 报告当前进程快照
top – 显示任务
jobs – 列出活跃的任务
bg – 把一个任务放到后台执行
fg – 把一个任务放到前台执行
kill – 给一个进程发送信号
killall – 杀死指定名字的进程
shutdown – 关机或重启系统
配置文件和 shell 环境
第十二章:shell环境
* printenv : 打印部分或所有的环境变量
* set : 设置shell选项
* export : 导出环境变量,让随后执行的程序知道
* alias - 创建命令别名
- 登录 shell 会读取一个或多个启动文件
- source:修改了配置文件需要及时生效
第十三章:vi简介
- 有一个古老的笑话,说是一个在纽约的游客向行人打听这座城市中著名古典音乐场馆的方向。
游客: 请问一下,我怎样去卡内基音乐大厅?
行人: 练习,练习,练习 - 使用vi有三种模式: 命令模式、插入模式、末行模式
- 命令模式下可以通过 / 来进行模糊搜索,然后通过n来循环查找;
- :q 退出
- :q! 强制提出
- :w 保存
- :wq 退出保存
第十四章:自定制shell提示符
主要讲了如何自定义登录后的 [root@localhost ~]#
操作。
常见任务和基本工具
第十五章:软件包管理
- 主要讲了软件安装包技术主要由两种工具类型组成: 底层和上层工具。根据发行版本的不同,底层工具不一样,如图所有基于 Red Hat 风格的发行版都依赖于相同的底层程序(rpm),如CentOS,上层是yum。
- 底层工具(rpm)通过软件包文件来安装,而上层工具是通过从资源库中下载了一个软件包来安装。
第十六章 : 存储媒介
第十七章 : 网络系统
- ping - 发送 ICMP ECHO_REQUEST 数据包到网络主机
- ftp - 因特网文件传输程序
- wget - 非交互式网络下载器
- ssh - OpenSSH SSH 客户端(远程登录程序)
第十八章 : 查找文件
- locate – 通过名字来查找文件
- find – 在一个目录层次结构中搜索文件
第十九章 : 归档和备份
第二十章 : 正则表达式
linux查找文件支持正则表达式
第二十四章 : 编译程序
- 什么是编译?
编译就是把源代码翻译成机器可以读懂的语言。 - 所有的程序都是可编译的吗?
编写 Shell 脚本
第二十五章 : 编写第一个 Shell 脚本
# #!字符序列是一种特殊的结构叫做 shebang。 这个 shebang 被用来告诉操作系统将执行此脚本所用的解释器的名字
#!/bin/bash
# this is a demo
echo 'hello shell'!
保存文件,名字叫hello
[root@localhost ~]# hello #会从$PATH里找
-bash: hello: 未找到命令
[root@localhost ~]# ./hello #./表示当前目录
hello shell!
第12章,我们讨论了 PATH 环境变量及其在系统 查找可执行程序方面的作用。回顾一下,如果没有给出可执行程序的明确路径名,那么系统每次都会 搜索一系列的目录
第二十六章 : 启动一个项目
command可以为任何linux命令,cat时就输出…
编辑文件
输出:
第二十七章 : 自顶向下设计
先确定上层步骤,然后再逐步细化这些步骤的过程被称为自顶向下设计。这种技巧允许我们 把庞大而复杂的任务分割为许多小而简单的任务。自顶向下设计是一种常见的程序设计方法, 尤其适合 shell 编程。
#!/bin/bash
# Program to output a system information page
TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME=$(date +"%x %r %Z")
TIME_STAMP="Generated $CURRENT_TIME, by $USER"
report_uptime () {
return
}
report_disk_space () {
return
}
report_home_space () {
return
}
cat << _EOF_
<HTML>
<HEAD>
<TITLE>$TITLE</TITLE>
</HEAD>
<BODY>
<H1>$TITLE</H1>
<P>$TIME_STAMP</P>
$(report_uptime)
$(report_disk_space)
$(report_home_space)
</BODY>
</HTML>
_EOF_
…
后面都是教我们如何使用if while for…
最后感谢作者、翻译…确实对Linux有了一点了解,希望能学之用之