三个默认io(fd):
重定向符:
>
覆盖输出,>>
追加输出
为避免误用
>
覆盖关键文件, 可以set -C
禁用>,set +C
启用
强制覆盖输出,则使用>|
2> #重定向错误输出
2>> #重定向错误追加输出
&> #重定向标准输出、错误输出至同一个文件
&>> #不存在这种用法
输入重定向:<
cat 默认标准输入
#小写转大写:
tr 'a-z' 'A-Z' < file
<< EOF #文档结束标记
cat << EOF
> line 1
> line 2
> EOF
line 1
line 2
管道:一个命令的输出作为另一个命令的输入。
echo 'foobar' | tr 'a-z' 'A-Z'
echo "abc" | passwd --stdin USERNAME
linux哲学思想之一:组合小命令,完成复杂任务。
读取stdin,输出stdout和文件。
echo foobar | tee 1.txt
,tee会输出到屏幕并保存到1.txt。
wc -l test.c | cut -d' ' -f1
,仅显示行数
1.统计文件个数
ls | wc -l
注意不加-l:ls -l | head -2
2.获取当前用户所有shell
cut -d: -f7 /etc/passwd | sort -u
注:/bin/false
是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin
只是不允许系统login
3.显示目录所有文件类型
file ./*
file ./$(ls .)
file `ls .`
ls . | file #错误
ls | xargs file #整错
# 很多命令不支持pipe传递参数,而xargs可以把stdin数据转换为命令行参数。
4.取出文件第2行
head -2 simple.c | tail -1
5.显示passwd倒数第二个用户的用户名和shell,显示并保存
tail -2 /etc/passwd | head -1 | cut -d: -f1,7 | tee 1.txt
6.显示etc目录pa开头文件的个数
ls -d /etc/pa* | wc -l
注意不能计算pa*目录中的文件,即不展开目录。
7.将alias cls=clear添加至.bashrc
echo "alias cls=clear" | >> ~/.bashrc
文本编辑器:处理ascii
字编辑器:word,wps等
vim:全屏,模式化编辑器
vim +行号 file
vim + file #直接编辑最后一行
vim +/PATTERN #直接编辑第一次匹配位置
常用三种模式:
其它还有:替换模式,可视模式。
常用模式转换:
编辑->输入:
编辑->末行(只能这样进入末行模式)
启用鼠标::set mouse=a
末行模式下
.
:当前行
$
:最后一行
例如,:.,+2d
即删除当前行及下面的2行。
命令模式按R
进入替换模式。
可视模式
切换:v,V,ctrl+v
选中后d可删除,y,p命令也可操作。
编辑模式下按ZZ
,可保存退出
移动光标的方法:
[字符数]h/j/k/l
使用跳转符
w:到下一单词词首
e:到当前或下一单词词尾
b:到当前或下一单词词首
前面也可以加数字0:跳至行首
^:跳至行首第一个非空字符
$:跳至行尾nG:跳至第n行
G:最后一行末行模式直接给出行号
:N
ctrl+f:下翻
ctrl+b:上翻
ctrl+d:下翻半屏
ctrl+u:上翻半屏
nd[跳转符],即ndw,nde,ndb
最近一次删除可粘贴
p:整行则粘贴至下方,否则粘贴至后面
P:整行则粘贴至上方,否则粘贴至前面
y命令(复制)用法同d
c也是删除命令,用法同d,但删除后进入输入模式。
r为替换命令。
敲3ra,则光标处的3个字符变为a。
或者直接R进入替换模式
u
也可前加数字
恢复撤销:ctrl+r
/PATTERN:向下查找
?PATTERN:向上查找
n,N找下一个和上一个
也可以用sed的s命令查找并替换
:.,$-1s#abc#def#g
,即当前行的倒数第二行的abc替换为def。
%
表示全文,即上一个命令等于:%s#abc#def#gi
注意区分,grep,egrep,fgrep用于文本查找。
有locate和find。
locate是非实时,模糊匹配, 根据全系统文件数据库进行。优势仅仅是快,不常用。
os每天都会更新数据库。
updatedb
命令,可手动生成文件数据库。
find可遍历指定目录查找,速度慢。但实时,精确。支持很多查找标准。常用。
用法:find 路径 标准 actions
路径默认为当前目录
标准默认为所有文件
actions默认为显示
可选标准:
-name 'FILENAME'
-iname 'FILENAME' #不区分大小写
-regex #PATTERN
-user #USERNAME
-group #GROUPNAME
-uid UID
-gid GID
-nouser #查找没有属主的文件
-nogroup #查找没有属组的文件
# eg.
find /tmp -user root
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link; this is never true if the -L option or the
-follow option is in effect, unless the symbolic link is
broken. If you want to search for symbolic links when -L
is in effect, use -xtype.
s socket
D door (Solaris)
-size [+|-]n(k/M/G) -ls
#加减号表示大于小于,无加减号则是小于等于该大小。
-size 1k :小于等于1k
-atime
-mtime
-ctime
+n #至少n天
-n #n天内
#或以分钟为单位
-amin
-mmin
-cmin
-perm MODE #精确匹配
-perm /MODE #任一u、g、o匹配
-perm -MODE #包含MODE位,如755包含644
如果某个文件的属主被删除了,属主会变成uid号。
find的查找条件可以组合
-not \(A -a B\)
等价于-not A -o -not B
可选动作:
-print:默认
-ls:#类似ls -l
-ok CMD {} \;
#Like -exec but ask the user first.
-exec CMD {} \ ;
#反斜线是格式规定,详细说明请man。
#花括号是查到的文件的引用。
# eg.
find ./ -perm -006 -exec chmod o-w {} \;
find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;
#查找当前系统没有属主或属组且最近1天内被访问过的文件,将其属主属组改为root
find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root;root {} \;
#查找所有用户都没有w权限的文件,并显示详细信息
find ./ -not -perm /222 -ls