《The Linux Command》学习笔记
文件命令
cd - 切换为之前目录
wc -l -w file
cmd --help
apropos keyword
apropos cpu >
type foo 检查命令类型,是否已被占用
alias foo='cd;ll;cd -'
foo
ll /etc/passwd > pw.txt (输出重定向时,>自动创建不存在的文件)
> file (删除一个文件)
cmd >> file 文件尾部追加,不存在则创建之
0--标准输入文件
1--标准输出文件
2--标准错误文件
cmd 2> err.txt
cmd &> outerr.txt
cmd 2> /dev/null
cat f1 f2 > f3 文件合并
$ cat (等待键盘输入)
$ cat -ns file 删除空行,且对行编号
ctrl-D (文件触底,end of file)
cmd | tee file | grep pattern
echo a{A{1..2},B{3..4}}
aA1 aA2 aB3 aB4
mkdir {2015..2016}-0{1..9}
2015-01
2015-02
2015-03
ls -l $(which cp)
ls -l `which cp` 反引号` 等同于 $,作为命令替换
ls -l "my test.txt" 双引号""将特殊字符($ / `除外)视为普通字符
echo "$(cal) "
echo '$(cal)' 单引号‘’抑制所有扩展
$(cal)
echo "money \$:5" 反斜杠阻止双引号内特殊字符($ ! & 空格等)扩展
命令行键盘编辑技巧
光标移动
ctrl-A 光标到行首
ctrl-E 光标到行尾
CTRL-F 前移一个字符
CTRL-B 后移一个字符
ALT-F 前移一个字
ALT-B 后移一个字
文本编辑
ctrl-D 删除字符
ctrl-T 前字符替换
Alt-U 大写转换
剪切复制
ctrl-K 剪切光标到行尾
ctrl-U 剪切光标到行首
ALT-D 剪切光标到词尾
ALT-Backspace 剪切光标到词首
ctrl-Y 复制kill-ring缓冲区到光标
Tab命令自动补齐
ls l(Tab)---ls log
!88 --执行history中第88行命令
!! 执行history最后一行命令
id
cat /etc/passwd
cat /etc/group
$ su -c 'command'
sudo与su区别:
执行有限条指令;
sudo无需输入root密码,只输用户密码;
不启动新shell环境,不加载另一个用户环境
进程
sleep N?
ps 只显示当前会话终端进程
ps x 显示所有进程
sort命令内部排序机制
ps aux
gedit & 后台运行进程,ctrl-c无法中断
jobs 查看终端所有作业
fg %jobid 进程回到前台运行
bg %jobid 进程回到后台
ctrl-z 暂停前台进程
kill [-signal] PID…
kill -SIGHUB/1 PID/%jobid 前台程序终止,后台进程重新初始化
kill -INT PID/%jobid 中断信号,终止程序
killall [-u user] [-signal] name… 发送信号给多个进程
pstree 进程树
vmstat 5 每5s输出资源使用快照,mem,swap,IO
free -m
du
tail -f /var/log/messages 实时检测系统的好方法
存储
mount
umount
du -sh
df
uptime
变量显示
set 显示环境变量/shell变量
printenv USER 仅显示环境变量USER
echo $USER
PATH=$PATH:$HOME/bin
export PATH 保证shell子进程能使用PATH变量
gedit file
VIM命令
shift ^ 本行开头
shift $ 本行末尾
W 下一个单词处
B 上一个单词处
number-shift-G 移到第number行
shift G 至文件最后一行
查找替换
:%s/word1/word2/gc 全局替换,%指代^~$
复制/粘贴/删除
编辑模式—插入
外部命令模式
: n 切换到下一文件
:N 切换到上一文件
软件安装
RPM安装
rpm -qa package 列出所有安装软件 q-query a-all
rpm -q packname 查询pack是否安装
源码安装
wget src
tar zxvf src.tar.gz
./configure
make
#make install
网络
ping baidu.com
netstat -ie 显示网卡信息
IP地址?
子网掩码?
文件查找
locate fname 以文件名查找,无法查最新
find ~ [-print] | wc -l 计算行数
find ~ -type f -name “*.jpg” -size +1M | wc -l
find ~ \(-type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \) and默认,or显式
find ~ -type f -name “*.jpg” -print/delete/ls
find ~ -type f -name “*.jpg” -exec ls -l '{}' ';' 每搜到一个执行一次命令
find ~ -type f -name “*.jpg” -exec ls -l '{}' '+' 结果集只执行一次命令
find ~ -type f -name “*.jpg” -ok ls -l '{}' ';' {}代表当前路径,-ok交互式执行自定义操作
find ~ -type f -name “*.jpg” -print | xargs ls -l xargs处理stdin信息并转化为命令输入参数表
find ~ -type f -name “*.jpg” -print0 | xargs --null ls -l 以空字符分隔参数
归档备份
压缩解压
gzip fname
gzip -tv f.gz 检查完整性/显示详细信息
gunzip fname
zcat f.gz | less 查看压缩文件内容
bzip2同gzip 高压缩低速度
linux中gzip>bzip2>zip(用于与windows交换文件)
磁带归档命令tar
tar mode[options] pathname… 以 相对路径 处理处理 文件名路径
mode:
c create
x extract
r apppend
t list the contents of an archive
tar cf file.tar path
tar tf file.tar
tar tvf file.tar
tar zxvf file.tar
find ~ -name 'file-a' | -exec tar rf file.tar '{}' '+'
find ~ -name 'file-A' | tar czf play.tgz -T -
(1) -T tar命令从文件(此处为stdout文件)中读取文件路径名列表,而不是从命令行
(1) - 代表标准输入输出stdin/stdout文件(这里是stdout文件,即屏幕所看到的内容)
(2) find默认action为-print
(3) find play -name 'file-A' | tar czf play.tgz -T file.list
cat file.list
./.profile
./.bashrc
./dbootstrap_settings
./usr.include.txt
./.viminfo
Regular Expresstion
支持命令find locate vim less
grep [options] regex file… #查找匹配行
-i 忽略大小写
-v 输出不匹配行
-h 不输出文件名,只输出匹配内容
元字符
-
-
BRE基本正则表达式元字符:( )^ $ . * (\为元字符)
-
- 2.ERE扩展正则表达式元字符: +-*\ ()[]{} ^$ .| ? (' '括起避免扩展,\为文字字符)
grep -h '^zip' file
zip1
zip2
grep -h 'zip$' file
1zip
2zip
grep -h '^zip$' file
zip
grep -Eh '^(bz|gz|zip)' file
匹配电话号码(nnn)nnn-nnnn或nnn nnn-nnnn表达式:
grep -E ===> egrep 扩展REG
egrep '^\(?[0-9]{3}\)? [0-9]{3}-[0-9]{4}$' phone.txt #(,)出现0或1次
find ~ -regex '.[^-_./0-9a-zA-Z].*' find之test选项支持regex
locate --regex 'bin(bz|gz|zip)'
zgrep -El 'regex | regular expression' . zgrep对压缩文件进行搜索
文本处理
排序
sort -t ';' -k 3.7nbr -k 4.1nbr file | uniq | head
t为指定分割符;
-k 3.7nbr 第3个字段第7字符为关键字,忽略开头空白(b),逆序(r),数字排序(n)
uniq只对已排序文件有效
^I – 制表符Tab
截断
cat -A
cut -d ':' -f 1 /etc/passwd | head
paste data.txt version.txt
比较
cat f1 f2 逐行比较已排序文件f1,f2
diff -c f1 f2 上下文格式输出,+多,-少
diff -u f1 f2
diff -Naur fold fnew > diff_file
patch < diff_file
-N, --new-file:treat absent files as empty
-a: treat all files as text
-r : recursively compare any subdirectories found
替换删除tr
echo “i love linux” | tr a-z A-Z 替换
tr -d '\r' < dos_file > unix_file 删除dos文件回车符\r
sed 's/old/new/g
sed -n '1,5p' file
nl text 对文本行编号