首页 > 系统服务 > 详细

马哥学习周总结第一周→linux简介、’文件系统及基础命令------李洋个人笔记。

时间:2018-05-27 22:37:05      阅读:332      评论:0      收藏:0      [点我收藏+]
linux计算机的设备有两种
1 字符设备(顺序数据) 键盘,显示器 共同点是数据交换时是一个一个字符来进行的.
2 块设备(随机数据) 硬盘 交换数据按包为单位进行.

Linux的文件:在存储空间存储的一段流式数据。命名严格区分大小写且同一路径下不能重名(也不能与根目录重名,因为目录也算文件,linux上一切皆文件)
文件名可以使用除了“/”之外的任何字符,包括空白。但最长不能超过255个字符. 以点好.开头的文件名为隐藏文件
特殊的标记 .:表示当前目录 ..: 表示上一级目录
一条完整的路径中:最右侧的叫基名basename,其余叫目录名 dirname

linux程序的编译方式
1 动态链接式编译 编写程序时,没有将所调用的 库 复制入程序中,程序只能在包含有该类型库的计算机上运行,缺点对计算机适应性差,但体积很小。
2 静态链接式编译 编写程序时,将所调用的 库 复制入程序中.优点程序可在任意计算机上运行.缺点体积很大.

Linux哲学思想 一切皆为文件 具体表现:硬件设备也通过文件来表现
linux开源协定主要有 GPL LGPL BSD Apache 几种\
BSD主要几点:
1、如果二次发布的产品中包括源代码,则在源代码中必须带有原来的代码中的BSD协定
2、如果二次发布的产品是二进制的格式的库或程序,则需要在发布的文档或版权声明中说明原来的代码所遵守的BSD协定
3、不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广。

linux下的 FHS:(文件的层级结构)
/bin 供所有用户使用的基本命令程序文件。与/sbin大体相同.

/sbin 供系统管理员使用的命令程序文件.

/boot 引导加载器必须用到的各静态文件.比如内核.

/dev 设备文件.启动时计算机所识别的硬件.以及存储特殊文件(虚拟硬件之类)

/etc 存放系统程序的配置文件.只能为静态的,不能为二进制程序.

/home 可选目录,非基本系统路径.但是每个主机上都会有的路径.
普通用户的家目录路径(默认为在此文件下与用户名相同的子目录).比如cenos用户下的就是 /home/centos

/lib 基础共享库与模块.一般为系统启动或根文件系统上的应用程序
(如/bin /sbin) 提供库,其下子目录:

libc.so. 动态链接的c库
ld
执行时链接器或加载器
modules 用来存储内核模块的目录.

/lib64 64位系统独有的存放处,与lib相同.如系统是32位,则显示/lin32.
64位兼容32位.

/usr 全局共享的只读数据.除了根之外最主要的文件系统.不建议在此目录下创建文件.本身也是层结构,目录下 /bin /sbin /lib /lib64 的子目录虽然不是系统启动必需程序,运行一些附加功能会用到(图形界面程序).这个目录下的库文件,也会调用/lib根目录的库文件. 其下的子目录:
bin : 所有可执行文件,如 gcc,firefox 等(指不包含在 /sbin 和 /bin 内的);
include C程序头文件, 各种头文件,编译文件等时需要使用
include/’package-name’ 程序特定的头文件;
lib : 所有可执行文件所需要的库文件
share 命令手册页和自带文档等. man帮助命令就在这.
local 另一个层级目录
X11R6 x-windows程序的安装位置
src 程序源码文件的存储位置
local 可以再次单独架构一个层级目录(再挂载一个设备).存放本地第三方安装程序的位置.让系统管理员安装的本地应用程序,大部分存在此处。此目录下的文件与usr基本一致,但这里的子目录无论是bin或ect都只为本地计算机提供服务。

/media 便携式设备挂载点,比如 USB,光盘等等.

/mnt 其他非关键性文件系统的临时挂载店.

/opt 通常是装一些第三方非关键性软件安装位置.

/root 管理员的家目录(可选).

/srv 当前主机为服务提供的数据,具有特有性,不具有通用性.

/tmp 临时文件目录,可供所有用户都可写入操作或使用.有特殊权限.

/var 存储经常变化的数据的目录(比如日期),其下子目录:
cache 应用程序的缓存数据.
lib 程序的状态书数据.
local 专门为/usr/local目录下的程序存放经常发生变化的数据.
lock 锁文件
log 日志文件
opt 专门为/opt目录下的程序存放经常发生变化的数据.
run 运行中的进程相关的数据.如pmd数据.
spool 应用程序的spool数据.可理解为 暂存 管道这样.
tmp 系统重启之后依然需要留存的的临时数据.

特殊目录 /proc 和/sys
/proc 虚拟文件系统,为内核和进程存储相关信息.多为内核参数,并将内核参数虚拟为文件目录的形式
比如内核net.ipv4.ip_forward的参数,就虚拟为 net/ipv4/ip_forward.
参数的值就保存在ip_forward里面.完成路径为 /pock/sys/net/ip_forward.
/sys 和/proc类似,除了可以查看内核参数外.主要为管理linux的设备接口,提供了一种统一模型的接口.
/sys和/proc都是临时性文件,关机不再存在.
/sys子目录下,以多种视角的方式将不同的设备类型数据,分类(外接,内接,电源总线,等等)保存在不同的文件目录下.

linux终端分类
虚拟终端 /dev/ttys+{1----6}数字
串行终端 /dev/tty+数字
物理终端 /dev/console
伪终端 /dev/pts+数字
终端 terminal

