快乐的Linux命令行--读书笔记1

相信很多没有系统了解过Linux的小伙伴会和我一样,在按照教程进行某些环境配置类工作时,遇到一些看上去令人一脸懵逼看不出意思的英文缩写组成的linux命令,并且经常对于linux系统的组织结构和操作方式感到迷惑,所以为了对Linux系统有更多理解,我就去看了一下相关资料,发现豆瓣上很多人推荐这本书,自己看过也觉得作为Linux系统的入门挺不错的,推荐类似小伙伴可以去读一下。

chap01-03

01 引言

Linux系统代表‘自由’,可以给你一台没有任何秘密的计算机,你可以了解它的一切。

为什么要学习命令行:
  1. “图形用户界面让简单的任务更容易完成, 而命令行界面使完成复杂的任务成为可能”
  2. 学习 Linux 命令行会让你受益匪浅,给你极大的回报。如果你认为, 现在你已经是高手了。别急,其实你还不知道什么才是真正的高手。不像其他一些计算机技能, 一段时间之后可能就被淘汰了,命令行知识却不会落伍,你今天所学到的,在十年以后, 都会有用处。命令行通过了时间的考验。

chap02 什么是 shell

启动shell时会出现[me@linuxbox ~]$,通常包含用户名、主机名、工作目录、$ 符号。如果不是 $ 而是 # 代表当前用户有超级管理员权限

复制粘贴技巧:

按下鼠标左键,沿着文本拖动鼠标(或者双击一个单词)高亮了一些文本, 那么这些高亮的文本就被拷贝到了一个由 X 管理的缓冲区里面。然后按下鼠标中键, 这些文本就被粘贴到光标所在的位置。

命令

date --- 输出Thu Oct 25 13:51:54 EDT 2007

cal --- 输出当月日历

df --- 输出磁盘剩余空间数量

free --- 显示空闲内存的数量

chap03 文件系统中跳转

命令

pwd --- print working directory 打印当前目录路径

cd --- change directory

ls --- list direcotry contents

绝对路径 相对路径

相对路径:.. 代表父级目录,. 代表当前目录,.可以省略

快捷键

cd --- 切换到用户的home目录

cd - --- 切换到先前的工作目录

cd ~user_name --- 切换到用户的home目录,如 cd ~bob 会切换到bob的home目录

chap04 探究操作系统

4.1命令:

ls:

ls -l   以长模式输出

ls -t   按文件修改时间的顺序输出

ls -lt  

ls -t --reverse     按时间逆序排列

ls -a   显示全部文件,包括.开头的隐藏文件;

ls -lh  以人易读的格式来显示文件大小

ls -S   以文件大小排序

ls /usr     列出别的目录下的文件

ls ~ /usr   列出多个目录下的文件

ls -i   展示文件索引节点信息,`ls -li` 可以用来判断硬链接
复制代码

对目录使用ls -l会打印出类似内容-rw-r--r-- 1 root root 358374 2007-04-03 11:05 ubuntu Sax.ogg 开头的“-”说明是一个普通文件,“d”表明是一个目录,“l”表示是一个软链接,symlink

file --- 确定文件类型 file add.png ==》 add.png: PNG image data, 64 x 64, 8-bit/color RGBA, interlaced

less --- 浏览文本文件内容 q退出, /a 搜索a字符 页面调度器程序,允许以以逐页方式轻松浏览长文本文档

4.2文件系统

/       根目录

/boot   包含 Linux 内核、初始启动加载程序等

/bin    binaries缩写,以bin命名的文件夹都是放二进制可执行程序的,/bin是系统运行所需的二进制程序,/usr/bin系统安装的可执行程序

/etc    放系统层面的配置文件

/home   分配给用户的可读写目录,普通用户只能在自己的home目录下修改

/root   root账户的home目录,理解为管理员的home目录

/sbin   s代表system,包含“系统”二进制文件,重大系统任务的程序,通常为超级用户保留

