Shell踩坑

常用指令

Posted by Jiayue Cai on January 25, 2019

随便整理的一些自己实际使用过程中的知识点

不定期整理更新…

Linux/windows文件在换行符的区别

换行操作使用两个字符:一个字符<Return>来移到第一列,另一个字符<Line feed>来新增一行。

计算机产生以后,存储较为昂贵,在如何解决回车换行这个老问题上,人们产生了不同的意见:

  • UNIX人认为在到达一行的结尾时新增一行 (LF)
  • Mac人则认同 (CR)的解决办法
  • MS人则坚持 (CRLF)的方法

将windows文件转换为unix:

vi xx.txt
ESC进入命令模式
:set ff = unix
:wq

尤其需要注意的是shell、python等脚本需要保存为unix格式,因为不然你在linux下直接运行时会提示:No such file or directory,因为Linux把换行符也当成脚本解释器的一部分了。

其他更详细的内容vim常用命令总结

字符编码

  • ASCII:python默认编码,只能表示数字、英文字母和一些特殊符号,不能表示汉字(1字节)
  • GB2312:中文编码(然后逐渐扩展为GBK、GB18030)(2字节)
  • unicode:用于内存中存储,可表示汉字,固定长度(4字节,字符编码转换的媒介)
  • utf-8:用于磁盘文件存储,可表示汉字,可变长度(英文占用1字节,中文占用3字节)(美国字符1个字节,欧洲2个字节,东南亚3个字节)

如:s=’中文’ 如果是在utf-8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。 这种情况下,要进行编码转换,都需要先用 decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。 通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

#python
str1.decode('utf-8')   #表示将utf-8编码的字符串str1转换成unicode编码
str2.encode('gb2312')   #表示将unicode编码的字符串str2转换成gb2312编码

shell端编码显示问题

  • vi ~/.vimrc #编辑:set fileencoding=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
  • source ~/.vimrc #激活
点击查看详细内容
set incsearch
set hlsearch
set ignorecase smartcase
set backupcopy=yes
set laststatus=2
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set number
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab

详细讲解:python中的encode()和decode()函数link1link2

文件访问

./是当前目录 ../是父级目录 /是根目录

cat input_file | head -n 1000    显示前面1000行 
cat input_file | tail -n 1000    显示最后1000行
cat input_file | tail -n +1000   从1000行开始显示,显示1000行以后的
cat input_file | tail -n +1000   &#124; head -n 2000 从第1000行开始,显示2000行。即显示1000~2999行

sed -n '5,10p' input_file        查看文件的第5行到第10行

cat input_file | awk -F '\t' '{print $1}'   打印第一列

touch a.c 新建文件a.c
tar -czvf test.tar.gz a.c   压缩a.c文件为test.tar.gz
tar -xzvf test.tar.gz       解压test.tar.gz

cat xx.txt | python xx.py 跑脚本

rz 上传文件
sz 下载文件(大文件:sz -be)
	-b 以二进制方式传输(binary)
	-e 对控制字符转义(escape),这可以保证文件传输正确

awk的一般语法格式为:

  • awk [-参数 变量] ‘BEGIN{初始化}条件类型1{动作1}条件类型2{动作2}…END{后处理}’

awk其他更详细的内容shell语法

最常用快捷键

alt+tab:切换当前的运行程序

crtl+l 清 屏

ctrl+c 强制中断程序的执行

ctrl+z 将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,
	- fg命令重新启动前台被中断的任务
	- bg命令把被中断的任务放在后台执行

自定义命令

vi ~/.bash_profile     #编辑:alias hdpn='/home/.../hadoop'
source ~/.bash_profile #激活
点击查看详细内容
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

alias hdpn='/home/caijiayue/hadoopclient/hadoop/hadoop/bin/hadoop'

权限操作

  • Linux下文件的权限类型一般包括执行。对应字母为 r、w、x。
  • Linux下权限的粒度有 拥有者群组其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限 (即-rwxrwxrwx)。

ps:第一位标识文件属性:d目录(即文件夹)、-文件、l链接文件、s该文件无论由什么用户启动,最众都会被超级用户去执行、b可供存储的接口设备、c串行端口设备如圆形插头的鼠标和键盘等等

  • Linux上通常使用chmod命令对文件的权限进行设置和更改(例如chmod 775 xx文件chmod -R 774 xx文件夹)。

Linux权限简述 Linux权限详解 命令之 chmod:修改权限

磁盘操作

df -h 查看内存:

Filesystem    Size  Used Avail Use% Mounted on
/dev/s1       441G  255G  186G  58% /home/ssd0
/dev/s1       2.7T  1.9T  811G  71% /home/disk0

du -h –max-depth=1 当前目录中文件夹所含大小:

102M    ./hadoop_output_history
114M    ./hadoop_output_new

find . -size +1000M 列出当前目录下所有大于1000M的文件:

./gs/data/ann_dict
./gs/data/topic_dict