命令提示行
格式(中括号部分) 用户名+@主机名+~ 其中~表示用户所在目录
#表示用户为root
$ 表示普通用户 非root
从root切换到非root
命令 先 useradd(创建一个普通用户) centos
后 su - centos (-前后均有空格)

获取命令帮助的办法

1、命令--(两个减号)+help

2、使用手册(说明书) manual 位于 /usr/share/man目录下 命令格式 man+空格+命令
帮助后的选项:
SECTION下的
1、NAME 功能性说明
2、SYNOPSIS 语法格式
3、DESCRTPION 描述
4、OPTIONS 选项
5、EXAMPLES 使用范例
6、AUTHOR 作者
7、BUGS 报错方式
8、SEE ALSO 参考

SYNOPTS下的内容用来,表示命令的使用方式,其中
带中括号[]的表示可选内容
带尖括号<>的表示必须提供的内容
带竖线并且左右俩侧都有的,表示二选一或多选一
带省略号...的表示同类内容可出现多个

使用手册:压缩格式的文件,有章节之分:举例
/usr/share/man目录下
存在 man1 man2 man3...的目录,而一个帮助文件的内容或许在man1有一段,man2有一段...
第一章节 用户命令 所有用户都能用的命令
第二章节 系统调用
第三章节 C库调用
第四章节 设备文件及特殊文件
第五章节 配置文件格式
第六章节 系统自带的游戏的使用帮助
第七章节 不便归类的杂项
第八章节 管理工具及守护进程 只有管理员才能运行的命令

查看指定目录的命令格式 man+章节目录数字+所查看的命令

查看某一命令在哪一章节 whatis+所查看的命令

帮助命令man是通过数据库来实现的,更新数据库命令 makewhatis

使用man后,再弹出的界面里 空格表示向后翻一屏幕 b表示向前翻一屏幕

ctrl+D或+u分别是向尾及向首翻半屏 回车表示向下一行,k表示向上一行

G表示跳跃到最后一行 #G(#表示数字)表示跳转至第#行

查找命令: /或?+想要查找的内容 然后小写n表示查看下一个,大写N表示查看上一个

/ 表示从文件首部依次向尾部查找,且不区分大小写

? 与/相反.除此之外,大小写的N是按照命令顺序查看下一个的,故/命令下的n是从头到尾,?命令反之.
退出按q 表示quit

有时候man帮助文件不在默认目录下,可以使用-M(大写)+空格+指定位置来查看并打开

第三种获取帮助办法: info+命令名 获取在线帮助
第四种 应用程式自带的帮助文档 通常路径 /usr/share/doc/目录下.多为命令名+版本号的形式存在.
有三个文件
1 README 程序的相关信息
2 INSTALL 安装帮助
3 CHANGES 版本迭代时的改动信息

第五种 互联网帮助
google 用法
搜索指定文档类型 名字+filetype+格式名(txt,exe之类)
在指定网站上搜索 名字+site+域名

常用命令
type 显示指定命令的类型,判断给出的指令是内部指令还是外部指令.
如果给出的指令是外部指令,则显示绝对路径.
type -t 会显示以下字符代表所输命令的意义,比如:
file 该指令为外部指令
alias 该指令为命令别名所设定的名称
builtin 该指令为bash内置的命令功能.

type -p 只有指令为外部命令时,才会显示其绝对路径.
type -a 会PATH发量定义的路径中,将所有包含名字的指令都列出来.包含alias(别名).

pwd显示当前所在的绝对路径
-P 如果当前所在位置是软链接目录,则显示源路径

绝对路径与相对路径
绝对:从根位置到文件的路径。
相对:从当前位置到文件的路径。
pwd 以及$pwd 分别是shell环境中,两个保存当前位置和上一次位置的变量.

enable 查看内核命令
命令格式 选项 参数

-a 显示所有已激活的内部命令.
-n 关闭指定的内部命令.
-f 从指定文件中读取内部命令.

enable –n pwd 禁用了pwd内部命令

pwd 依然可以使用

enable pwd 重新启用pwd

因为在linux当中,pwd不光在内部命令中存在,/usr/bin/pwd下也有这个命令.在linux中,执行命令时候,优先从内部命令中查找,如果没有,就从$PATH环境变量中指定的路径依次去寻找该命令.

hash 查看、记录缓存命
格式 选项+命令
-l 列出当前所有缓存过的命令,包括路径及别名(如果有的话)
-d+命令名 删除指定缓存命令
-p 原命令路径+新名字 创建hash命令

hash –p /bin/ls aa

aa 此时的aa等于/bin/ls

hash –d aa 删除aa

Linux当中,命令执行的优先级依次为
别名>内部命令>hash(可理解为缓存)>外部命令.

cd 切换目录 如不带任何参数,则表示切换为用户的(跟)家目录
cd+~+指定用户名 表示切换到指定的用户名的跟目录下
cd+ - 表示在当前目录与上一次目录之间来回切换 cd+..表示回到上一个目录 加入指定路径可改为到指定路径目录下
cd+空格+文件名 表示从当前路径进去到该文件里。也可以cd /的形式进入

init 进程管理工具,这是一个由内核创建的用户级进程.其进程号始终为1.它的位置/sbin/init,如没有,尝试运行bin/sh,还没有,系统启动失败.
命令格式 选项+参数
Init+0(此处是数字0) 关机
Init1 单用户模式,只能root用户进行维护\
Init2 多用户模式,不能使用NFS(Net File Syetem)
Init3 完全多用户模式(标准模式)
Init4 安全模式
Init5 图形化模式
Init6 重启

