常用shell 命令

ls

-a all
-d 显示文件夹本身,而不是其中内容
-l 长格式
-r 逆序
-S 按照文件大小排序
-t 按照修改日期排序
-i --inode print the index number of each file

ls -al #默认字母序
ls -alht
ls -alhS
ls -alhSr
ls -li

ls /bin /usr/bin # 列出多个文件或文件夹

ls -d /Users/linia # 列出文件夹本身

cd

cd
cd ~
cd -

cd $(ls | grep -i event)

% ls | grep -i event
$ cd $(!!) # 进入上一条命令输出的文件夹

pwd

pwd
pwd -P #展开符号链接

du

查看文件大小

% du -sh # summary
% du -sh directry_or_file
% du -hd 1 # 分别显示一层深度目录大小

df

查看磁盘空间

df -h

free

查看内存空间,macOS不适用

free -h

date

时间日期

date

cal

日历

cal

退出shell

exit or Ctrl-D

file

查看文件类型

➜  ~ file sicp.pdf
sicp.pdf: PDF document, version 1.5

less

less is more 查看文件

操作文件和目录

mkdir

创建目录

mkdir dir1
mkdir dir1 dir2 dir3

cp

-i --interactive
-r --recursive
-v --verbose

cp file1 file2
cp -i file1 file2
cp file1 file2 dir1
cp dir1/* dir2
cp -r dir1 dir2

rm

小心使用rm,特别是rm -rf

mv移动和重命名文件

tail

tail -f -n 500

ps查看进程

ps -ef

type显示命令类型/which显示命令位置

alias

  • 可以用分号作为多个命令分隔符
cd /etc; ls -al; cd -

linian@AliyunEcs ~/s/playground> type foo
foo not found
linian@AliyunEcs ~/s/playground> alias foo='cd /etc; ls -al; cd -'

查看系统alias
> alias

sort/uniq

unqi

  • -d Only output lines that are repeated in the input.
$ ls /bin /usr/bin | sort | uniq | less # 排序去重

$ ls /bin /usr/bin | sort | uniq -d | less # 显示重复的行

$ (printenv; set) | sort | uniq -d

wc

wc - print newline, word, and byte counts for each file -c byte counts -l line counts -w word counts

$ ls -l /usr/bin | wc
 862    8101   55179

862 newlines 8101 words 55179 bytes

ls -l /usr/bin | wc -l #统计行数

ls /bin /usr/bin | sort | uniq | wc -l

grep

  • 输出与模式匹配的行
  • grep会从输入文件中搜索匹配模式,如果没有指定文件,那么会将stdin作为输入, 参看man grep
  • 常用的参数
    • -i --ignore-case
    • -v --invert-match
    • -c --count 统计匹配行数
  • 上下文匹配
    • -B NUM before, 显示匹配行之前NUM行
    • -A NUM after
    • -C NUM 显示前后NUM行
grep pattern filename

$ ls /bin /usr/bin > ls-output.txt
$ grep 'zsh' ls-output.txt

$ ls /bin /usr/bin | sort | uniq | grep zsh

$ ls /usr/bin | grep -c zip

一些实战

zgrep -c "Fault=1" ser*

zgrep -B 35  "Fault=1" ser* | grep --color "RequestId"

zgrep -c "reqSuccess=0" relay_service_log.2021-10-21-00.fbar-6ub-p-f-1-1*

head/tail

$ head ls-output.txt
$ head -n 5 ls-output.txt
$ ls /bin /usr/bin | head -5

$ tail -f ls-output.txt # -f --follow 持续观察

tee

Copy standard input to each FILE, and also to standard output. tee读取stdin,同时写入指定文件和stdout

$ ls /usr/bin | tee ls.txt | grep zip

printenv

只显示环境变量

% printenv | less

# 查看环境变量
$ printenv USER
$ echo $USER

set

显示shell变量和环境变量

foo='yes'printenv | grep foo
➜  set | grep foo
foo=yes

history

% history | less
    1  pwd
    2  exit
    3  pwd
    4  vim /bin/zsh
    5  ls -al /bin/zsh
    ...
  
% !5 #重用编号5的history

% !! #重复执行最后一个命令

运行多条命令

% ls;\
ls -a;\
ls -al