/tmp    临时文件保存的目录
复制代码

/usr unix system resource,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件

/usr/bin    系统安装的可执行程序
/usr/lib    上面所有程序所共用的库
/usr/local  用户安装程序时的安装目录,由源码编译的程序会安装在/usr/local/bin 目录下,一个新系统没安装程序之前这个目录为空
/usr/share  /usr/bin中的程序使用的共享数据, 包括配置文件、图标、音频等
/usr/share/doc  安装的软件包会包含一些文档,存放按照软件包分类的文档。

/var        存放动态文件,各种数据库,假脱机文件,用户邮件等等。上述目录除了/tmp 和/home 目录,其他都是静态的,内容不会改变。
/var/log    包含日志文件、各种系统活动的记录,这些文件非常重要,并且应该时时监测它们,其中最重要的一个文件是/var/log/messages。有时只有超级用户才能查看这些日志文件。
复制代码

完整的 Linux 文件系统层次体系标准可通过以下链接找到: !http://www.pathname.com/fhs/

/etc 文件名的意思: 一种说法,是et cetera。这个是老一点的说法,就是说,不管什么数据或文件,只要不属于其它目录的,零零碎碎就放在/etc目录下。 另一种说法,"Editable Text Configuration":很多人也把/etc目录看成是一个放置我们系统程序的配置文件的地方。所以常看到这样的目录介绍

4.3符号链接

lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so 以 l 开头,表示这个文件是一个符号链接,也叫软连接或symlink,它表示对实际文件的一个引用,当多个程序都引用某一个文件时,文件名中维护者版本号,当文件升级时,需要修改所有引用到的地方,使用软链接就可以把原来的软链接删除,再创建一个同名但引用新版本文件的软链接即可。这个链接名为libc.so.6,实际指向的是libc-2.6.so文件。

chap05 操作文件和目录

常用命令

cp — 复制文件和目录
    选项:-a 同时复制属性;  -r 递归复制目录内容;  -i 交互式复制,如将覆盖文件会提示; -u 更新式复制; -v 显示操作详细信息
mv — 移动/重命名文件和目录
    选项:-i  -u  -v
mkdir — 创建目录
rm — 删除文件和目录
    选项:-i 交互式;  -r 递归式;  -f 强制性;  -v 冗余式
    **注意:** rm 删除不可复原,所以要小心。当使用rm 删除带通配符的目录时,一个避免误删除的操作是,先使用ls 测试一下通配符,再执行rm。

ln — 创建硬链接和符号链接
创建硬链接:`ln file link`
创建软链接:`ln -s file link`
复制代码

硬链接 - 不能关联它所在的文件系统之外的文件,即它不能关联别的磁盘分区上的文件 - 不能关联一个目录 - 硬链接本身与文件没有区别,一个硬链接本身就是一个文件。 - 每个文件默认会有一个硬链接

软链接 - 相当于windows中的快捷方式; - 一个符号链接指向一个文件; - 往符号链接里面写入东西,那么相关联的文件也被写入; - 删除符号链接时,只有链接被删除,而不是文件自身; - 如果先于符号链接 删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为 坏链接。

通配符

\* - 匹配任意字符
? - 匹配1个字符
[abc] - 匹配属于字符集abc的字符 [a-z][A-Z]
[!abc] - 匹配除a、b、c外的字符
[[:class:]] - 匹配字符类
复制代码

字符类

[[:alnum:]] - 匹配任一个字母或数字
[[:alpha:]] - 匹配任一个字母
[[:digit:]] - 匹配任一个数字
[[:lower:]] - 匹配任一个小写字母
[[:upper:]] - 匹配任一个大写字母
复制代码

chap06 使用命令

命令 文档帮助类的命令

type - 显示命令属于哪一种类型:可执行程序、shell builtin 命令、shell 函数、别名
which - 显示可执行程序类型命令 的程序  的路径位置

