《linux 命令行大全》读书笔记

鸟哥的私房菜看得我云里雾里,个人觉得《Linux命令行大全》很适合新手看呢~
以下是个人的学习笔记,方便以后查询和学习~虽然整理地实在是有点乱~

一. shell是什么

date    实践和日期
cal     当前日历
df      磁盘驱动器当前的可用空间
free    可用内存
exit    结束终端回话

二. 导航

pwd     查看当前工作目录

cd      将工作目录改变为主目录
cd-     将工作目录改变为先前的工作目录
cd~username 将工作目录改变为username的主目录

三. Linux系统

  1. ls 列出目录内容,可以指定多个目录

  2. 以’.’字符开头的文件名是隐藏的,ls不会列出这些文件,除非输入ls -a

  3. ls命令的常用选项:
    -a 列出所有文件,包括以点号开头的文件
    -l 将输出以长格式显示
    -d 将此选项与-l选项结合使用,可查看目录的详细信息,而不是目录的内容
    -F 在每个所列出的名字后面加上类型指示符(如在目录名后面加上一个斜杠)
    -r 以相反的顺序显示结果
    -S 按文件的大小对结果排序
    -t 按修改时间排序

  4. ls 长列表字段含义:
    -表示一个普通文件,d表示目录(directory),l表示软链接
    文件所有者、文件所属组中成员、其他所有人的访问权限
    硬链接数目
    文件所有者的名字
    文件所属用户组的名称
    文件大小
    修改时间
    文件名

  5. file filename 确定文件类型

  6. less filename 查看文件内容

四.操作文件与目录

\* 匹配任意多个字符
?匹配任一单个字符(不包括0个)

[characters] 匹配任意一个属于字符集中的字符
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper:] 匹配任意一个大写字母
mkdir directory... 创建目录
cp item1 item2  复制单个文件或目录
cp item... directory 复制多个项目进一个目录中

-a archive 复制文件和目录及其属性
-i -interactive 互动,覆盖之前会提示用户
-r -recursive 递归地复制目录及其内容
-u -update 只复制目标目录中不存在的文件或更新文件
-v -verbose 显示信息性消息

mv 移除和重命名文件

rm 删除文件和目录

ln 创建链接

ln file link 创建硬链接

ln -s item link 创建符号链接,item可以是文件也可以是目录
  1. 硬链接的局限性:

    • 硬链接不能引用自身文件系统之外的文件,即不能引用与该链接不在同一磁盘分区的文件,简单地说无法跨越物理设备
    • 硬链接无法引用目录
  2. 硬链接和文件本身没有什么区别,当硬链接被删除时,只是删除了这个链接,但是文件本身的内容依然存在,除非该文件的所有链接都被删除了。

  3. 符号链接是为了克服硬链接的局限性而创建的,符号链接是通过创建一个特殊类型的文件来起作用的,该文件包含了指向引用文件或目录的文本指针。

  4. 当删除一个符号链接时,删除的只是符号链接而没有删除文件本身。如果先于符号链接之前删除文件,那么这个链接依然存在,但却不指向任何文件,此时这个链接就称为坏链接。

  5. 由于文件名是由链接创建的,所以一个文件通常至少有一个链接。

  6. ls -li 第一个字段就是索引节点号,看到fun和fun-hard共享同一个索引节点号,这就证实它们是相同的文件。

五. 命令的使用

type 显示命令的类型

which 显示可执行程序的位置

help + shell内置命令  获取帮助文档

可执行程序 + --help  显示命令的使用信息

man 显示程序的手册页

1 用户命令
2 内盒系统调用的程序接口
3 C库函数程序接口
4 特殊文件,如设备节点和驱动程序
5 文件格式
6 游戏和娱乐,例如屏幕保护程序
7 其他杂项
8 系统管理命令

apropos 显示合适的命令,带-k选项的man命令与apropos命令在功能上基本是一致的

whatis 显示命令的简要描述

info 显示程序的info条目

alias 创建自己的命令 alias name='string'

多条命令用;号分割开

删除别名,可使用unalias命令。

alias不带参数可查看在环境中定义的所有别名。