mount 挂载命令
linux中,根文件系统之外的其他文件要想能被访问,必须通过关联跟目录上的某个文件来实现,这一关联的过程叫做挂载,关联的目录被叫做挂载点.解除此关联过程叫做卸载. Ps:挂载点最好为
命令格式 选项+参数1 参数2 参数1为被挂载的文件,参数2为挂载点
-t 指定文件系统,通常可省略,linux可自动识别文件系统.
-o 将决定用何种方式挂载
loop 将被挂载的文件当做一个硬盘分区来挂载.
ro 只读的方式来挂载
rw 只写的方式来挂载
iocharset:指定访问文件系统所用字符集
举例

mount –o loop /dev/sr0/centos7.iso /mnt/cdrom

将目录/dev/sr0以硬盘分区的方式挂载到/mnt/cdrom下

screen 创建新会话命令,这个命令在终端被关闭后仍能正常运行.
一般命令在进程树上输入子级命令,终端被关闭也随着关闭,screen命令
可自己创建进程命令树,只要其所依附的服务器没被关闭就可一直运行.
命令格式 选项
-S+名字 创建 screen会话 S是大写的
-x+名字 加入screen会话
exit 退出
-d 转为后台运行
-r 恢复转为后台的会话
-ls 显示所有screen会话
-wipe 检查所有screen,并删除已经无法使用的screen会话.

bc计算命令

bc 回车

#44*44
#1936
#CTRL+c 退出计算。

ls 列出指定目录下的文件
ls / 显示跟目录下的文件.
ls -a 显示隐藏文件 -A 表示显示除. 和..外的所有的文件
ls -a +指定路径,则显示指定路径下的内容
ls -l 显示文件的详细信息 最左侧是文件类型(- d b c l s d)接着左三位rw-表示文件属主.中三位文件属组,右三位表示其他用户(非属主,属组)访问的权限.再向右的数字,表示文件硬连接的次数,root表示文件的属主,第二个root表示文件的属组.最右边的数字表示文件的大小,单位是字节,最后的一组数字表示上一次文件被使用的时间.
文件类型(- d b c l s d) ,-是普通文件,d是目录文件,b是块设备文件,l是软链接文件,s是套接字文件,p是管道文件。
ls -l -h 把详细列出的文件信息大小单位换算成人容易理解的.比如b换算成k.
ls -d 显示目录自身属性,而不是内部属性。必须跟l命令一起使用。例:ls -ld
ls -r 反顺序展开目录文件
ls -R 显示文件子目录的内容。
ls后文件的默认颜色:
白色:表示普通文件
蓝色:表示目录
绿色:表示可执行文件
红色:表示压缩文件
浅蓝色:链接文件
红色闪烁:表示链接的文件有问题
×××:表示设备文件
灰色:表示其他文件

文本文件查看命令
cat 连接文件并显示(一个文本文件)使用不当会损坏文件。text格式的是文本文件。
cat可以同时打开多个文件,不同文件路径用空格分开
-n 会在打开的文件行数进行编号,存在多个文件时则一起编号,不会单独编号.
-e 显示文件的行结束符号$.
-E 显示结束符$
-T 显示TAB(^I)
-v 显示windows换行符(^M)
-t = -vT
-A = -vTE 表示所有控制符
-n 显示行号
-b 空行不参加行数编号

  • s 将连续的空行压缩为一个空行

使用cat在重定向时候,可以创建之前不存在的文件。举例
cat /etc/issue > /tmp/issue.out 执行后,会先在/tmp目录下创建一个issue.out
的文件,再把/etc/issue当中的值复制过去.

tac 连接文件并显示(与cat相反,tac是将文件内容倒序显示).举例

tac /app/123 内容为,执行后显示

1 5

2 4

3 3

4 2

5 1

rev 一样是倒序显示,与tac不同的是rev是在一行之中倒序显示的。

echo ”abcde”|rev 显示 edcba

head 看指定文件的前n行(默认为10) head -n 20 +指定文件 效果为 显示指定文件的头20行.其中-n+数字 可省略为 -数字 即 head -n 20+指定文件 = head -20+指定文件.

tail 看指定文件的后n行(默认为10) tail -n 20 +指定文件 效果为 显示指定文件的尾20行 其中-n+数字 可省略为 -数字 即 tail -n 20+指定文件 = tail -20+指定文件.
-c 看最后的字节,加上数字则显示多少位字节。

tail –c 10 123 # 显示123文件的最后10个字节。

-f 查看文件尾部内容结果后,不自动退出,跟随显示新增的行,直至使用ctrl+c退出为止。但文件被删除后自动停止. 因为-f是基于文件描述符追踪,一个文件对应一个描述符,删除文件等于删掉了描述符,所以不再继续追踪。

-F查看文件尾部内容结果后,不自动退出,跟随显示新增的行,直至使用ctrl+c退出为止。但文件被删除立即自动重新创建一个同名文件继续显示新增的行.因为-F是基于文件名追踪,tail会自己创建事先不存在的文件,而只要文件名在,tail –F 就会自动追踪。

tailf
tailf 和taili – f 比较类似,共同点是文件被删除都停止追踪,区别是tailf是只有文件数据发生了改变之后,才继续追踪。相对来说减少了对硬盘的访问量。
PS:打开一个文件,再复制一份打开,使用了-F 参数后,修改复制后的内容时,会在原文件中同步显示。
在工作中,多用于人工监控日志新增内容来使用。