man     - 显示命令的手册:`man ls`。`man 5 passwd`:查看passwd命令手册的第五章节的内容
apropos - 在手册中搜索给定的关键字,`apropos xxx` 等同于 `man -k xxx`
info    - 显示程序的info条目,类似man,采用info 阅读器程序显示内容,info页是超级链接形式的,和网页很类似:`info coreutils`
whatis  - 显示命令的简洁描述

help    - 显示shell builtin 类型命令的帮助手册: help cd,  将输出`cd: cd [-L|-P] [dir]` 其中竖线| 表示互斥
--help  - 一些可执行程序类型的命令支持一个help 选项:mkdir --help

alias   - 创建命令别名:alias foo='xxxxxxx'。 不带参数的alias 将打印出系统所有的别名
unalias - 删除命令别名: unalias foo
复制代码

README文档: 许多程序在/usr/share/doc/下有自己的文档文件,大部分是文本格式,可以用less程序查看;.gz结尾的文件是经过gzip压缩过的,其中的文本文档可以使用zless查阅,zless是gzip软件包里的特殊的less版本,可以显示由 gzip 压缩的文本文件的内容。

info阅读器程序命令:

?      - 显示命令帮助
PgUp    - 显示上一页
PgDn    - 显示下一页
n       - next 显示下一个节点
p       - prev 显示上一个节点
u       - up 显示父节点,通常是个菜单
q       - quit 退出阅读器
复制代码

超链接通过它开头的星号来辨别,把光标放在上面并按下 enter 键,就可以激活它

用alias 创建你自己的命令

创建之前先用type测试命令名是否已有 type foo ==> bash: type: foo: not found alias foo='cd /usr; ls; cd -' foo

这样会先后执行cd /usr; ls; cd -这三句命令 type foo ==> foo is aliased to 'cd /usr; ls ; cd -'

在命令行中定义的别名, shell 会话结束时,它们会消失

chap07 重定向

I/O重定向

"I/O重定向",可以重定向命令的输入和输出,命令的输入来自文件,输出也存到文件,可以把多个命令连接起来组成一个强大的命、令管道。

标准输入、输出和错误

程序会产生两种输出:1,程序运行结果,也就是程序要完成的功能;2,我们得到的状态和错误信息,这些告诉我们程序的进展。与Linux的主题“Everything is a file”一致,程序,比如说ls,会把运行结果输送到一个叫做标准输出的文件(用stdout表示),把错误信息输送到一个标准错误文件(用stderr表示)。默认情况下,标准输出和标准错误都连接到屏幕,而不是保存到磁盘。此外许多程序从标准输入设备(stdin)获取信息,默认情况下,标准输入连接到键盘。重定向命令可以更改输入输出的地点。一般从键盘输入,输出到屏幕,通过命令可以更改到从文件输入输出,或是从命令的结果中获取输入源等。

命令

cat     Concatenate files连接文件,读取一个或多个文件并复制他们到标准输出。
    - cat 读取文件:`cat < file1.txt`改变输入源为file1.txt文件,等同于`cat file1.txt` ==》 将显示file1.txt文件的内容
    - cat 连接多个文件:`cat out*.txt > out.txt` ==》 把符合条件的txt文件的内容合并到out.txt文件中
    - cat 后不带参数,将等待用户输入,ctrl + d标志用户输入的结束,然后复制显示用户的输入。`cat > dog.txt`将把用户的输入写入dog.txt文件中

sort    排序文本行
uniq    去除重复行;加-d 显示重复行
grep    打印匹配行:
    - `ls /bin /usr/bin | sort | uniq | grep zip` 显示文件名包含'zip'的文件列表
    - `ls /bin | grep -i zip` 搜索匹配项时忽略大小写
    - `ls /bin | grep -v zip` 展示不匹配的项
