1、ls 列出文件或目录下的文件名
2、常用小知识点
2.1“*”通配符,表示一个或多个,eg:ls *.txt 输出所有的.txt文件。
2.2“?”表示一个 ,eg : ls ?.txt。
2.3 “[]”表示任选其中的一个, eg: ls [12].txt 表示输出1.txt,2.txt文件。
2.4“|”称为管道,把前一个参数的输出作为下一个参数的输入。
2.5 ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停
2.6 & 这个用在一个命令的最后,可以把这个命令放到后台执行
2.7 jobs 看当前有多少在后台运行的命令
2.8 echo 输出变量时,变量前面要加上$符号。
2.9 cp -r 复制文件及目录
2.9 fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
2.10 .bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
3、cat
3.1 一次显示整个文件
cat filename
3.2 创建新文件
cat > newFilename
ctrl + c 保存
3.3 将几个文件合并为一个文件
cat file1 file2 > file
4、输出重定向 > ,>> ,2>,2>>
echo 'xxx' > fileName 把字符xxx放入文件fileName 中,此时fileName 中只有xxx(不管之前fileName 中有没有内容)
4.2 >>
输出(标准输出和标准错误输出)重定向的代表符号,不清除原有内容,在原有基础上进行追加
echo 'xxx' >> fileName 把字符xxx追加到文件fileName后面
4.3 2>
将标准错误输出重定向
'xxx' 2> fileName 这时候会把错误信息重定向到文件fileName 中;
4.4 2>>
将标准错误输出追加到文件上
'xxx' 2> fileName 这时候会把错误信息追加到文件fileName 中;
5、&&和&,|和||
& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'
| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"
6、vi/vim 全屏编辑
6.1 vi的启动
在shell命令状态下输入
vi filename(打开现有文件,或编辑新文件)
6.2 vi的插入命令
i :在光标所在的字符前插入
I :在光标所在的行首插入
a :在光标所在字符后插入
A :在光标所在的行尾插入
o : 在光标下输入一行
O:在光标上输入一行
6.3 退出命令:Esc按钮
6.4 删除命令
x 删除光标所在的字符
dd删除光标所在的行
D删除光标所在处的本行的后面的字符
6.5 复制命令
yy 复制所在的行
+p 复制到光标所在行的下面
+P 复制到光标所在行的上面
6.6 替换命令
r 替换光标所在的字符
R 替换光标所在的字符后的本行字符
6.7 退出命令
:wq 文件存盘退出(written quite)等价于“x”:q! 不存盘强制退出
:wq newfilename 存为新文件newfilename
6.8 vi其他常用操作
:X 加密
:e! 撤销操作 或u
:%s/被替换的/替换着 只替换开头
:%s/that/this/g 替换全部
:%s/that/this/gc 逐个询问是否替换
:1,5s/that/this
:set nu 表示脚本的行号
:set nonu 不显示脚本的行号
:gg 移动到行首
:G 移动到行尾
:行号 移动到指定的行号
: r !+ 内部命令 把得出的结果写到光标所在的行
eg:r ! date
6.9 查找命令
:/查找的内容 整箱查找 n表示向上,N表示向下查找
:?查找的内容 整箱查找 n表示向上,N表示向下查找
进入命令模式
当我们完成修改输入等操作的时候我们需要保存文件,这时我们需要先返回命令模式,
在进入末行模式保存。
末行模式:在命令模式输入“:”即可进入该模式,在末行模式中有好多好用的命令
7 单引号‘’,双引号“”以及反引号``的的使用
7.1 `` 反引号
位于键盘的Tab键的上方、1键的左方。注意与单引号(')位于Enter键的左方的区别
在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。
如下,shell会执行反引号中的date命令,把结果插入到echo命令显示的内容中
echo The date is `date`
7.2 单引号‘’
单引号、双引号用于用户把带有空格的字符串赋值给变量事的分界符。
单引号和双引号的区别。单引号告诉shell忽略所有特殊字符,而双引号忽略大多数,但不包括$、\、`。
testvalue=100
echo 'The testvalue is $testvalue'
The testvalue is $testvalue
echo "The testvalue is $testvalue"
7.3 双引号“”
str="Today is Monday"
echo $str
8 、grep
搜索文件中的符合的内容(行)
-c 只输出匹配行的计数
-n 显示匹配行及行号。
-v 显示不包含匹配文本的所有行。
-i 忽略大小写
--color 加颜色
8.1 在文件中搜索一个单词,命令会返回一个包含“match_pattern”的文本行
grep match_pattern file_name
grep "match_pattern" file_name
8.2 在多个文件中查找:
grep "match_pattern" file_1 file_2 file_3 ...
8.3 输出除之外的所有行 -v 选项:
8.4 标记匹配颜色 --color=auto 选项:
grep "match_pattern" file_name --color=auto
9、正则表达式
用来在文件中匹配符合条件的字符串
* 前一个字符匹配0次或任意多次
. 匹配除了换行外的任意一个字符
^ 匹配行首 eg :^hello 匹配以hello开头的行
$ 匹配行尾 eg: hello$ 匹配以hello结尾的行
[] 匹配中括号中指定的任意一个字符,只匹配一个字符 eg:[0-9]匹配任意一个数字,[a-z][0-9]匹配小写字母和一位数字构成的两位数
[^] 匹配除括号中的任意一个字符
\ 转移符 用于取消特殊符号的含义
\{n\} 表示其前面的字符恰好出现n次 eg : [0-9]\{4\}匹配4位数字 ;[1][3-8][0-9]\{9\}匹配手机号码。
\{n,\} 表示其前面的字符出现不小于n次。例如 : [0-9]\{2,\}表示两位及以上的数字。
\{n,m\} 表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8\}匹配6到8位的小写字母。
grep "s..d" fileName
"s..d" 匹配在s和d这两个字母之间一定有两个字符的单词
grep "s.*d" fileName
"s.*d" 匹配在s和d字母之间有任意字符
grep ".*" fileName
".*" 匹配所有内容
grep "^[^a-zA-Z]" 匹配所有不以字母开头的内容
grep "sa\{1,3\}" fileName 匹配文件fileName中a连续出现一到三次的sa..字符;比如sa ,saa,saaa
ls -l | grep '^a'
通过管道过滤ls -l输出的内容,只显示以a开头的行。
grep 'test' d*
显示所有以d开头的文件中包含test的行
grep 'test' aa bb cc
显示在aa,bb,cc文件中匹配test的行
grep '[a-z]/{5/}' aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行
10、通配符
用来匹配符合条件的文件名,用来是完全匹配
ls 、find 、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了“*”,表示零个或多个;
eg:grep ro*t 1.txt表示从1.txt文件中搜索所有以r开头,以t结尾,中间有零个或多个o的字符串。
“?”,表示零个或一个问号前面的字符;“.”表示任意一个字符;
“+”表示一个或多个加号前面的字符。
注意:通配符和正则表达式可能有相同的字符,但含义有可能不相同
11、find 命令
用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find path -option [ -print ] [ -exec -ok command ] {} \;
列出当前目录及子目录下所有文件和文件夹
find
在
/home
目录下查找以.txt结尾的文件名
find /home -name "*.txt"
注意:find *.txt 等价于 find -name "*.txt"
同上,但忽略大小写
find /home -iname "*.txt"
当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find \( -name "*.txt" -o -name "*.pdf" \)
或
find -name "*.txt" -o -name "*.pdf"
根据文件类型进行搜索
find . -type 类型参数
类型参数列表:
- f 普通文件
- l 符号连接
- d 目录
- c 字符设备
- b 块设备
- s 套接字
- p Fifo
基于目录深度搜索
向下最大深度限制为3
find -maxdepth 3 -type f
搜索出深度距离当前目录至少2个子目录的所有文件
find -mindepth 2 -type f
搜索最近七天内被访问过的所有文件
find -type f -atime -7
搜索恰好在七天前被访问过的所有文件
find -type f -atime 7
搜索超过七天内被访问过的所有文件
find -type f -atime +7
搜索访问时间超过10分钟的所有文件
find -type f -amin +10
根据文件大小进行匹配
find -type f -size 文件大小单元
文件大小单元:
- b —— 块(512字节)
- c —— 字节
- w —— 字(2字节)
- k —— 千字节
- M —— 兆字节
- G —— 吉字节
搜索大于10KB的文件
find . -type f -size +10k
搜索小于10KB的文件
find . -type f -size -10k
搜索等于10KB的文件
find . -type f -size 10k
12、cp 命令
用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
将文件file复制到目录/usr/men/tmp
下,并改名为file1
cp file /usr/men/tmp/file1
将目录
/usr/men
下的所有文件及其子目录复制到目录
/usr/zh
中
cp -r /usr/men /usr/zh
将目录
/usr/men
中的以m打头的所有.c文件复制到目录
/usr/zh
中
cp -i /usr/men m*.c /usr/zh
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
p aaa/* /bbb
复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。
cp -r aaa/* /bbb
这次依然需要按Y来确认操作,但是没有忽略子目录。
cp -r -a aaa/* /bbb
依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。
\cp -r -a aaa/* /bbb
成功,没有提示按Y、传递了目录属性、没有略过目录。
13、diff 命令
用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。
文件比较:
diff fileName1 fileName2
上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件1中的行号,"n3"、"n4"表示在文件2中的行号。
注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于fileName1,以>开始的行属于文件fileName2。
eg: diff demo1 demo2
demo1的内容如下:
zhang
dd
ff
demo2的内容如下:
zhang
1
dd
w
ff
执行结果如下:
1a2
>1
2a4
>w
1a2
>1 表示demo2的第2行 新增了内容为1;
2a4
>w 表示demo2的第4行新增内容内容 w;
demo1的内容修改如下:
zhang
dd
ff
diff结果如下:
1a2
>1
3c4
<
---
>w
其中
3c4
<
---
>w 表示demo1的第3行和demo2的第四行有修改 demo1的第三行为 (空行),demo2的第4行为w
f