more 分屏查看命令 格式 more+文件路径 翻屏至文件尾部后自动退出 (空格向后翻 b剑向前翻)

less 分屏查看命令 格式 less+文件路径 等同与man.

cut 按列抽取文本
格式cut + 选项 +文件

-d 指明分隔符

-f 第几列 1,3,6,表示分散的字段 1-6表示连续的字段

-c 按字符切割.

cp /etc/passwd /app/shiyan 复制passwd到shiyan中

cut -d: -f1,3 /app/shiyan -d:之间没有空格.用来指明分隔符为:,-f后面的数字指明第几列.

显示账号以及UID号.

cut -d: -f1-3 /app/shiyan -d:之间没有空格.用来指明分隔符为:而1-3表示第一列到第三列.

显示账号密码位及UID.

--output-delimiter= 将默认分隔符替换为指定的

cut -d: -f1,3 --output-delimiter="的UID是" /app/shiyan

显示root的UID是0,这里将分隔符由:替换为了"的UID是"

将df中磁盘占用了多少百分比提取为数字形式,不要%符号

df |tr -s " " % |cut -d% -f5 |cut -d% -f1

df内容传给管道tr命令,-s " " %将多余的空格压缩为一个并改变为%,然后管道给cut命令-d% -f5 去掉分隔符%并取出第五列的数字,结束.

取出ifconfig当中的ip地址.

ifconfig |head -2 |tail -1 |tr -s " " |cut -d" " -f3

ifconfig内容管道给head,-2打开头两行后管道给tail,-1只要最后一行后管道给tr将多余的空格

变为一个,最后管道给cut,去掉空格,取出第三列的ip地址.

wc 统计命令,统计指定文件的行数,字节数,字数,并将统计结果输出。
命令格式:选项+文件。
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
举例

wc -c /etc/issue 输出/etc/issue文件的字节数

31 /etc/issue 显示31

paste 合并两个文件同行号的列到一行
格式 选项+文件,多个文件用空格隔开.
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示 只对一个文件有效,不能将多个文件内容变为一行。

vim 123 创建并输入内容 # vim 123 创建并输入内容

a b # c d

1 2 # 3 4

paste 123 456 合并123 456两个文件,将按照行数进行合并。

a b c d 第一个文件的第一行放在行首,第二个文件的放行尾。

1 2 3 4 第一个文件的第一行放在行首,第二个文件的放行尾。

paste -d " " 123 456 将默认分隔符由tab键改为了空格,所以间距变小了。

a b c d

1 2 3 4

vim 789 创建并编辑如下内容

a b c d

1 2 3 4

paste -s 789 将789文件内容合为一行,默认分隔符是tab,故间距大

a b c d 1 2 3 4 显示内容。

sort 文本排序,把整理过的文本显示在STDOUT(标准输出),不改变原始文件.
格式 选项+文件
默认不加选项的默认排序方式---- 受LC_COLLATE影响.为UTF8的影响,按首字母来排列. 使用locale 显示当前终端使用了什么编码.

常用选项

-r 执行反方向(从大到小)整理 即倒序排列.

-n 执行按数字大小整理 它是按照数字的首列大小,由低向高排序,拍完第一列,再排第二列..依次类推.不会按照整体的数字来排序.比如输入 111 22 排序,先开始排111,再开始排22.

-f 选项忽略(fold折叠)字符串中的字符大小写

-u 选项(独特,unique)删除输出中的重复行(重要)

-t c选项使用c做为字段界定符 举例: 将/etc/passwd文件,按UID数字顺序来排.

cat /etc/passwd |sort -t -k3 -n

-t相当于cut的-d ,-k相当与cut的-f, -n按数字来排序. -k后面可加多个数字,用逗号分隔.

-k X 选项按照使用c字符分隔的X列来整理能够使用多次.相当于cut中的-f.

uniq 从输入中删除前后相接的重复的行,一般都是与sort搭配使用来去除重复.
格式 选项+文件
常用选项
-c: 显示每行重复出现的次数.

-d: 仅显示重复过的行. -cd可以表示出第几行重复了几次的意思.

-u: 仅显示不曾重复的行(连续且完全相同才判定为重复).

sort abc.txt | uniq - c 显示出abc.txt文件中每行重复的次数.

diff 比较文件,比较两个文件之间的区别.
格式 选项+ 文件+文件 ,文件之间用空格隔开.
如果两个文件有不同的地方,则会以第几行第几个字符不同的方式告诉你.

-u 打补丁形式

diff -u 老文件 新文件 > 补丁.patch 将新老文件的不同之处导入到补丁文件中.

patch -b 老文件 补丁.patch 将补丁打入到新文件中,使之变的和新文件一样.

patch 复制对文件改变,通常用来打补丁.
格式 选项+文件
-b 选项来自动备份改变了的文件
与diff比较命令一起使用.(未来对于软件升级有很好的帮助.)

grep 文本搜索工具,以行为单位。
根据用户指定的“规则”对目标文本逐行进行匹配检查;打印匹配到的行
格式 选项+制定的规则+文件
制定的规则,可以是字符串,引用的变量
grep root /etc/passwd 显示passwd中包含root的行

grep "$USER" /etc/passwd 显示passwd中包含变量值 "用户"的行

grep ‘$USER‘ /etc/passwd 显示passwd中包含字符串USER的行

grep whoami /etc/passwd 显示passwd中包含,引用命令值whoami (登录用户)的行。