wc      显示文件中的字数、行数、文件大小: 
    - `wc file1.txt` 显示文件file1.txt的字数等数据,
    - `wc` 如果不带参数,它接受标准输入,即键盘输入
    - `ls /usr/bin | wc -l` 只输出行数,这里可以很方便的查看/usr/bin下面的程序个数

head    默认打印文件的前十行,
    - `head -n 5 file1.txt` 加 -n 参数,可以制定打印几行
    - `ls /usr/bin | head -n 5` 也可以用在管道线中

tail    默认打印文件的后十行,
    - `tail -n 5 file1.txt` 加 -n 参数,可以制定打印几行
    - `tail -f /var/log/message` 加-f参数可以实时地浏览文件,可以用来观察日志文件,因为查看的同时日志文件也在被写入

tee     从标准输入读取数据,并同时写到标准输出和文件:
    - `ls /usr/bin | tee teeFile.txt | grep zip` ==> 把内容写入到teeFile.txt,之后传递数据到grep 命令

\>      更改输出到文件,例如`ls -l /usr/bin > output.txt` 
    `> output.txt` 可以清空output.txt的内容
\>\>    把输出添加到文件末尾而非重写文件:`ls -l /usr/bin >> output.txt`
2\>     输出程序的错误信息到文件:`ls -l /bin/usr 2> error.txt`
&\>     把输出信息和错误信息写入同一个文件: `ls -l /bin/usr &> output.txt`
\>/dev/null 扔掉不需要的输出结果,/dev/null 是一个特殊文件,叫做‘位存储桶’,可以接受输入,并对输入不做任何处理
复制代码

管道线

命令从标准输入读取数据并输送到标准输出的能力被一个称为管道线的 shell 特性所利用。 使用管道操作符"|"(竖杠),一个命令的标准输出可以通过管道送至另一个命令的标准输入,管道线可以对数据完成复杂的操作:

ls -l /usr/bin | less

ls -l /bin /usr/bin | sort | less :会把/bin 和 /usr/bin 下的内容列表合并排序后输出到less

ls -l /bin /usr/bin | sort | uniq | less

:加上uniq可以删除重复行

ls -l /bin /usr/bin | sort | uniq -d | less :uniq加 -d 选项可以查看重复行

chap08 从 shell 眼中看世界--各种展开和引用

字符展开

echo * 并不会输出 *号,这是因为*是通配符,shell在echo命令被执行前把*展开成了另外的内容,echo的实际参数是*展开后的东西

路径名展开

echo D*

echo [[:upper:]]

