Linux学习笔记
1、目录的权限:r表示可不可以显示目录。w表示能否对目录下档案进行新建、删除、重命名等操作。x表示能否进入该目录,即将该目录变为当前的工作目录。
2、linux档案没有所谓的扩展名,linux档案的扩展名只起提示作用(用以表示档案的内容等信息)。
3、linux下档案能否被执行与档案的扩展名无关,只要档案的权限当中具有x的话,例如[-rwxr-xr-x]即代表这个档案可以被执行。(可以被执行与能被执行成功是两个概念)。
4、绝对路径:一定由根目录/写起的路径。
相对路径:相对于目前工作目录的路径。
5、 · 代表此层目录
·· 代表上一层目录
- 代表前一个工作目录
~ 代表当前用户的家目录
~account 代表account这个用户的家目录
6、pwd:print working directory
注意:
选项-P(大写) 表示显示出确实的路径,而非使用链接(link)文件的路径显示。
7、mkdir:创建目录
注意:
选项 -m 表示配置档案权限!不需要看预设权限(umask)的脸色
例:mkdir -m 766 test (test的权限为drwxrw-rw-)
选项 -p(小写) 表示递归建立目录(包括上层目录)
例:mkdir -p test/test1/test2
8、rmdir:remove directory(empty)
选项:
-p:连同上层[空目录]也一起删除
注意:删除对象必须为空目录
9、echo $PATH
echo:显示、印出
PATH:前面加$表示后面接的是变量,所以会显示出目前的PATH!
10、PATH:环境变量
PATH="$PATH":/root :将/root加入PATH当中
注意:
不同身份使用者预设的PATH不同,默认能够随意执行的指令也不同。
PATH是可以修改的,所以一般使用者还是可以透过修改PATH来执行某些位于/sbin或
/usr/sbin下的指令来查询。
使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻PATH来的正确。
指令应该要放置到正确的目录下,执行才会比较方便。
本目录(.)最好不要放置到PATH当中。
11、cp:
选项:
-a:相当于 -pdr 的意思
-p:连同[档案]的属性一起复制过去,而非使用默认属性
-r:递归持续复制,用于目录的复制行为
-i:若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行
cp hello.c hi.c 复制hello.c到当前目录,并重命名为hi.c
cp hello.c hi.c test/ 将hello.c与hi.c一并复制到test目录下1221
12、rm:
选项:
-f:就是force的意思,忽略不存在的档案,不会出现警告信息
-i:互动模式,在删除前会询问使用者是否动作
-r:递归删除,常用在目录的删除。
删除一个带有 - 开头的档案(-test): rm ./-test 或 rm -- -test
13、rm -i hello*中,*(星号)代表的是0到无穷多个任意字符
14、mv:
mv [-fi] source destination
mv [options] source1 source2 source3 .... directory
-f:force强制的意思,如果档案已经存在,不会询问而直接覆盖
-i:若目标档案(destination)已经存在时,就会询问是否覆盖
目录更名: mv mvtest mvtest2 (将目录 mvtest 更名为 mvtest2)
15、umask:
umask : 0002
umask -S: u=rwx,g=rwx,o=rx
umask为002,所以拿掉的权限为--------wx,因此:
档案:(-rw-rw-rw-)-(--------w-)=(-rw-rw-r--)
目录:(drwxrwxrwx)-(--------w-)=(drwxrwxr-x)
16、file:
查阅文件格式,以及有没有使用动态函数库(shared library)等等信息
17、which:寻找[执行档]
-a:将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称。
这个指令是根据[PATH]这个环境变量所规范的路径,去搜寻[执行档]的档名。
which cd:找不到cd这个常用的指令,因为cd是[bash内建的指令],而which预设
是找PATH内所规范的目录,所以找不到。
18、whereis locate find
19、gzip , zcat
gzip [-cdvk] 档名
-v:可以显示出原档案/压缩文件档案的压缩比等信息;
-d:解压缩的参数
-c:将压缩的数据输出到屏幕上,可透过数据流重导向来处理
-k:保留源文件,而不会删除原始的档案喔!
注意:
使用gzip进行压缩时,在预设的状态下原本的档案会被压缩成.gz的档名,源文件就不再存在了。
gzip -c hello.c > hello.c.gz : 将hello.c压缩,并保留原本的档案。
zcat 档名.gz :读取纯文本档被压缩后的压缩档。
20、bzip2 [-cdvk] 档名
-v、-d、-c如上 gzip 的选项
-k:保留源文件,而不会删除原始的档案喔!
bzcat 档名.bz2 :读取纯文本档被压缩后的压缩档。
21、tar
压缩:tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称
查询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
选项:
-j:透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2 。
-z:透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz 。
-c:建立打包档案,可搭配 -v 察看过程中被打包的档名(filename)。
-t:察看打包档案的内容含有哪些档名,重点在察看[档名]就是了。
-x:解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开。
-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-C(大写):这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
注意:
-c, -t, -x 不可同时出现在一串指令列中。
22、tar:解压缩中,仅解压单一档案的方法。
tar -jxv -f 打包档案.tar.bz2 待解开档名
23、tar:打包某目录,但不含该目录下的某些档案
tar -jcv -f 打包档名.tar.bz2 --exclude=file1 --exclude=file2 ... 待压缩目录
24、如果需要两行输入时,最后面加上反斜杠(\)并立即按下[enter],就能够第二行继续输入了。
25、vim:
一般模式:光标移动、复制贴上、搜寻取代等
(1)光标移动:
h:光标向左移动一个字符
j:光标向下移动一个字符
k:光标向上移动一个字符
l:光标向右移动一个字符
0:数字0,移动到这一行的最前面字符处
$:移动到这一行的最后面字符处
G:移动到这个档案的最后一行
nG:跳转到第n行。n为数字即你要跳转到的行号
gg:移动到这个档案的第一行
n<Enter>:n 为数字。光标向下移动 n 行
(2)搜寻与取代:
/world :向光标向下寻找一个名称为 word 的字符串
?world :向光标之上寻找一个名称为 word 的字符串
:n1,n2s/word1/word2/g : n1与n2 为数字。在第 n1 到 n2 行之间寻找 word1 这个字符串,并将该字符串替代为 word2 !
:1,$s/word1/word2/g :从第一行到最后一行寻找 word1 字符串,并将该字符串替代为word2 !
:1,$s/word1/word2/gc :从第一行到最后一行寻找 word1 字符串,并将该字符串替代为word2 !且在替代前显示提示字符给用户确认(confirm) 是否需要替代!
(3)删除复制和贴上
x,X :x向后删除一个字符,X为向前删除一个字符
dd :删除游标所在的那一整行
ndd:删除游标所在的向下n行
yy:复制游标所在的那一行
nyy:复制游标所在向下的n行
p/P:p将已复制的数据在光标下一行贴上,P则为贴在游标上一行
u:复原前一个动作
[Ctrl]+r:重做上一个动作
(4)区块选择
v:字符选择,会将光标经过的地方反白选择
V:行选择,会将光标经过的行反白选择
[Ctrl]+v:区块选择,可以用长方形的方式选择资料(常用于排列整齐的文本文件中)
y:复制选白区块
d:删除选白区块
(5)多档案编辑:vim file1 file2 file3-----
:n 编辑下一个档案
:N 编辑上一个档案
:files 列出目前这个vim所开启的所有档案
(6)多窗口编辑功能
:sp filename 开启一个新窗口,并在新窗口开启一个新档案filename
[ctrl]+w+j或[ctrl]+w+↓ 光标移动到下方窗口 先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键)
[ctrl]+w+k或[ctrl]+w+↑ 光标移动到上方窗口
[ctrl]+w+q 其实就是:q结束离开
其他
set nu:显示行号
set nonu:取消行号
26、
~/.bash_history 记录前一次登入及其以前所执行过得指令,而至于这次登入所执行的指令都被暂存在内存中,当你注销系统后,该指令记忆才记录到.bash_history当中。
alias 命令别名设定,例如 [alias lm='ls -al'] 。
指令太长换行使用反斜杠\ 注意:[\Enter]。
通配符
* 0到无穷多个任意字符
? 一定有一个任意字符
[] 一定有一个在括号内的字符。
例:[abcd]代表一定有一个字符,可能是a,b,c,d这四个任何一个
[-] 编码顺序内的所有字符。
例:[0-9]代表0到9之间的所有数字中的任何一个
[^] 反向选择
例:[^abc]一定有一个字符,只要是非a,b,c就接受
特殊符号
# 注释符号:这个最常被使用在 script 当中,规为说明其后面数据均不执行
\ 跳脱符号:将[特殊字符或通配符]还原成一般字符
| 管线 (pipe):分隔两个管线命令的界定(后两节介绍);
; 连续指令下达分隔符:连续性命令的界定
~ 用户的家目录
$ 取用变量前导符
& 工作控制 (job control):将指令变成背景下工作
! 逻辑运算意义上的[非] not 的意思
/ 目录符号:路径分隔的符号
>, >> 数据流重导向:输出导向,分删是[取代]与[累加]
<, << 数据流重导向:输入导向
' ' 单引号,不具有变量置换的功能
" " 具有发量置换的功能
` ` 两个反引号中间,为可以先执行的指令,亦可使用 $( )
( ) 在中间为子 shell 的起始与结束
{ } 在中间为命令区块的组合
27、
Shell变量:PATH MAIL 自己设定的变量 等等
(1) 变量到取用:echo $变量名
(2) 变量的设定:
1 变量名=变量的内容 例如:myname=suph
2 等号两边不能直接接空格符 错误:myname= suph或myname= suph ss
3 变量内容若有空格符可使用双引号"或单引号'将变量内容结合起来
双引号内的特殊字符如$等,可以保留原本的特性
例如:var="lang is $LANG"则echo $var 可得lang is en_US
单引号内的特殊字符则仅为一般字符(纯文本)
例如:var='lang is $LANG'则echo $var 可得lang is $LANG
4 变量名只能是英文子母与数字,但是开头字符不能是数字 错误:2myname=suph
5 可用跳脱符\将特殊符号(如' " \ 空格建 Enter等)变为一般字符
6 在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号 `指令` 或 $(指令)。
在一串指令中,`指令` 与 $(指令)中的指令优先执行
例如:进入核心模块目录
cd /lib/modules/`uname -r`/kernel
或cd /lib/modules/$(uname -r)/kernel
7 扩增变量内容,可用 "$变量名"或${变量名}累加内容,如下:
PATH="$PATH":/home/bin PATH=${PATH}:/home/bin
8 取消变量的方法为使用unset: unset 变量名称
简单应用:若你有一个常去的目录 ~/test/test1/test2,如何进行该目录简化
work=~/test/test1/test2 cd $work
9 export :自定义变量转成环境变量(分享自己的变量设定给后来呼叫的档案或其他程序)
export 变量名称
10 read 读取键盘输入的变量 read 变量名
-p :后面可以接提示字符
-r :后面可以接等待的秒数
read -p "Please keyin your name: " -t 30 name
11 declare 宣告变量类型 declare [选项] variable
-a:将variable变量定义为数组类型
-i:将variable变量定义为整数数字类型
-x:与export类似,将variable变成环境变量
-r:将变量设定为readonly类型,改变了不可被更改,也不能unset
例1:#sum=100+300+50
#echo $sum
100+300+50
例2:#declare -i sum=100+300+50
#echo $sum
450
变量类型默认为字符串,所以若不指定变量类型,则100+300+50为一个字符串而不是计算式
12 数组变量类型
声明:declare -a var(即数组名)
赋值:var[1]=content1
var[2]=content2
...
读取:echo "${var[1]},${var[2]},${var[3]}"
content1,content2,...
13 ?问号也是一个特殊的变量。其是上一个执行的指令所回传的值
一般来说,如果成功的执行该指令,则会回传一个0值,如果执行过程发生错误,就会回传错误代码(一般为非零值)
28、数据流重导向
就是将某个指令执行后应该要出现在屏幕上的数据,给他传输到其他的地方,例如档案或装置(例如打印机之类)
standard output(stdout):标准输出(指令执行所回传到屏幕的正确的讯息)
standard error output(stderr):标准错误输出(指令执行失败后,所回传到屏幕的错误讯息)
数据流重导向可以将stdout与stderr分别传送到其它的档案或装置中
标准输入 (stdin):代码0,使用<或<<
标准输出 (stdout):代码1,使用>或>>
标准错误输出(stderr):代码2,使用2>或2>>
若以>输出到一个已存在的档案中,那个档案会被覆盖掉
若以>>输出到一个已存在的档案中,则数据会在该档案的最下方累加进去
若档案不存在会新建一个同名档案
有些命令执行后,既会输出正确信息,也会输出错误信息,也可以将其分别输出到不同的档案中去: command >list_right 2>list_err
/dev/null 垃圾桶黑洞装置。将错误信息丢弃:comand 2>/dev/null
将正确与错误的数据全部写入同一个档案中去,因为两股数据可能会交叉写入档案内造成混乱,所以得要使用特殊的语法:
command >list 2>&1 或 command &>list
standard input: < 与 <<
将原本需要由键盘输入的数据,改由档案内容来取代
29
不考虑指令相关性的连续指令下达:cmd1;cmd2;cmd3;...
指令之间有相依性,而这个相依性主要判断的地方就在于前一个指令执行的结果是否正确。
指令回传值:若前一个指令执行的结果为正确,在linux下会回传一个$?=0的值
利用回传值来判断后续的指令是否要执行,可藉由&&及||。指令执行顺序为自左向右。
cmd1 && cmd2
1. 若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2。
2. 若 cmd1 执行完毕且为错误($?≠0),则 cmd2不执行。
cmd1 || cmd2
1. 若 cmd1 执行完毕且正确执行($?=0),则 cmd2不执行。
2. 若 cmd1 执行完毕且为错误($?≠0),则开始执行 cmd2。
例:ls ~/hello || mkdir ~/hello && vim ~/hello/hi.c
若hello存在,则执行顺序为ls->vim,mkdir不执行
若hello不存在,执行顺序为ls->mkdir->vim
例:假设判断式:command1 && command2 || command3
若command1成功,执行command2
若command1不成功,执行command3
(command2与command3会放置肯定可以执行的指令)
30
管线命令仅会处理standard output,对于standard error output 会予以忽略。
管线命令必须能够接受前一个指令的数据成为standard input继续处理才行。