常用选项:
--color=auto: 对匹配到的文本着色显示. centos7默认作为别名,centos6可以手动设置.

-v: 显示不被pattern匹配到的行. 只显示规则之外的行,即反向选择.

-i: 忽略字符大小写 . 将大小写一起列出(大小写之间按源文件先后顺序排序)

-n:显示匹配的行号. 匹配到的选项前面加上编号(行数号)

-c: 统计匹配的行数. 只显示行数不显示匹配的内容.

-o: 仅显示匹配到的字符串. 这个结果区分大小写

-q: 静默模式,不输出任何信息 一般在只使用命令结果的时候用

-A #: after, 后#行 显示匹配结果及#号代表的数字再接着向上显示#行

-B #: before, 前#行 显示匹配结果及#号代表的数字再接着向下显示#行

-C #:context, 前后各#行 等于-A # -B #,显示匹配选项及本身的上下n行.

-e:实现多个选项间的逻辑or关系 搜索多个匹配项,-e 条件1 -e 条件2 -e...
-e 条件1 -e 条件2 = "条件1/|条件2" 两个条件之间是或的关系不是和.条件可存在多个.

-w:匹配整个单词 只匹配单词本身,不匹配包含这个单词的选项.

文件中有a aa aaa,使用# grep -w a 文件后,只会显示a,不会显示其余的.

-E:使用ERE,相当于egerrp 使用扩展正则表达式.

-F:相当于fgrep,不支持正则表达式 不使用正则表达式.

stat 显示文件或文件系统的状态 (即元数据)
元数据 文件的概况,相当于一本书的索引部分,不是正文.
格式 stat+文件路径/名 显示指定文件的 名称,大小,占据磁盘空间多少块(比如占据32块,一块io块是5000,那么就是32*5000的大小.),
什么类型的文件,设备所在的设备号.索引节点号,权限,环境,最近访问,最近更改,最近改动等等,
其中 最近访问,最近更改,最近改动被称为时间戳,基本每个文件都有.

文件管理工具
cp 文件复制 单个文件目录/多个文件目录

单个文件复制
格式 cp+源文件路径+空格+目标文件路径

源文件(被复制的文件),目标文件(复制后的文件)

单个文件复制,如果目标(dest)不存在,则先创建出目标文件,再复制源文件数据至目标。
举例 cp /etc/a /tmp/b 将etc目录下的a文件复制到/tmp下的b文件里面去
如果b不存在的话,将先建立b文件,再将a文件里面的内容复制进去执行后的结果是目录tmp里面新增了一个b文件,且其内容与目录etc中的a一致。

单个文件复制,目标存在的话,有两种情况
1 目标文件是非目录文件:则会将源目标的数据,覆盖目标文件中的数据。(被覆盖后无法撤销)
举例 cp /etc/a /tmp/b 将etc目录下的a文件复制到/tmp下的b文件里面去
b已经存在,那么结果就是名字为b,但b里面的内容会被a里面的内容覆盖。

2 目标文件是目录文件:先在指定的目录中创建与源文件同名的文件,再将源文件的数据流复制进来。
cp /etc/a /tmp/b/ 将etc目录下的a文件复制到/tmp下的b目录里面去
若b事先存在,则a的名字和内容都放在b目录下,执行后为 /tmp/b/a
若b不存在,则直接报错:不是目录.

多个文件复制
转移后的目录,在同一个目录下
cp 文件名 文件名 目标目录
举例 cp a b /c/ 执行结果,将a,b复制到目录c下.

转移后的目录,不在同一个目录下
cp /原目录/{文件名+逗号+文件名}+空格+目标目录/子目录/

举例 cp /etc/{a,b} /tmp/c/
执行结果 将/etc下的a,b两个文件,复制到/tmp下的c目录内

如果目标不存在,报错
如果目标不是目录文件,报错
如果目标是目录文件,分别复制每个文件到目标目录中,并保存原名.
多文件复制目标必须为目录文件且事先存在这个目录。

cp /etc/a /tmp/b与cp /etc/a /tmp/b/ 相差一个/符号,差距很大.
前者是复制文件到另一个文件中,后者是复制文件到另一个目录中,
复制目录文件必须加-r参数,否则会忽略该目录,复制失败.

-a 保留文件属性,否则可能导致文件的拥有者改变导致其他问题.(例如源文件属主为a.,直接cp会改变源文件属主为root)多用于备份.

-d 拷贝时保留链接(即复制快捷方式本身,不是快捷方式指向的源文件数据).

-f 删除已经存在的目标文件而不提示,强制覆盖目标文件.

-i 覆盖目标文件之前提示用户确认,回复y时目标文件被源文件覆盖,是交互式(询问是否)拷贝,恢复n 则取消.

-p 此时cp除复制源文件的内容外,还将其修改时间和访问权限也复制到新文件中.
-r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件,但要求目标文件必须为一个目录名,不能为文件或其它.

-1 不作拷贝,只是链接文件,

mv: 移动并重命名文件

单个文件 若目标名字不存在,先创建一个指定的目标名字的文件,再将输入转入。
单个目录 若目标名字不存在,则报错。 必须事先存在目标目录,才可以移动。

源文件和目标文件在同一个目录下相当于改名 格式 mv a b 把a改为b的名字,但其的内容不变. 相当于把a改名为b.

源文件和目标文件在不在同一目录是移动 格式 mv 根/a 根/b 把a文件转移到b目录下。

mv命令转移目录不需要-r选项。

多个文件,同cp一样,目标文件必须是目录形式。转移的目录必须事先存在.

