1、mkdir
make directorys的缩写
参数 -p 递归创建
-v 可以显示创建目录的过程
mkdir /data 在根下创建data目录
mkdir -p /data/test/a 递归创建目录
2、ls
list的缩写 输出当前目录内的文件和目录
参数 -l long显示长格式
-a 显示所有文件包括隐藏文件
-d directorys 查看目录
例如:ls / 列出根目录下的内容
-F 给不同文件加不同标识
-p 只给目录加/标识。
-r --reverse 排序时反转顺序,倒叙
-t 按修改时间排序
--color=auto 显示颜色
-h 以人类易读的方式显示。
-i 查看inode节点。
--time-style=long-iso 可以改变打印出来的“修改时间”格式。
3、cd
change directory 切换目录、改变目录路径
例子:cd /etc 切到etc目录下
相对路径:不从根开始的路径
绝对路径:从根开始的路径
4、pwd
print work directory 打印工作目录,显示当前所在路径
参数:-L 实际是调用$PWD的变量,和pwd输出是一样的。
-P 将文件的初始(原始)目录打印出来。就比如一个文件的快捷方式,我要显示这个文件的源地址,而不是快捷方式在哪。
5、touch
文件名 创建文件或更新时间戳
例如 touch /data/oldboy.txt
更新时间戳:参数:
-a Access改变访问时间戳
-m Modify 改变修改时间戳
6、vi/vim
文件名 相当于windows的记事本编辑软件。
命令模式可以使用a或i进入编辑模式。esc退出编辑模式。:进入命令模式。wq保存。
行首:^
行尾:$
光标移动到文件最后一行:G
光标移动到文件的第一行:gg
取消上一次的动作 u
删除一行 dd 数字dd 指定数字行删除一行
向下搜索 / n向下搜索 反向搜索N
向上搜索 ?
退出保存:wq
强制退出保存:wq!
强制退出不保存:q!
复制一行: yy
黏贴一行:p
显示行号:set nu
7、echo
将信息打印出来
系统出现乱码解决方法:echo "LANG=en_US.UTF-8" > /etc/sysconfig/i18n source /etc/sysconfig/i18n
参数:-n 打印不换行;
-e 允许解释以下反斜线转义符。
例如以下例子,\t代表制表符,如果不加-e,就会直接将\t打印出来,而不是解释\t。
8、>
重定向
特殊符号:
>或者1> 输出重定向
>>或者1>> 追加重定向
0<或者< 输入重定向
0<<或者<< 追加输入重定向
2> 错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容
2>> 错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。
说明:
1、箭头的指向就是数据的流向
2、数字说明:
1>标准输入(stdin):代码为0,使用0<或0<<。数据流从右向左。
2>标准正常输出(stdout):代码为1,使用1>或1>>。数据流向从左向右。
3>标准错误输出(stderr):代码为2,使用2>或2>>。
2>&1 让2的输出和1一样
&> 这种写法也是正确的和错误的都输出到一个文件。
例如: cat oldboy >a.txt 2>&1 因为正确输出1到a.txt,那么2的输出和1一样也输出到a.txt[63]
9、>>
>> 追加重定向
10、cat
查看文件内容
cat >>oldboy.txt<<EOF
I am oldboy.
EOF cat的多行追加
参数:-n 显示行号 包括空行
例如:cat -n oldboy.txt 显示行号并打印每行内容。
-b 显示行号 不给空行做标记。
-E 在每行结尾显示$
-s 将连续多行空行压缩为一行
-T 区分空格和Tab,Tab在文件内用^I来表示。
-A 显示不可见字符
11、xargs
从标准输入获取内容创建执行命令行,将前面命令的输出作为数据流交给下一个命令进行处理。将标准输入(管道或stdin/输入重定向)获取数据并将数据转换为命令行的参数。
作用:可以将多行输入变成单行输出。
例如:
参数: -n 数字 分组 将每组按行打印出来。每组看数字个数划分。
例如 xargs -n 1 将每个内容分为一组,并每行打印出来。
-i/I 将find找到的文件及目录与{}关联
例如:find . -type f -name "*.txt"|xargs -i mv {} /tmp/
12、cp
copy 拷贝命令
例如:cp /tmp/liuwei.txt /data/ 将liuwei.txt这个文件拷贝到/data目录下
参数:默认不能拷贝目录,那么就需要用到-r参数,递归拷贝
例如: cp /tmp/ /data/ 将/tmp目录下的所有文件都拷贝到/data下。
-r 递归拷贝
-p 保持文件属性
-d 若源文件为链接文件,则复制链接文件属性而非档案本身。
-a 相当于dpr 保持属性不变。
-i 覆盖时提示
如何让他覆盖文件不提示呢?
案例:将/mnt/test.txt拷贝到/tmp下,但/tmp下有test.txt文件,如何让他不提示是否覆盖?
两种方法:1、\cp /mnt/test.txt /tmp 2、/bin/cp /mnt/test.txt /tmp[67]
思路:就是屏蔽掉系统定义的别名,cp mv rm 这些命令是会对文件位置进行改变的,所以系统防止人为删除就会给命令定义别名。用\cp /bin/cp就会屏蔽掉别名。
13、mv
move 移动文件
14、rm
remove 删除文件
参数: -r recursive递归、删除目录
-f force强制删除,无交互
15、find
查找文件
参数:-type 文件类型f(file),d(directory),c(character),b(block),s(socket),l(link)
-name "文件名" 按文件名查找。
-mtime 时间 按修改时间查找,时间数字1、+7表示七天以前 2、7表示第七天 3、表示最近7天
-a and交集条件、并且
-o or并集条件、或者
! 取反、不匹配
-maxdepth 查找目录层级,后跟数字。
-atime 访问时间
-ctime 状态改变时间
-newer file #file 为一个存在的文件,意思是说只要比file还要新就列出来。
-perm 数字权限 按文件权限查文件。
案例:xargs搭配用法:
1、find /log -type f -name "*.log" -mtime +15 |xargs rm -f
查找/log目录以.log结尾的,删修改日期在15天以前的文件
2、find /log -type d -nema "*oldboy" -mtime +30|xargs rm -rf
查找/log目录以oldboy为结尾的目录,删修改日期在30天以前的目录。
案例:搭配exec使用
语法: find /data -type f -name "oldboy.txt" -exec rm {} \;
查找 从哪查 查什么类型 类型 什么名字 “名字” 执行 删除
find /data -type f -name "*.txt" |xargs rm -f
查找/data里的所有txt文件,交给xargs分别交给rm来删除。
16、|
管道符
17、rmdir
删除空目录
18、grep
过滤命令,linux三剑客老三
参数:-v 过滤不显示内容
例子:grep -v oldboy test.txt 过滤oldboy将其他的打印出来。
-o 只显示匹配到的内容,不加-o则是显示匹配到的内容的行。
-n 对匹配的内容打印行号
-A After将匹配的行打印出来并将以下n行打印出来。用法:grep 10 -A 10 a.txt 匹配到10的行打印出来并将这行以下10行打印出来。
-B Before将匹配的行打印出来并将以上n行打印出来。
-C Context将匹配的行打印出来并将上下n行打印出来。
--color=auto 给匹配到的内容加颜色,高亮显示。
-E 等同于egrep 可以同时过滤两个字符串
例如: grep -E "3305|3306" oldboy.txt
-i 忽略大小写
-c 计算找到字符串的次数
-w 按单词搜索,和定义单词边界\b相同
例如:
19、head
显示前n行,默认是前10行 -n数字
20、tail
文件结尾的后n行,默认是后10行,-n数字
参数:-f 跟踪文件尾部的变化,可以用此命令实时查看日志.
21、tree
目录的树形结构
参数:-a 显示隐藏文件
-d 只显示目录
-L 显示指定层级的内容
-i 不打印缩进线
22、alias
命令=命令 参数 给命令定义别名
作用:1、给一些命令加一些保护的参数,防止人为误操作。
2、把很多复杂的字符串或命令变成一个简单的字符串或命令。
定义别名是放在了内存里,重启就失效了。
定义别名永久生效:
~/.bashrc 当前用户生效
/etc/profile 全局生效
23、unalias
取消定义的别名
24、seq
序列 -s 指定分隔符 默认是\n
直接接数字 每行输出一个数字,直到n
seq 1 2 10 等差数列,输出1 3 5 7 9
参数:-s “指定分隔符” 10 可以横向打印
-w 补齐位数,例如打印1-10 他会打印出01 02 03 ...10
案例:一个文件有100行,取20-30行。
方法一:head -30 a.txt|tail -11 太low,但也必须会,重点是思路
方法二:sed -n '20,30'p a.txt 必会
方法三:awk 'NR==20,NR==30{print}' a.txt 必会
方法四:awk 'NR>19&&NR<31{print}' a.txt awk条件的另一种写法
方法五:grep 20 -A 10 a.txt 将匹配20的行后的10行打印出来。
方法六:grep 25 -C 5 a.txt 或者 grep 30 -B 10 a.txt
25、sed
增删改查
增:i匹配的上一行增加一行内容 a 匹配的下一行增加一行内容
例:sed '2i 107,abc,CEO' person.txt 第二行上增加一行内容
sed '/102/i 107,abc,CEO' person.txt 匹配到102的行,在他上一行增加一行内容
sed '2a 107,abc,CEO' person.txt 第二行下增加一行内容
sed '/103/a 107,abc,CEO' person.txt 匹配到103的行,在它下一行增加一行内容
删:d 删除匹配的行
例如:sed '2d' person.txt 删除文件的第二行
sed '/abc/d' person.txt 删除匹配abc的行
改:替换:c 将匹配的行全部替换内容。
例如:sed '2c 105,you,CTO' person.txt 将第二行全部替换为其他内容
sed '/abc/c 105,you,CTO' person.txt 将匹配Alex内容的行全部替换
s命令:语法sed 's#1#2#g' 将文件内的1全部替换成2.替换文件匹配到的内容,不是替换一行。注意和c的区别。不加g参数的话,那就是每行只替换第一个匹配的。
例如:sed 's#abc#def#g' person.txt 替换文件内所有的abc为def
sed '2s#abc#def#' person.txt 替换第二行的第一个abc为def
查:-n 取消默认输出
p命令 将匹配的内容所在行打印出来 -n参数 和p命令要配合使用
例如:sed -n '/zhangyao/p' person.txt 将匹配到zhangyao的行打印出来。p
sed -n '2p' person.txt 打印第二行
sed -n '2,5p' person.txt 将2到5行打印出来
sed -n '/lingling/,/linglan/p' person.txt 将匹配到lingling的行到匹配到linglan的行打印出来
其他参数:
-i 更改文件内容
-r 支持扩展正则表达式,后边的条件可以不用接转义符\
-e 多项编辑
l 打印文件内不可见字符。例如:tab字符,用\t表示
企业面试题:
把/data目录及其子目录下所有以扩展名.sh结尾的文件中包含abc的字符串全部替换为def。
思路:1、首先找到/oldboy下所有以.sh结尾的文件 find /data -type f -name "*.sh"
2、利用sed将文件内容内有abc的都替换成def。 sed -i 's#abc#def#g'注意-i是直接改文件内容了,建议先不加-i过滤出来是否是你要的行,是再加-i。
3、将1和2联系起来,两种方法:1、利用xargs将find找出来的文件当作数据流输入给sed处理。find /data -type f -name "*.sh"|xargs sed -i 's#abc#def#g'
2>可以利用反引号的作用:sed -i 's#abc#def#g' ` find /data -type f -name "*.sh"`他会先处理反引号内的命令,然后将find的文件挨个进行处理。
26、awk
27、man
查询所有命令的使用方法。针对非内置命令。
28、命令 --help
适用于非内置命令。也可以查询指定命令的使用方法
help 命令 也可以查。这种针对内置命令。
29、date
显示当前时间
参数 -s 修改时间 date -s "3/9/2018 12:13:00"
[root@oldboy test]# date
Sun Mar 11 18:48:34 CST 2018
将以上命令用易读方式打印出来?
符号代表的含义:
%y 年 只显示后两位 %m 月份 %d 日 %Y 年份全显示
%F 代表年月日 相当于%Y-%m-%d
%w 周 0-1-2-3-4-5-6 0代表周日。
%H 小时 %M 分钟 %S 秒
%X 时分秒 相当于%H:%M: %S
加减日期:
date +%F -d "+2day" 时间增加两天
date +%F -d "-2day" 时间减少两天