六. 重定向

  1. 使用重定向操作符“>”,后面接文件名,就可以把标准输出重定向到另一个文件中,而不是显示在屏幕上。

  2. 当使用重定向付“>”来重定向标准输出时,目的文件通常会从文件开头部分重新改写。

  3. 仅仅使用了重定向符,并在它之前不加任何命令,就可以删除一个已存在的文件内容或者创建一个新的空文件。如: > output.txt

  4. 使用重定向符“>>”将使得输出内容添加在文件的尾部。如果这个文件并不存在,将与操作符>的作用一样创建这个文件。

  5. 标准输入文件、标准输出文件和标准错误文件分别对应为0、1、2

  6. 2&>1 把文件描述符2(标准错误)重定向到文件描述符1(标准输出)中

  7. 只用一个标记符 &> 就把标准输出和标准错误都重定向到

    ls -l /bin/usr > ls-output.txt 2&>1 
    等价于
    ls -l /bin/usr &> ls-output.txt
    
    ls -l /bin/usr 2> /dev/null 隐藏一个命令的错误信息
  8. 通过把输出重定向到一个称为/dev/null的特殊文件中来实现丢弃输出

  9. Ctrl-D 告诉cat命令已经达到了标准输入的文件尾(end of file, EOF)

  10. 使用管道操作符“|”可以把一个命令的标准输出传送到另一个命令的标准输入中。

  11. uniq 命令经常和sort命令结合使用,默认情况下,该命令删除文件中重复的行,如果我们想要查看重复的行,可以在uniq命令后面添加-d选项。

  12. wc 打印行数、字数、字节数

  13. grep 打印匹配行

  14. head/tail 打印文件的开头部分/结尾部分

  15. tee 读取标准输入,再把读到的内容复制到标准输出和一个或更多的文件中去。