echo /usr/*/share

echo * 显示结果不包含显示隐藏文件

ls -A 显示所有文件,包括隐藏文件

波浪线展开

echo ~ ==> 输出 /home/tianmiao185

echo ~tianmiao185 ==> 输出 /home/tianmiao185

算术表达式展开

格式为$((expression))

echo $((2+2)) 输出4

echo $(( (2+2) ** 2)) 输出16,**是幂运算

花括号展开

echo Front-{a,b,c}-back 输出 Front-a-back Front-b-back Front-c-back

echo Number-{2..5} 输出 Number-2 Number-3 Number-4 Number-5

echo {a..z} 将按顺序输出26个字母

mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12} 花括号可以嵌套,左边将创建一系列年月命名的文件夹

参数展开

echo $USER 将输出tianmiao185,USER是一个变量存在系统的环境变量配置文件中。

printenv | less 查看所有有效的变量

命令替换

命令替换允许我们把一个命令的输出作为一个展开模式来使用

echo $(ls) 命令替换的格式是用$和括号包裹命令,就可以把命令运行的结果作为参数传给别的命令:$(命令)

file $(ls /usr/bin/* | grep zip) ==> 更为复杂的命令替换

旧版shell还支持用``符号包裹命令的格式:

ls -l `which cp`

引号

双引号包裹可以阻止空格、~、花括号展开、路径名展开、字符展开,不可以阻止涉及 $ 的展开,即参数展开、变量替换、算术表达式,也不能阻止 \ (反斜杠),和 `(倒引号)

单引号可以阻止所有的展开,包括涉及 $ 的展开

转义

命令中可以使用\来转义特殊字符

\\b     BackSpace   退格符
\\n     NewLine     换行符
\\a     Alert       蜂鸣符,导致计算机嘟嘟响
\\r     Return      回车符
\\t     Table       制表符
复制代码

echo 加上-e选项可以解析转义字符: echo -e "Time is up \a" 会把\a进行解析成蜂鸣符,等同于echo "Time is up"$'\a'

chap09 键盘高级操作技巧

记几个可以经常用到的:

clear   清屏 
ctrl-l  清屏,并移动光标到左上角
history 显示历史命令列表
ctrl-a  移动光标到行首
ctrl-e  移动到行尾

ctrl-k  剪切光标到行尾的文本
ctrl-u  剪切光标到行首的文本
ctrl-y  把剪切环中的文本粘贴到光标位置

tab键   可以自动补全,按两次tab键可以输出所有符合条件的内容
复制代码

历史命令

history | less 浏览历史命令
history | grep /usr/bin 搜索指定pattern的历史命令,将得到类似:`88  ls -l /usr/bin > ls-output.txt` 的一行行内容
!88     应用指定行命令
上箭头  应用上一个历史命令
下箭头  应用下一个历史命令
复制代码

增量搜索

ctrl-r 启动增量搜索命令,然后输入搜索关键词,按enter执行命令,或ctrl-j 从历史列表复制这一行到当前命令行,再次输入ctrl-r 来找到下一个匹配项,输入ctrl-gctrl-c退出搜索

chap10 权限

linux系统是多用户的,每个用户只能操作各自权限下的目录和文件。

命令

id      显示用户身份号,会显示用户的uid,gid,和group分别表示用户id,用户组id,所属用户组。
    - 这些信息来源于用户配置文件,用户帐户信息 定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面
    - linux的普通用户通常分在users这个用户组

passwd  更改用户密码: `passwd [user]`

chmod   更改文件模式
    - u user的简写,代表用户本身
    - g group,代表用户所属用户组
    - o others,代表剩余其他用户
    - a all,代表所有人
    - chmod u+x file1.txt 给用户添加可执行权限
    - chmod u-x file1.txt
    - chmod +x  file1.txt  等价于 chmod a+x 给所有人添加x权限
    - chmod go=rw file1.txt “=”,表示只有指定的权限可用,其它所有的权限被删除
    - u+x,go=rw 给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。

chown   更改文件所有者,chown 参数实例:
    - bob       把文件所有者从当前属主更改为用户 bob。
    - bob:users 把文件所有者改为用户 bob,文件用户组改为用户组 users。
    - :admins   把文件用户组改为组 admins,文件所有者不变。
    - bob:      文件所有者改为用户 bob,文件用户组改为用户 bob 登录系统时所属的用户组。

chgrp   更改文件组所有权
umask   设置默认的文件权限
su      `su [-[l]] [user]` su 命令用来以另一个用户的身份来启动 shell,输入"exit",会返回到原来的 shell
sudo    以另一个用户的身份来执行命令。
    - 与su 之间的一个重要区别是 sudo 不会重新启动一个 shell,也不会加载另一个 用户的 shell 运行环境
    - 第一次使用 sudo 命令之后短时间内,shell不会再提示输入密码,这是因为,在 大多数的配置中,sudo 命令会相信你几分钟,直到计时结束
复制代码

ls -l /usr/bin的输出结构中:-rw-rw-r-- 1 me me 0 2008-03-06 14:52 foo.txt

-rw-rw-r--首字母代表: - 文件、d 目录 l 软连接,随后三个一组,分别是用户对该文件的权限、用户所属用户组对该文件权限、其他所有人对该文件的权限

你可能感兴趣的:(shell,运维,数据库)