《Linux私房菜》读书笔记
- 在 Linux系统中,每一个硬件设备都被当成一个文件来对待,几乎所有的硬件设备文件都在 /dev这个目录下。
- 挂载,所谓挂载就是用一个目录当成进入点,将磁盘分区的数据放置在该目录下,也就是说,进入该目录就可以读取该分区的。
文件权限的概念:
eg:drwxr-xr-x 5 root admin 170 4 2 14:46 Users
a. 第一个字符d代表这个文件是目录、文件、或链接文件,即文件类型;
b. 接下来,三个一组,分别代表着文件所有者、同用户组下其他用户、非本用户组其他用户的权限(r:可读 w:可写 x:可执行,但不一定能执行成功);
c. 第二列代表有多少文件连接到此节点,第三列、第四列分别代表这个文件的所有者与所属用户组,接着是文件大小(Byte),之后是创建或修改日期,最后是文件名;
d. r:可读权限(可用数字4表示),对于目录来说表示可以读取目录结构列表的权限(ls -l);
e. w:可写权限(可用数字2表示),对于文件来说,可以修改,新增,编辑文件内容,但不能删除,而对于目录来说,则可以新建或删除目录与文件,重命名目录与文件;
f. x:可执行权限(可用数字1表示),对于目录来说,说明能进入此目录下,如果没有 x权限,即使有 r权限,也无法切换到该目录下;文件属性与权限的修改:
a,chgrp
:改变文件所属用户, eg:chgrp [-R] groupName dirName/FileName
;
b,chown
:改变文件的所有者,eg: chown [-R] ownName dirName/FileName
;
c,chmod
:改变文件的权限,eg:chmod [-R] premissNum dirName/FileName
;
除了直接用数字,还可以用下面的方式修改文件的权限:chmod u/g/o/a +/-/= r/w/x dirName/FileName
; 其中 u表示文件所有者,g表示文件所在的组,o表示 others, +表示加入,-表示除去,=表示设置,r/w/x 表示相应权限- 文件与目录相关的命令:
- 此层目录. 上层目录.. 目前用户所在的主文件~
-
cd dir
: 切换目录pwd
:显示当前目录 -
mkdir [-mp] dirName
:新建目录, -m:配置文件权限, -p:递归新建目录 -
rmdir [-p] dirName
: 删除空的目录 -p:递归删除空目录 -
echo inof
: 打印信息 eg:echo $PATH
- PATH这个变量是由一堆目录所组成,每个目录中间用冒号(:)隔开
-
ls [-adhl] driName
:查看文件与目录, -a:全部文件 ,-d :仅列出目录本身,而不是目录中的文件 ,-h:将文件容量以易读的方式列出来,-l:列出文件的各种属性 -
cp [-irp] source destination
:复制文件,-i:若目标文件destination已经存在,在覆盖时会提示, -r:递归持续复制,用于复制目录, -p:连同文件属性一同复制过去。 -
rm [-fir] fileName
:删除文件, -f:强制删除,忽略不存在的文件,无警告信息,-i:有提示信息,-r:递归删除,用于目录 -
mv [-fiu] source destination
:移动文件或重命名,-f:强制移动,覆盖destination,-i:有提示信息,-u:如果destination存在,只有source比较新时才覆盖 - cat [-bn] fileName : 由第一行查看文件内容,-b,对非空白行做行号显示,-n,显示所有行号
-
tac fileName
:反向查看文件,由最后一行开始 -
nl [-bnw] fileName
:添加行号打印 -
more fileName
: 向下翻页查看, 空格:下一页, Enter:下一行 ,q:离开, 在输入/后输入你想查询的字符串,按下Enter就会向下查找相关字符串 -
less fileName
:翻页查看,与more类似,不过支持向上翻页(PageUp), 支持向上查找:?要查找的字符串 Enter - 数据选取
head [-n number] fileName
:取出前面几行 - 数据选取
tail [-n number] fileName
:取出后面几行 -
od [-t TYPE] fileName
:查看非文本文件
TYPE有以下常用值:
c:使用 ASSII 字符输出
x[size]:使用十六进制输出,每个整数占size bytes -
touch file
:创建文件或修改文件时间 -
file fileName
: 查看文件类型 -
which [-a] command
: 寻找执行文件 -a:将所有 PATH目录中找到的都列出来,而不是仅仅是第一个 -
whereis [-bmsu] fileName
: 寻找特定文件,基于数据库(手动更新数据库:updatedb) -
locate [-ir] keyWord
:通过文件名称关键字寻找文件,基于数据库(手动更新数据库:updatedb),-i :忽略大小写 -
find [PATH] [option] [option]
:基于硬盘扫瞄的查找,可指定查看路径与查找条件
eg :find /home -name "*rubin*"
- 常见压缩命令:
- 常见压缩文件扩展名:
- *.gz :gzip 程序压缩的文件
- *.bz2 :bzip2 程序压缩的文件
- *.tar :tar 程序打包的文件,但未经压缩
- *.tar.gz :tar 程序打包并经gzip 程序压缩的文件
- *.tar.bz2 :tar 程序打包并经bzip2 程序压缩的文件
tar打包可以将多个文件或目录打包成一个文件
-
gzip [-cdv#] fileName
:gzip压缩命令,-c:将压缩的数据输出到屏幕上 ; -d :解压缩 ;-v:显示压缩比等参数;-#:压缩等级 -1,最快,但质量差,-9,最慢
eg:gzip -9 -c man.config > man.config.gz
,加上>newFileName 之后原文件才会被保留,否则原文件会被替换;-
zcat fileName.gz
: 可以用来读取通过 gzip压缩后的文件而无需解压; -
bzip2 [-cdkzv#]
: bzip2压缩命令 ,-c:将压缩的数据输出到屏幕上 ; -d :解压缩 , -k:保留原文件;-z:压缩;;-v:显示压缩比等参数;-#:压缩等级 ;
eg:bzip2 -9 -c man.config > man.config.bz2
与bzip2 -9 -c -k man.config
效果一样;-
bzcat file.bz2
:可以用来读取通过 bzip2压缩后的文件而无需解压; -
tar -jvc -f fileName.tar.bz2 要被压缩的文件或目录
: tar 打包bzip2压缩 -
tar -jtv -f fileName.tar.bz2
:查询 -
tar -jxv -f fileName.tar.bz2 -C 欲解压的目录
:对tar 打包bzip2压缩的文件进行解压缩 -
tar -zvc -f fileName.tar.gz 要被压缩的文件或目录
: tar 打包gzip压缩 -
tar -ztv -f fileName.tar.gz
:查询 -
tar -zxv -f fileName.tar.gz -C 欲解压的目录
:对tar 打包gzip压缩的文件进行解压缩
说明:6~11中的参数 -j:通过 bzip2进行解压缩; -z:通过 gzip进行解压缩; -v:打印正在处理的文件; -c(小写):新建打包文件; -f:要被处理的文件; -t:查看打包压缩文件包含 那些文件;-x:解打包或解压缩; -C(大写):指定在特定目录解压
-
-
- vim 程序编辑器
- vi的三种模式: 一般模式、编辑模式 、命令行模式
-
常用功能键说明:
- Ctrl f:向下翻页
- Ctrl b :向上翻页
- n : n代表数字,向右移动这一行的 n个字符
- 0 :移动到这一行的最前面
- nG:n代表数字,移动到这个文件的第 n行
- G:移动到文件的最后一行
- gg:移动到文件的第一行,相当于1G
- /word :向下寻找一个名称为 word 的字符串
- ?word:向上寻找一个名称为 wordr的字符串
- n : 代表重复前一个查找的操作
- N :代表重复前一个查找的操作,不过方向为反方向
- :set nu :设置显示行号
- :set nonu:取消行号
- 当我们在使用 vim 编辑时,vim 会在被编辑文件的目录下新建一个名为.fileName.swp的文件,我们对文件的操作都会被记录在这个 .swp文件中,当非正常退出 vim(或当前文件在被其他人编辑)时可以用它来恢复数据。如图:
从图中可以看出 swp提供了6种操作: - [O] pen Read-Only :以只读的方式打开此文件
- (E)dit anyway : 用正常的方式打开你要编辑的文件,丢弃暂存区的内容
- (R)evover :加载暂存区的内容
- (D)elete : 删除暂存文件
- (Q)uit :离开 vim
- (A)bort : 忽略这个编辑行为,与 quit 类似,
- 当我们在使用 vim 编辑时,vim 会在被编辑文件的目录下新建一个名为.fileName.swp的文件,我们对文件的操作都会被记录在这个 .swp文件中,当非正常退出 vim(或当前文件在被其他人编辑)时可以用它来恢复数据。如图:
-
认识bash:
- bash是 linux默认的 shell,而 广义的shell 是指能够操作应用程序的接口,狭义的 shell指的是命令行方面的软件。
- [Tab]接在一串命令命令的第一个字后面,则为命令补齐,如果是接在第二个字以后,则为文件名补齐;
-
type cmd
:用来显示这个命令是外部命令还是 bask内置命令,file:表示外部命令,alias:别名,builtin:内置; - \[Enter]表示换行,中间不能有空格(转义)
- 变量:
-
echo $varName
、echo ${varName}
:可用来显示变量; -
varName=varValue
:设置变量,=两边不能有空格;变量名称只能是字母或数字,但不能以数字开头;内容如有空格符可用”” 或”将内容组织起来,双引号会保留特殊字符(eg:$)的作用;如果变量需要在其他子进程执行,则要以 export 来使自定义变量(局部变量)变成环境变量(全局变量); -
unset varName
:取消变量; -
read [-pt] varName
:从键盘的输入中读取变量值,变量默认为字符串,-p:可以接提示符 , -t:可以接等待时长(秒) -
declare [-aixr] varName=varValue
:声明变量类型, -a:数组 ; -i: int ; -x :用法与 export一样;-r:声明变量只读;
eg :declare -a names names[0]=value0 names[1]=value1 echo "${names[0]} , ${names[1]}"
-
alias aliasName='var/cmd'
:别名的设置,=两边不能有空格;unalias aliasName
:取消别名; -
hsitory [n] [-c]
:查询历史命令, n:数字,列出最近的 n条命令,-c :删除历史命令
-
- 命令的查找顺序:
- 以相对/绝对路径执行命令;
- 由 alias找到该命令来执行;
- 由 bash 内置的(builtin)命令来执行;
- 通过$PATH 这个变量的顺序找到第一个命令来执行;
- /etc/profile :这是系统整体的设置;~/.bash_profile、~/.bash_login 、~/.profile:属于用户自己的设置;
-
source 配置文件
:读入环境配置文件 - 数据流重定向:
-
>
:以覆盖的方法将正确的数据输出到文件或设备上; -
>>
:以累加的方法将正确的数据输出到文件或设备上; -
2>
:以覆盖的方法将错误的数据输出到文件或设备上; -
2>>
:以累加的方法将错误的数据输出到文件或设备上; -
/dev/null
:/dev/null可以吃掉任何导向这个设备的信息 eg:ls /dir 2>/dev/null
,忽略错误信息; -
<
:读取一个文件的内容,eg:cat > catFile < ~./bash_profile
,创建一个 catFile,catFile的内容从~./bash_profile读取; -
<<
:代表结束输入的意思,eg:cat > catFile <<"eof"
,创建一个 catFile,catFile的内容从键盘输入中读取,遇到”eof”结束读取;
-
- 命令执行的判断:
- cmd1 && cmd2 : 若cm1执行完毕且正确执行(命令回传码$?=0),则开始执行 cmd2 ;否则 cmd2不执行
-
cmd1 || cmd2 : 若cm1执行完毕且正确执行(命令回传码$?=0),则 cmd2不执行 ;否则 cmd2执行
说明:Linux 的命令是由左往右执行的,eg:
cmd1 || cmd2 && cmd3
如果 cmd1正确执行,那么 cmd2不会执行,cmd1结果传递给 cmd3,cmd3执行;
如果 cmd1 执行失败,那么 cmd2执行 ,cmd2结果传递给 cmd3; -
管道命令:管道命令使用的是”|” 这个界定符,eg:
ls -al | less
。管道命令仅会处理 standard output,对于standard err output会忽略,同时管道命令必须要能够接收前一个命令的数据成为standard input 才能继续处理;- 选取命令:
-
cut -d '分隔字符' -f fields
:用于分隔字符, -d:指定以什么字符分隔, -f fields,取出第几段,也可以是个范围
eg:echo $PATH | cut -d ':' -f 5
echo $PATH | cut -d ':' -f 1、5
-
grep [-cinv] '查找的字符串' [fileName]
: 以行为单位,将符合条件的行选取出来, -c:计算找到的总行数,-i:忽略大小写,-n:顺便输出行号,-v,反向选择,即找不包含指定字符串的。
eg:echo $PATH | grep -i 'java'
grep -ic 'google' etc/hosts
-
- 选取命令:
wc [-lwm]
:统计一个文本有多少行,多少字,-l:仅列出行;-w:仅列出多少个英文单字;-m:多少个字符;用户身份切换:
1. su [-lm] [-c cmd] [userName]
2. sudo [-b] [-u 新用户帐号] :sudo 可以让你让其他用户的身份(通常是 root)来执行命令