rm 删除文件
格式 rm+文件路径即可

删除目录
格式 rm -r+目录路径即可 rm -r /tmp/123/ 删除tmp目录下的123目录文件.
若要删除的子目录过多,可以rm -rf+目标路径即可。 rm -rf /tmp/z123/ 彻底删除tmp目录下的
z123及其子目录且不在交互(问询).

复制,移动,删除,可在目录后加号键代表所有的意思。
cp/etc
就是复制所有etc目录下的文件的意思.

自杀命令 rm -rf /* 删除所有跟目录下的文件=系统崩溃.

linux的文件有两种数据
1 元数据 文件的概况,相当于一本书的索引部分,不是正文.
2 数据 文件的具体内容,相当于一本书的正文.
最近访问 access time
最近更改 modify time
最近改动 change time

linux上没有回收站,可以自建一个目录当回收站.切忌将无用文件彻底删除,很难找回.

更改是指文件的数据发生了变化,改动是指文件的元数据发生了变化.如果文件的数据发生了变化,哪么这个文件的元数据也必定会随之变化.最近访问和最近更改是可以任意改变的,但最近改动无法更改,并以最后一次的访问/更改时间为准.

touch命令 手动修改时间戳
直接运行 touch+文件名 将指定文件的时间戳(atime访问mtime修改,ctime改变)修改为当前系统的时间,如果所输入的文件不存在,则自动创建一个空文件.
创建名字包含空白字符的文件时,需使用转意符\,举例
touch p a 这样执行后是创建两个文件(a和b)
touch p\ a 这样执行后创建的文件才是名字为p a的一个文件.
不加转意符,touch p a中,p和a之间的空格是用来表示两各参数的分隔符的
加入转意符\,则表示p和a之间的空格就是空白字符本身,不再作为参数分隔数识别.
-c 如果指定的文件路径不存在时,不予创建.
-a 只改访问时间 access time
-m 只改更改时间 modify time
-t 修改的时间为指定值.格式 年月日时分秒
举例 toouch -m -t 0212010303.03/tmp/functions
执行后:将 /tmp/functions的更改时间变为2002年12月1号凌晨3点3分3秒.
确认执行后的结果 stat /tmp/functions 即可查看.

file 用来看文件内容属于什么类型的. 文本,二进制之类.file+文件路径 可同时存在多个

echo 回显命令
echo -n 运行命令后不自动换行.
echo -e 让转义符生效.比如\表示换行.
echo \n 换行 \t 制表符(横向),相当与一个(TAB键)字段的位置
echo 加上单引号,表示变量引用不执行替换变量值,双引号会被替换.
举例 echo $SHELLl命令 是替换一个变量的名字为变量名当中所存储的值,
假设shell值为123,则显示123,而加单引号则为显示命令本身.不在替换变量名中所包含的值. 而echo $’SHELL’ 则只会显示SHELL.

日期命令
linux启动时从硬件(主板之类)读取日期和时间信息,读取完成后,不再与硬件时间关联.故linux时间分系统时间及硬件时间,date是关于系统时间的,clock则是硬件时间.
date 显示和修改时间 直接date 显示当前年月日星期几时几分几秒
加入字符串+%Y(年)%m(月)%d(日)%H(时)%M(分)%S(秒)可指定只显示其中一项
同时显示指定的几个 例如 年月日 格式为 +%Y-%m-%d 或者+“%Y %m %d”不能同时使用多个加号。
同理,想要电脑认为这是同一个指令时,用双引号把指令集圈起来即可,指令之间以空格隔开。
+%T 则以 时:分:秒的 形式显示,
+%s 表示从1970年1月1号凌晨开始计算到命令个执行的那一刻经过了多少秒。
设置时间命令格式 date 月日时分年.秒 举例 改为 2013年8月8号8点8分8秒
命令为 date 080808082013.08
clock 显示或设定硬件时钟.
-s (hctosys的简写 hc代表硬件,sys代表系统,以to之前的时间为准,也就是以硬件时间为准统一系统跟硬件的时间).
-w (systohc) 以系统时钟为准统一系统跟硬件的时间,
hwclock 跟hwclock一样
cal 日历 格式 cal+年份或月份 例子 cal 2015 显示2015全年日历
cal 10 2015 查看2015年的10月份。

linux下的文件类型

  • 常规文件
    d 目录文件 路径映射之用
    b 块设备文件 支持随机访问
    c 字符设备文件 支持顺序访问
    l(L) 符号链接文件(软链接文件) 大体相当于WINDOWS上的快捷方式。
    p 命名管道:
    s 套接字文件 两个进程之间进行通信时进行套接。主要用于服务提供。

linux下的设备文件都有自己的编号,同一类型的多个设备分主次编号
用 ls -l(是L不是1)显示的详细信息中,中间用逗号隔开的数字(在大小那一栏中作特殊显示)
左侧是主编号(major numbei):不同设备,它们的主编号不同,同一设备的主设备号相同,但次设备号不同。
主设备号只要是为了标识设备类型,进而确定要加载的驱动程序。
右侧是次编号(minor number):主要用于标识同一种类型设备中的不同设备。
主设备号是为标识设备类型,次设备号是为了标识设备本身。
以前编号是8进制,也就是2的8次方取值为0----255。即共有255个。

目录管理类的命令
mkdir:创建目录
mkdir /tmp/x/y/z 是创建z的.z属于基名,基名前方的路径必须要存在,否则会报错.
/tmp/x/y这个绝对路径如果不存在,z是无法建立目录.

-p 自动按需创建副目录
-v 显示命令执行过程(大部分命令都支持v)
-pv 自动按需创建并显示执行过程.
-m 给定目录权限,如无则为默认权限.

rmdir:移除空目录
-p 删除指定目录后,如果上一级是空的也会被删除,直到上一级目录不为空为止。
-v 显示命令执行过程(大部分命令都支持v).

bash基础特性之 :命令行展开
~ 自动展开为用户的家目录,或指定的用户的家目录.
{} 可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径.
举例:tmp/{a,b}相当于 /tmp/a /tmp/b
问题1 如何创建/tmp/x/y1, /tmp/x/y2 /tmp/x/y1/a, /tmp/x/y1/b?
mkdir -v /tmp/x/{y1{a,b},y2}
问题2 如何创建a_c,a_d,b_c,bd
mkdir -v {a,b}
{c,d} 两花括号类似于互乘的关系.
问题3 创建如下目录结构.
/tmp/mysysroot
/tmp/mysysroot/bin
/tmp/mysysroot/sbin
/tmp/mysysroot/etc/sysconfig
/tmp/mysysroot/etc/sysconfig/network-scripts
/tmp/mysysroot/usr
/tmp/mysysroot/usr/bin
/tmp/mysysroot/usr/sbin
/tmp/mysysroot/usr/local
/tmp/mysysroot/usr/local/bin
/tmp/mysysroot/usr/local/sbin
/tmp/mysysroot/usr/local/etc
/tmp/mysysroot/usr/local/lib
/tmp/mysysroot/usr/lib
/tmp/mysysroot/usr/lib64
/tmp/mysysroot/var
/tmp/mysysroot/var/cache
/tmp/mysysroot/var/log
/tmp/mysysroot/var/run

mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}

tree命令
以树状显示用户目录的层级结构。
无任何附加选项的话,就显示当前目录的所有层级结构。
-L+数字 显示指定的层级。
举例 tree -L 2 /etc 效果是显示/etc 目录下最多2层的目录,超过的不予显示.

bash的基础特性: 命令的执行状态结果
bash通过状态返回值来输出命令执行后的结果:
1 成功 用0来标会
2 失败 用非0来表示1---255之间.
命令执行完成之后,其状态返回值保存于bash的特殊变量$?中.
举例 运行 ls /etc 此命令会成功,再使用echo $? 显示变量值,只会是0
再次 运行 ls /tecc 或 lss /etc 则必定失败(无此目录或命令),
再使用 echo $?显示变量值,则为1--255之间的数字.($?只显示最近一条的命令的值).
$? 变量也叫 命令的状态结果,ls则为运行结果.

命令正常运行时,有时还会有命令返回值,根据命令及其功能不同,结果也不相同.
引用命令的执行结果:
格式 $(命令)或反引号把命令圈起来
举例 $date就是引用日期的值
可以用来重复执行,用来创建不同的文件
举例 mkdir $(date +%H-%M-%S) 执行结果就是创建以当前日期为名字的目录,因为时间不断变化,所以重复执行的时候,创建的目录不会重名.($默认保存最近一次的值).

bash的基本特性 引用
1 强引用 ‘ ‘ 单引号 不会替换原有变量值,只显示变量本身.
举例 执行命令 ls /erc 后,变量$?的值为0. 执行 echo ‘$?’ 后显示 $?

2 弱引用 “” 双引号 会替换原有变量值,只显示变量的值.
举例 执行命令 ls /erc 后,变量$?的值为0. 执行 echo “$?” 后显示0

3 命令引用$() 只引用当前变量的值.

bash的快捷键
ctrl+a 跳转命令行首.
ctrl+e 跳转命令行尾.
ctrl+u 删除光标所在处至行首之间的所有字符.
ctrl+k 删除光标坐在出至行尾之间的所有字符.
ctrl+l 清屏 相当于 clear命令.
Tab 自动补全命令,存在多个命令时按两下列出符合条件的供选择.若什么都不显示可能命令、目录等有错误。
命令类型
外部命令:所有命令都属于外部命令,共同点在计算上必定有一个与命令本身同名的文件
内嵌命令:一些外部命令本身,自带的命令,如 bash, shell .

命令的别名:即自命名,可以跟原名相同,这是原名被隐藏。
运行被隐藏原名的命令,使用+命令原名即可.
alias 显示当前计算机上的所有命令别名.
如何自定义命令名.
命令 alias 别名=’’命令原名’’即可(命令原名可为组合指令,如abc=“ls /tmp” ,使用组合指令需用引号圈起来) 只为当前sheel及系统使用,重新登录就无效
如何撤销别名
命令 unalias 别名 即可.
永久命名一个自定义名字的命令,分为这几步骤
1 命令提示行下输入自己想自定义的命令名称并回车,检查是否有重名
2 在定义永久别名的文件里面加入自己要设置的永久别名,这个文件是根目录下的 .bashrc 文件,输入命令 vim ~/ .bashrc来打开.bashrc 文件。
在alias下面插入想修改的命名即可 举例 alias a=ls .

which 显示命令的完整路径
显示别名命令及其所指向的命令本身.
which --skip-alias+命令 就能跳过别名直接显示原名的命令路径.
whereis命令 显示命令路径,源码及手册页.
-b 只搜索二进制程序路径.
-m 仅使用手册文件路径.

who命令 显示已登录的相关用户信息
-b 上一次的启动时间
-d 显示死亡的进程.
-l 显示登录进程.
-u 显示谁登录的 比不加-u多了时间和进程编号.
-r 运行级别
w命令
w可以理解为增强版的who命令,可以显示谁登录了,还能显示做什么,资源占用等等.

bash的基础特性 查看历史 能辅助我们完成系统管理

命令历史:使用上下箭头可以查看之前使用过的命令.
也可以使用history命令来列表查看之前执行过的.
shell进程会在它的会话中保存用户执行过的命令.
history可以通过环境变量来实现,定制一些功能,比如选择性的保存之前执行过的命令.
history命令用法
-c 清空历史记录
-d 从指定位置删除历史
history -d+数字 删除指定数字的历史记录.history -d 30 表示删除第三十行的历史记录.
history -d+数字+数字 则表示 从第一个数字开始,删除其后面的第二个数字的记录数.(包括第一条数本身)
-a 将当前内存的历史记录追加到历史文件中去(从内存到文件)
-n 从历史文件中读取所有未被读取的行
-r 读取历史文件并将内容追加到历史列表(内存)中(从文件到内存)
-w 将当前历史写入到历史文件中并追加到历史列表(内存)里.
直接输入 history+数字 则为显示最近的命令历史,显示数量与数字一致。

环境变量 HSITSIZE 是设置shell进程保存命令的条数的,
初始值为1000,即保存1000条.(查看方法 echo $HSITSIZE).
保存在 .bash_history文件里. root目录下 ls -a 可见.
使用命令 cat .bash_history 也可以显示以往命令.但相比HISTSIZE来说会少点,因为还有一些开机
后的命令仍在内存当中,还没放入到存储文件中去.

HISTFILESIZE 命令历史文件大小 此文件只保存1000个命令(前面的会被后面的刷新掉)
特殊情况会超过 比如历史文件中有800个命令,而内存中有300个.但这俩个是单独的,只有等到用户登出系统时,内存中的才会保存到文件中去,此时,由于上限1000个的缘故,文件当中所保存的800个里面,最前面的100个会被刷掉.

调用命令历史中的命令
1 上下箭头翻到后回车
2 !+数字,再一次执行历史列表中的相应数字的命令。
3 !!再一次执行上一条命令。
4 !+命令 再一次执行最近一次(倒序的顺序)指定名字的命令。 可简化为首字母的形式。
一些命令不适合重复执行,比如创建文件,再次执行就会提示文件已存在。
帮助手册,查看日期等可以重复。这些命令重复执行多次,结果是一样的,具有幂等性的。
调用上一条命令的最后一个参数
1 esc键,点号键 逗号表示分开按,加号表示一起按.
2 file !$

控制命令历史记录的方式:
环境变量:HISTCONTROL 有三个选项
默认属性 ignoredups 忽略重复的命令

ignorespace 忽略以空白字符开头的命令 不想被别人看到自己的命令历史,就先设置为这个,然后所有命令都以空白字符打头就不会被保存了. 更改方式 HISTCONTROL=ignorespace即可.

ignoreboth 忽略重复及空白字符开头的.

修改变量的格式 变量名称=要修改的值 =号键等于赋值.(只对当前shell有效).

命令补全:shell在接受到用户执行命令的请求后,分析完成之后,最左侧的字符串会被当做命令,会在其内部寻找,没有就在外部寻找(根据PATH)环境变量中设定的目录,自左而右逐个搜索目录下的文件名.直到找出与用户给出的一致,并将此程序启动为进程.

比如 输入 whereis时候,输入wher按tab键,那么系统会自动补齐为 whereis
但是,只输入wh的话,由于存在多个wh开头的命令,第一次按tab键无反应,第二次按则把所有wh开头的命令全部列出,供用户自选.

路径补全:与命令补齐差不多.
区别 命令补全是根据起始命令来进行补全,路径补全是按起始路径来逐一匹配与用户给出的相同路径,
同时当路径补全遇到,多个目录一致时,列表供用户选择.

利用补充特性,可以有效避免错误,提前察觉到一些根本不存在的文件或命令.

变量就是 有名称的内存空间。
变量类型:×××,浮点型,字符型,布尔型,日期时间型等,分两大类。
1 字符型
2 数值型 分为 精确数值型,近似数值型
变量类型决定了 存储格式,数据的存储范围,参与运算的方式。
1 存储格式
十进制的8,二进制是1000, 8进制是0000 0100,
十进制的16 二进制是10000, 8进制是 0001 0000
数字转换为字符,称为字符集
ASCII码表:一共128个 英文大写26个,小写26个,加上一些数字及控制符号共127(128)个。
每一个二进制对应每一个字符。8个二进制编成一组,叫1字节byte。
2的8次方即256个,超过了英文字符本身,所以通常一个英文字母需要占用1个字节的位置。
但是汉字的数量远远超过256个,所以一个汉字就占用2个字节,也就是2的16次方=65536个。

存储格式不同,占用位置不同。8个位置等于1字节byte
比如存储数字16,当做数值的话,只占用5个位置。但作为字符,则需要16个位置。
存储数字160,当做数值的话,8个位置也足够。10100000
但作为字符,则需要三个字节,一个字节存1,一个字节存6,一个字节存0.共计3*8=24个位置。

变量的赋值操作,就是向变量所代表的存储空间去存数据,
比如 name=tom 就是把name这个变量所指向的存储空间,替换为tom这三个名字的值。

马哥学习周总结第一周→linux简介、’文件系统及基础命令------李洋个人笔记。

原文:http://blog.51cto.com/13477118/2120863

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!