七. 透过shell看世界

  1. 算术运算符: + - * / % **取幂

    echo $USER  参数扩展
    printenv | less查看可用的变量列表
    
    命令替换:
    echo $(ls)
    ls -l $(which cp)
    file $(ls /usr/bin/* | grep zip)
  2. 参数扩展、算数扩展、命令替换在双引号中依然生效。如:echo “$USER $((90+9)) $(cal)”

  3. 如果希望抑制所有的扩展,那么应该使用单引号。

    制表符:
    \a 响铃
    \b 退格
    \n 换行
    \r 回车
    \t 制表

八. 高级键盘技巧

  1. 历史记录命令
    Ctrl-R 逆向非递增地搜索,从当前命令行向前递增搜索,Ctrl-J把搜索结果复制到当前命令行。

  2. 历史记录扩展命令
    !! 重复最后一个执行的命令(虽然↑+Enter键更简单)
    !number 重复历史记录中第number行的命令
    ! string 重复最近的以string开头的历史记录
    !?string 重复最近的含有string的历史记录

九. 权限

文件类型:
- 普通文件
d 目录文件
l 符号链接
c 字符设备文件
b 块设备文件

chmod 更改文件模式
符号表示法:
u 文件或目录的所有者
g 文件所属组
o 其他所有用户
a all

+ 添加一种权限
- 删除一种权限
= 只用指定的权限

umask 设置默认权限
  1. 对于文件来说,这一数字的最大值分别是6,即666。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加执行权限。

  2. 目录允许设置执行权限,对于目录来说,umask中各个数字最大可以到7,即777。

    chown 更改文件所有者和所属群组
    
    chown [ower][:[group]] file...
    
    chgrp 更改文件所属群组
    
    passwd 更改用户密码

十. 进程

系统启动时,内核先把一些程序初始化为进程,然后运行一个称为init的程序。init程序将依次运行一系列称为脚本初始化的shell脚本(放在/etc目录下),这些脚本将会启动所有的系统服务,其中的很多服务都是通过守护程序(daemon program)来实现的。

ps 输出和当前终端会话相关的进程信息

TTY: 进程的控制终端,“?”表示没有控制终端
TIME: 进程消耗的CPU时间总和

添加x选项,告知ps命令显示所有的进程

STAT:state的缩写,显示进程的当前状态

R 运行状态。正在/准备运行
S 睡眠状态。等待某时间发送,如键盘输入或收到网络报文
D 不可中断的睡眠状态。等待I/O操作,如硬盘驱动
T 暂停状态。
Z 无效或者僵尸进程,子进程被终止,但还没有被其父进程彻底释放掉
< 高优先级进程。较不友好,因为消耗更多CPU时间
N 低优先级进程。友好进程(a nice process)
s 包含子进程
+ 位于后台的进程组
L: 有记忆体分页分配并锁在记忆体内

aux选项 输出更多的信息

top 实时显示当前所有任务的资源占用情况,默认3秒更新

在命令后面加上 & 使得进程在后台运行

jobs 列出所有活动作业的状态信息

bg 设置在后台中运行作业

fg 设置在前台中运行作业

fg %[jobspec] 使进程回到前台运行

ctrl + c 可以终止xlogo命令 —— 发出INT中断信号

ctrl + z 暂停前台进程 —— 发出TSTP 终端暂停信号

kill [-signal] PID 发送终止信号给某个进程

kill -l 查看更多信号

killall 杀死指定名字的进程

killall [-u user] [-signal] name...

shutdown 关机或者重启系统

pstree 树状模式显示进程列表,显示父子关系
vmstat 5 每隔五秒输出系统资源使用情况
xload  显示系统时间负载情况的图形化界面程序 
tload  类似xload,但在终端绘制

十一. 环境

printenv: 打印部分或全部的环境信息
set: 设置shell选项
export: 将环境导出到随后要运行的程序中
alias: 为命令创建一个别名

十二. vi

vi 启动vi
:q 退出vi
:q! 强制退出vi
不能确定vi所处的状态,可以按ESC键两次返回初始状态

i  进入插入模式,按esc退出插入模式并返回命令模式

:w 将文件写入硬盘

光标移动:
hlkj 分别对应于上下左右方向键
数字0 至本行开头

命令模式下:
o 在当前行的下方开行
O 在当前行的上方开行
u 取消上述操作

删除命令:
x 当前字符
3x 当前字符和之后2个字符
dd 当前行
5dd 当前行之后4行
dW 当前字符到下一单词的起始
d$ 当前字符到当前行的末尾
d0 当前字符到当前行的起始
d^ 当前字符到当前下一个非空字符
dG 当前行到文件末尾
d20G 当前行到文件第20行

命令d不只是删除文本,而是在剪切文本。

命令y会复制文本,其用法与d命令相同。

合并行: 大写的J命令

查找与替换:

行内搜索: f命令,执行过一次之后,输入分号重复上一次搜索。

整个文件搜索: / + 查询的文本, 使用n可以重复搜索。

文本替换: :%s/line/Line/gc  或者 :1,$s/line/Line/gc

: 用于启动一条ex命令

% 确定操作范围,%代表从文件的第一行到最后一行。或者用1$表示所有的行。

s 替换操作

/line/Line 搜索和替换的文本

g global,对搜索到的每一行和每一个实例都进行替换,如果g缺失,只替换每一行第一个符合条件的实例

c 替换之前请求用户确认

替换确认功能键:
y 执行替换
n 跳过替换
a 所有替换
q 停止替换
l last,此次替换后退出替换


切换文件

:n 切换到下一个文件
:N 切换回上一个文件

:buffers 显示所有文件
:buffer 2 切换到文件2

:e + file添加新的一个文件到编辑会话中,只能用:buffer+文件编号来切换文件。

:r + file 将指定文件内容插入到光标位置之前

十三. 定制提示符

shell提示符转义字符

《linux 命令行大全》读书笔记_第1张图片

这部分不是很常用,而且内容不多。

十四. 软件包管理

主流的软件包系统类:Debian类(.deb技术)、Red Hat类(.rpm技术)

软件包系统工具

发行版本      低级工具  高级工具              
Debian类   dpkg    apt-get, aptitude    
Red Hat类  rpm      yum                 

安装库中的软件包

            apt-get update
Debian类     apt-get install package_name

Red Hat类    yum install package_name


安装软件包文件中的软件包

D:  dpkg --install package_file
R:  rmp -i package_file

删除软件包

D:  apt-get remove package_name
R:  yum erase package_name

更新库中的软件包

D:  apt-get update/upgrade
R:  yum update

更新软件包文件中的软件包

D:  dpkg --install package_file
R:  rmp -U package_file

列出已安装的软件包列表

D:  dpkg --list
R:  rpm -qa

判断软件包是否安装

D:  dpkg --status package_name
R:  rpmm -q package_name

显示已安装软件包的相关信息

D:  apt-cache show package_name
R:  yum info package_name

查看某具体文件由哪个软件包安装得到

D:  dpkg --search filename
R:  rpm -qf filename

十五. 存储介质

管理存储设备首先要做的就是将该设备添加到文件系统中,从而允许操作系统可以操作该设备,这个过程称之为挂载。

/etc/fstab 文件内容列出系统启动时挂载的设备(通常是硬盘分区)。

《linux 命令行大全》读书笔记_第2张图片

mount 挂载文件系统

不带参数,调出目前已经挂载的文件系统列表,格式为:
device on mont_point type filesystem_type(options)

Usage:
 mount [-lhV]
 mount -a [options]
 mount [options] [--source] <source> | [--target] <directory>
 mount [options] <source> <directory>
 mount <operation> <mountpoint> [<target>]

umount 卸载文件系统

Usage:
 umount [-hV]
 umount -a [options]
 umount [options] <source> | <directory>

确定设备名称:ls /dev

《linux 命令行大全》读书笔记_第3张图片

hda代表第一个通道上的主设备,hdb代表第一个通道上的从设备;
hdc代表第二个通道上的主设备,以此类推。
末尾的数字代表设备的分区号,hda1表示该硬盘驱动上的第一块分区

tail -f /var/log/messages 是用来进行实时系统检测的好方法

fdisk 硬盘分区命令

fdformat  格式化软盘

mkf  创建文件系统

dd   向设备直接写入面向块数据

dd程序可以完成这样的任务,该命令将数据块从一个地方复制到另一个地方。格式如下:

dd if=input_file of=output_file [bs=block_size [count=blocks]]

例如:把第一个盘上的所有内容复制到第二个盘上

dd if=/dev/sdb of=/dev/sdc

genisoimage(mkisofs)  创建一个ISO 9600映像文件

wodim(cdrecord)  向光存储介质写入数据

md5sum  计算MD5校验码

十六. 网络

ping  向网络主机发送特殊数据包

traceroute 跟踪网络数据包的传输路径,
显示文件通过网络从本地系统传输到指定主机过程中所有停靠点的列表。

列出提供身份信息的路由器的主机名、IP地址、运行状态信息,
对于不提供身份信息的路由器,直接用星号行表示。

netstat  检查网络设置及相关统计数据

netstat -ie 检查系统中的网络接口信息

netstat -r 显示内核的网络路由表

ftp 采用文本传输协议传输文件

lftp 更好的ftp

wget 非交互式网络下载工具

ssh 安全登陆远程计算机

scp和sftp  安全传输文件

十七. 文件搜索

locate 通过文件名查找文件,方式较简单

find 在文件系统目录框架中查找文件,方式较复杂

find ~ 列出当前系统主目录下(~)的文件列表清单

添加test选项:

-type d限制搜索范围为目录,-type f限制只对普通文件进行搜索

find ~ -type d | wc -l
find ~ -type f | wc -l
find ~ -type b | wc -l
find ~ -type l | wc -l
find ~ -type c | wc -l

find命令的逻辑操作符:-and  -or -not  ()

添加action选项:-delete  -ls  -print  -quit

用户自定义操作: -exec command {} ;

command 表示要执行的操作命令名, {}代表当前路径, 分号作为必需的分隔符表示命令结束。

例如使用-exec完成-delete操作: -exec rm '{}' ';' 或者 -exec rm {} \;

find ~ -type f -name 'foo*' -exec ls -l '{}' ';'

每次找到匹配文件后就执行一次ls命令。

通过将命令行末尾的分号改为加号,便可将find命令所搜索到的匹配结果作为指定命令的输入,从而一次完成对所有文件的操作。

find ~ -type f -name 'foo*' -exec ls -l '{}' +

同样的结果,但系统整体只执行一次ls命令。

xargs 从标准输入中建立、执行命令行

find ~ -type f -name 'foo*' -print | xargs ls -l

touch 更改文件的日期时间

stat 显示文件或文件系统的状态

你可能感兴趣的:(linux,linux,shell,cmd,linux命令行大全,读书笔记)