mkdir
在绝对路径下建立文件夹
mkdir /home/lyj/Desktop/test1
即在桌面下建立了test 1文件夹
文件夹套用(比如在A文件夹下再建立B文件夹)
mkdir -p /home/lyj/Desktop/test6/test7
这样test6中就有一个文件夹test7了
住:如果mkdir前面加上sudo的话,建立的文件夹就会有权限了
如果一次行建立多个文件夹
mkdir test1 test2 test3
删除文件夹
sudo rm -rf [文件的路径]
vim基本操作
操作 | 命令 |
---|---|
全选 | 按esc后,然后ggvG或者ggVG |
全部复制 | 按esc后,然后ggyG |
全部删除 | 按esc后,然后dG |
解析:
命令 | 解释 |
---|---|
gg | 让光标移到首行 |
v | 进入Visual可视模式 |
G | 光标移到最后一行 |
d | 删除选中内容 |
y | 复制选中的内容到0号寄存器 |
"+y | 复制到+寄存器,即系统的剪切板 |
查找
输入/string
,按n查找到下一处
sed命令
sed -i 's/原字符串/替换字符串/' [file]
特殊字符用\转义
当有'单引号时:
sed -i "s/原字符串包含'/替换字符串包含'/" [file]
wc
wc -l [file] //输出file文件有多少行
awk
paste
paste -d -s -file1 file2
选项含义如下:
-d 指定不同于空格或tab键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
iconv
iconv -f [原始字符集1] -t [目标字符集] [file]
eg: iconv -f UTF-16LE -t UTF-8 Speaker7290.txt
iconv -l #列出当前支持的字符编码
file [file] #查看file文件的编码格式
cut
-d 表示指定分隔符
-f 表示选择域
eg:
[root@localhost shell]# ifconfig eth0 | grep "inet addr"
inet addr:192.168.1.199 Bcast:192.168.1.255 Mask:255.255.255.0
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2
192.168.1.199 Bcast //以 : 为分隔符,选取第二个域里面的内容,输出
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1
192.168.1.199
awk
Linux终端不能输入中文解决方案
在用户目录下的.inputrc文件(如果没有,则新建一个)添加:
set meta-flag on
set convert-meta off
set input-meta on
set output-meta on
如果还是不能输入中文,再试试在/etc/profile文件里添加:
LANG=”zh_CN.UTF-8”
LC_MESSAGES=”zh_CN.eucCN”
export LANG LC_MESSAGES
dos2unix text
grep
2019/02/26
cat
- 显示文件内容
$ cat test #显示test的内容
hello world!
$ cat test test1 #按序显示test,test1的文件内容
hello world!
hhhh
2.创建一个文件,并写入内容,以ctrl+D结束输入
$ cat>test
aaaaaaa
cat test
aaaaaaa
- 显示文件的行号
$ cat -n test
1 hello world!
4.在每行的结束添加$
$ cat -e test
#!/bin/bash$
echo "hello world!"$
$
read VAR$
echo "VAR is $VAR"$
$
expr $VAR - 5$
$
test "HELLO"="hello"$
test $VAR -eq 10$
exec ./othershell.sh$
$
exit$
5.重定向到文件
$ cat test >test1 #把test中的内容输出到test1中(覆盖test1原有的文件)
$ cat test test1 test2>test3 #把test,test1,test2中的内容重定向到test3中
$ cat -n test>test1 #把test中的每一行加上行号输出到test1中
$ cat test >>test1 #把test中的内容追加到test1中
$ cat<test #把test中的文件输出到屏幕上
6.排序
cat test test1 test2 | sort >test4 #把test,test1,test2中的文件定向到test4中并且按照字典排序
cat test test1 test2 | sort -u >test4 #去掉重复的行
7.标注TAB
cat -T test
^I#!/bin/bash
echo "VA^IR is $VAR"
echo "hello world!"
exec ./othershel^Il.sh
exit^I
expr $VA^IR - 5
read VAR
test "HELLO"="hello"
test $VAR -eq 10
参考:13 Basic Cat Command Examples in Linux
cut
1.通过字节截取(一个英文字母为一个字节,当截取汉字的时候可能会出现乱码)
echo "hello world"| cut -b 1,3
hl
2.通过字符截取
echo "hello world"| cut -b 1,3
hl
3.通过界定符截取
names.csv
John,Smith,34,London
Arthur,Evans,21,Newport
George,Jones,32,Truro
$ cut -d ',' -f 1,3 names.csv
John,34
Arthur,21
George,32
4.取反
$ cut -d ',' -f 1,3 --complement names.csv
Smith,London
Evans,Newport
Jones,Truro
5.设置输出文件的界定符
$cut -d ',' -f 1,3 --complement --output-delimiter='@' names.csv
Smith@London
Evans@Newport
Jones@Truro
参考:Linux and Unix cut command tutorial with examples
paste
$ cat name
John
Bob
Alice
Tony
$ cat gender
male
male
female
male
$ cat age
12
14
8
18
$ cat id
1
2
3
4
5
1.合并上述四个文件
$ paste id name gender age
1 John male 12
2 Bob male 14
3 Alice female 8
4 Tony male 18
5
2.加入定界符
会按照指定的分隔符按顺序填充,分隔符不足,则重复利用
paste -d '|,' id name gender age
1|John,male|12
2|Bob,male|14
3|Alice,female|8
4|Tony,male|18
5|,|
3.按行合并
先把每个文件的每一行放在同一行按照tab分隔,然后再把这些行依次加入新的文件(总共有几个文件就有几行)
$ paste -s id name gender age|head -n 10
1 2 3 4 5
John Bob Alice Tony
male male female male
12 14 8 18
4.把连续N行放在同一行
把传来的文件一行行读来填充短横-
$ cat name | paste - - -
John Bob Alice
Tony
$ cut -d" " -f 1 name |paste - - num
John Bob 1
Alice Tony 2
3
4
参考:Paste command in Linux with examples
2019.2.27
umask
- umask是设置创建文件或目录时的默认权限
- Linux里面的权限分为三个部分,user,group,other.即当前用户的权限,用户所属的组的其他用户,非前两者的其他用户。
- 文件总共有三种访问类型,rwx,分别为读,写,可执行
- 可以通过
ls -l
查看当前目录下所有文件的权限信息
第一位表示文件的类型,d表示目录,-表示普通文件,l表示链接
后面每三位分别对应user,group,other的权限,这里面的-表示不具备这种权限。比如rw-
表示该文件的当前用户具备读和写的权限,不具备可执行的权限 - 三种权限操作
+:添加某种权限
-:禁止某种权限
=:只允许指定的权限 - rwx分别对应数字4 2 1
-
用1-7代表不同权限
- 在Linux下,默认的文件权限是666,默认的目录权限是777,将umask的值分别与666,777相减,得到的就是文件和目录的默认权限。比如umask是022,那么文件的默认权限是666-022=644,即rw-r--r--
参考:Linux umask command
chmod
chmod 742 file #为file授权,采用数字表示方式,也可以用下面的方式
chmod u+rw file #对user进行授权,group,other同理
chmod -R 564 directory #对目录进行递归授权
参考:Linux chmod command
2019.3.7
运算符&&,||
command1 && command2 && command3 ...
依次执行命令,直到有命令执行失败或者所有命令执行完成停止
command1 || command2
只要有命令执行成功就停止往后执行
command 1 | command 2
他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2
shift
shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)。
示例:依次读取输入的参数并打印参数个数
shift_test.sh
#!/bin/bash
while [ $# != 0 ]
do
echo "prama is $1,prama size is $#"
shift
done
输入如下命令运行:
./shift_test.sh a b c
prama is a,prama size is 3
prama is b,prama size is 2
prama is c,prama size is 1
每次运行shift(不带参数的),销毁一个参数,后面的参数前移
Shift命令一次移动参数的个数由其所带的参数指定。
例如当shell程序处理完前九个命令行参数后,可以使用shift 9命令把$10移到$1
Linux中的标准输入输出
标准输入0 从键盘获得输入 /proc/self/fd/0
标准输出1 输出到屏幕(即控制台) /proc/self/fd/1
错误输出2 输出到屏幕(即控制台) /proc/self/fd/2
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”
1、2>/dev/null意思就是把错误输出到“黑洞”
2、>/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
3、2>&1 >/dev/null意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕
关于这里”&”的作用,我们可以这么理解2>/dev/null重定向到文件,那么2>&1,这里如果去掉了&就是把错误输出给了文件1了,用了&是表明1是标准输出。
https://blog.csdn.net/zhongqi2513/article/details/78613768
2019.3.27
grep
1. -i 不区分大小写
[root@localhost shell]# cat test1.txt
ab
Ac
6356
AKF57
[root@localhost shell]# grep -i "a" test1.txt
ab //找出所有字符’a’ 并且不区分大小写
Ac
AKF57
参考资料:linux下grep用法
grep用法
2019.3.28
uniq
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。uniq 可检查文本文件中重复出现的行列
-c或--count 在每列旁边显示该行重复出现的次数。
对file中的单词统计词频,并排序
cat file|sort |uniq -c|sort -n
find
find kaldi/ -name "train_lm.sh" #在kaldi目录下,按照文件名搜索train_lm.sh
-iname :表示不区分大小写
2019.4.1
查看文件夹的大小
du -sh 目录
2019.4.24
远程复制跳过相同文件
使用cp命令的-n参数即可跳过相同的文件 ,但scp却没这个参数,如何实现呢?
rsync它比scp更强大,支持“不覆盖”原目录
例子:rsync -avz --progress /root/client/ root@202.112.23.12:/home/work/
//将本机的/root/client/拷贝至远程的202.112.23.12:/home/work/目录,--progress可以查看拷贝的过程
例子:rsync -avzu --progress /root/client/ root@202.112.23.12:/home/work/ //u选项,指定不覆盖原目录内容
参考资料:
linux远程scp,但是不覆盖已经存在文件的方法
复制文件时排除某一些文件
rsync -r -v --exclude="dirName" dir1 dir2
将dir1中的文件传输到dir2中,dir1中的"dirName"不复制
一条exclude选项只能排除一个,可以多写几个即可多排除几个
通过列表存参数
>x=()
>x+=(--a 4)
>x+=(--b 5)
>echo "${x[@]}" # 注意一定要加双引号,否则报错
--a 4 --b 5