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

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

chap01-03

01 引言

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

为何要学习命令行:

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

chap02 什么是 shell

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

复制粘贴技巧:

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

命令

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

cal --- 输出当月日历ubuntu

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

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

chap03 文件系统中跳转

命令

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

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 软链接,随后三个一组,分别是用户对该文件的权限、用户所属用户组对该文件权限、其余全部人对该文件的权限

相关文章
相关标签/搜索