shell常用命令
more
查看文件里的内容
- return键:换行
- 空格键:下一页
- b: 后退,上一页
- /pattern:查找文档中pattern
- q:强制退出
ls
展示文件夹内内容
- ls:输出文档基本属性
- ls -l: 长数据串行出,包含档案的属性等等数据
- ls -a:全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来,隐藏文档以一个点开头
- ls -F:根据档案、目录等信息,给予附加数据结构,例如: *:代表可执行档; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案;
- ls -R:连同子目录内容一起列出来
- ls -Rl:结合了R和l的功能,列出所有目录包括子目录的属性
- ls -lFa:组合功能,列出所有文件以及隐藏文件的属性以及附加数据结构
mkdir
命令创建目录
- mkdir 目录名:在当前路径下创建目录
- mkdir newdir/sub1 newdir/sub2 newdir/sub3:同时创建多个已存在目录的子目录
- mkdir -p newdir/sub1:当newdir不存在的时候也能创建
cd
切换当前目录
- cd ~/SAN/unixlab1:采用绝对路径的方式切换路径
- cd unixlab1:采用相对路径的方式切换路径
- cd ..:切换到上一级目录
- cd /:切换到根目录
rmdir
删除目录
- rmdir newdir:删除当前文件夹下的newdir,当其不包含子目录时删除
- rmdir newdir/*:删除newdir中的所有文件
cat
连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。部分功能与more类似
- cat test1: 查看test1中内容
- cat -n test1:不仅显示内容,同时显示内容的行序号
- cat test1 test2 > newtest:连接两个文件test1和test2的内容到newtest,注意此过程也包含创建newtest文件
cp
复制作用
- cp test1 test1b:复制test1文件,同时存在内容相同的文件test1和test1b,若test1b存在,就会被覆盖
- cp -i test1 test1b:询问是否复制,y为执行
- cp -R subdir1 subdir4:递归持续复制,用于目录的复制行为
- cp test* subdir1:将以test开头的所有文件,复制到subdir1中,但是test*文件还是存在原来的位置,与第一行复制文件的区别是,subdir1是目录,并且已经存在产品
mv
移动目录或者重命名
- mv test3 newtest3:当不存在newtest3,将test3文件重命名为newtest3
- mv test1 test2:由于test2存在,将test1覆盖test2
- mv subdir4 dir4:将目录subdir4重命名为dir4,当dir4不存在时
- mv newtest3 unixlab1:移动文件,将文件newtest3移到目录unixlab1中,前提为unixlab1存在
- mv dir4 unixlab1:移动目录,将目录dir4移到目录unixlab1中
rm
作用为删除
- rm test4:删除文件
- rm -i *:采用通配符的方式删除掉所有的文件,不包括目录,i表示是询问是否删除
- rm -r subdir1:强制删除,可以删除文件或者目录
file
查看文件类型
- file test1:显示为"test1:ASCII text",为txt类型
- file dir4:显示为"dir4:directory",为目录类型
- file *:显示该目录下所有文档类型
find
- find -name newtest3 (-print):找出文件名为newtest3的文件
- find -name 'test':找出所有名字包含test字符串的文档,包括文件和目录
- find -name 'file*' -type d:查找的文档为目录类型
pwd
显示当前路径
- pwd
du
显示目录所占的内存
- du:显示当前路径下的目录,目录中的子目录,总文件所占的内存
- du -s:显示总文件所占的内存,结果"20 ."
- du -s *:显示目录和每一个文件所占的内存
chmod
权限的更改
rwx:分别问读、写、可执行的权限
ugo:分别为文档拥有者,一组的人,和其余的人
- chmod o-r test2:给other其余人减去read的权限
- chmod g+w test1:给group一组的人添加写的权限
- chmod go-r newtest3*:给group和other减去读的权限
- chmod 754 test2:分别给ugo给754权限,7对应着111,即给所有的权限
grep
该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,比如可以加在ps, tail, cat后面
- grep Not ed-500.txt:在uk-500这个文档行中查找Not所在的记录并显示出来
- more ed-500.txt | grep Not:用管道连接more和grep两个命令,结果与上个命令相同
- more ed-500.txt | grep “Not”:结果与上个命令相同
- grep “West Ward” ed-500.txt:能正确查找出West Ward
- grep West Ward ed-500.txt:第一行会报错,因为不能正确解读空格的意思,只能查找出West##
文件重定向
- 执行程序grep West Ward ed-500.txt,会将默认的错误结果输出到控制台屏幕上,因为STDERR的默认位置为控制台
- 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
- 需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
参考链接:http://www.runoob.com/linux/linux-shell-io-redirections.html
| 命令 | 说明 |
|---|---|
| command > file | 将输出重定向到 file。 |
| command < file | 将输入重定向到 file。 |
| command >> file | 将输出以追加的方式重定向到 file。 |
| n > file | 将文件描述符为 n 的文件重定向到 file。 |
| n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
| n >& m | 将输出文件 m 和 n 合并。 |
| n <& m | 将输入文件 m 和 n 合并。 |
| << tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
- grep West Ward ed-500.txt > myAddresses:将输出重定向到myAdresses文件中,但是错误输出还是在控制台
- grep West Ward ed-500.txt > myAddresses 2>&1:将STDOUT和STDERR都输出到myAdresses文件中
- grep West Ward ed-500.txt > myAddresses 2> myErrors:将错误输出到myErrors文件中
Piping的使用
- more ed-500.txt | grep “Manr”:在uk-500.txt文件中查找“Man”
- more ed-500.txt | grep “Man” | wc -l:查找“Man”之后统计个数
- more ed-500.txt | grep “Man” | sort > man.txt:将查找的结果按照所在记录的首字母排序,并输出到文件man.txt中
- more ed-500.txt | grep “[Not|Man]” :查找了所有包含在[]中的字符,而非字符串
- more ed-500.txt | grep [Not|Manr] :-bash: Man]: command not found grep: Unmatched [ or [^,因为shell想要解读 “grep [Not” ,但解读不出来, “|” 视为一个管道连接 “Man]” 命令,因此报错
正则表达式中特殊字符
- * : 代表任意字符(0到多个)
- [ ] : 中间为字符组合,仅匹配其中任一一个字符
- ^string:表示以string开头的字符
- string$:表示以string结尾的字符
- . :表示单个字符
grep
- 它在一个或多个文件中搜索字符串模板。
转译字符 \
- grep "St." ed-500.txt:其中的点表示的是任意单个字符
- grep "St\." ed-500.txt:其中.表示的就是一个点,字面的意思
使用$存放变量值
- export count=23 grep $count ed-500.txt:其中$count指的是23,查找23
- grep ‘$count’ ed-500.txt:查找结果什么都没有,‘’防止了将$进行转换,查找的任然是$count
echo
- echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。
显示普通字符
- echo "It is a test":结果 It is a test
显示转义字符
- echo "\"It is a test\"":结果 "It is a test"
显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
结果:
OK!
It is a test
显示不换行
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
结果:
OK! It is a test
原样输出字符串,不进行转义或取变量,用单引号(')
- echo '$name\"':结果 $name\"
显示命令执行结果,注意反引号(`)
- echo `date`:结果Thu Jul 24 10:08:46 CST 2014,
- 注意: 这里使用的是反引号 `, 而不是单引号 '。结果将显示当前日期
- 反引号(`) 位于键盘的Tab键的上方,起命令替换的作用。命令替换也就是shell能够将一个命令的标准输出插在一个命令行中任何位置。
参考链接:https://www.runoob.com/linux/linux-shell-echo.html
单引号(')和双引号(“)
- 如果没有单引号或双引号,shell会把空格后的字符串解释为命令。
- 单引号和双引号的区别。单引号告诉shell忽略所有特殊字符,而双引号忽略大多数,但不包括$、\、`。
实例:
testvalue=100
echo 'The testvalue is $testvalue'
The testvalue is $testvalue
echo "The testvalue is $testvalue"
The testvalue is 100
参考链接:https://blog.csdn.net/beginning1126/article/details/8633900
