man
man command
查看命令的详细说明(command --help的说明较man的更简短)
ls
ls
查看当前目录下的文件
ls -a
查看当前目录下的文件(包含隐藏文件)
ls -la
以详细列表方式查看当前目录下的文件(包含隐藏文件)
ls -lh
以详细列表方式查看当前目录下的文件(包含隐藏文件),并将文件大小以mb的方式显示。
ll
ll
ll -a
ll -la
ll -lh
scp
scp filename user@host:path
通过scp传输文件
ssh
ssh user@host
(生成rsa秘钥:ssh-keygen -t rsa
)
通过ssh登录到服务器
cd
目录跳转
pwd
打印当前目录
cat
- 查看文件内容
-
cat a>>b
将a文件内容写入b中(如果b不存在则等同于复制a文件并重命名为b,若b存在,则会将a的内容append到b中)
touch
创建一个当前不存在的文件(新建空白文件)
与cat不同的是touch只会创建空白文件,而cat >filename
可以在创建的时候指定文件内容(使用cat >filename <
cat >filename
是以ctrl+d为文件结束标记)。
chmod
sudo chmod 775 filename
修改文件权限
ps
ps -ef|grep xxx
通过正则表达式xxx在当前任务管理器中查找匹配到的任务
top
任务管理器
kill
kill -9 pid
关闭指定pid的任务
tar
tar -zvxf xxx.tar.gz -C path
x : 从 tar 包中把文件提取出来。
z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压。
v : 显示详细信息。
f xxx.tar.gz : 指定被处理的文件是 xxx.tar.gz
mkdir
创建文件夹
vim
:wq和:x大部分情况等同。但是wq相当于重写文件,即时没有修改任何内容,也会将文件上一次修改时间进行更新。而x则会判断是否修改了文件,如果没有任何操作,则只是相当于关闭文件。
环境变量
bash_profile文件在~目录下,为隐藏文件。通过vim等工具打开,修改后通过source命令使更新生效。
其实$符号指代上面已有路径的别名,在linux中通过冒号分割多个路径,通过export导出。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
JAVA_HOME=/home/wqzjk393/hadoop_learning/app/jdk1.8.0_241/
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export PATH
如上述配置中,可以通过echo \$PATH
,echo \$HOME
,echo \$JAVA_HOME
打印当前配置的环境变量
rm
删除文件
rm -rf
r表示recursive,即递归删除文件目录下的所有文件
f表示force,即强制性删除,即时是只读文件也会进行删除
其他参数:
i,表示每个文件都进行删除操作的确认
d,表示将空白文件夹删除
可以使rm命令alias为mv操作,避免误删导致的数据丢失:
具体的方法如下:
首先建立一个脚本remove.sh并编辑:
touch remove.sh
NOW=`date +%Y-%m-%d_%H:%M:%S` for i in $*; do fileName=`basename $i` mv -v $i /tmp/delete/$fileName.$NOW done
这里是将要删除的文件(夹)移动到了/tmp/delete文件夹并输出提示
文件(夹)名字加入了删除时间的后缀防止了重名的出现
然后alias rm指令到我们写的remove.sh脚本,~/.bashrc中最后一行添加:
alias rm='sh ~/你的remove.sh的位置'
使环境变量立即生效:source ~/.bashrc
如果是使用在服务器上,永不关机,就需要移动到指定的目录下,计划crontab定期清理了,比如:crontab -e最后一行添加:
0 3 * * * rm -rf /你的删除存放目录/*
表示每天凌晨3点定期清理指定目录下的文件
mv
移动或重命名文件
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
rename
rename [options] expression replacement file...
“mv命令只能对单个文件重命名”,这实就是mv命令和rename命令的在重命名方面的根本区别。
EXAMPLES
Given the files foo1, ..., foo9, foo10, ..., foo278, the commands
rename foo foo0 foo?
rename foo foo0 foo??
will turn them into foo001, ..., foo009, foo010, ..., foo278.
And
rename .htm .html *.htm
will fix the extension of your html files.
仅修改单个文件的名称:rename 修改前的文件名 修改后的文件名 修改前的文件名
因为rename可以批量修改,并通过正则表达式的方式只修改文件名中的某一部分,所以比mv要复杂一些。
查看端口
1、lsof -i:端口号
2、netstat -tunlp|grep 端口号
都可以查看指定端口被哪个进程占用的情况
sudo -i和su
su
切换为某用户,默认为root
sudo -i
切换为root用户
防火墙
centos7系统为代表的的firewalld防火墙
查看防火墙软件状态
systemctl status firewalld
或
sudo firewall-cmd --state
开启防火墙
systemctl start firewalld
关闭防火墙
systemctl stop firewalld
添加防火墙规则
首先通过firewall-cmd --get-active-zones
查看所属区域,
再通过firewall-cmd --zone=public --add-port=80/tcp --permanent
开放public区域tcp流量的80端口且持续生效。
也可以使用firewall-cmd --zone=public --add-port=5000-10000/tcp --permanent
开放某个范围的全部端口。
重新载入使配置生效firewall-cmd --reload
查看当前配置的端口firewall-cmd --zone=public --query-port=80/tcp
查看当前全部TCP规则firewall-cmd --zone=public --query-protocol=tcp
查看当前全部端口规则firewall-cmd --zone=public --list-ports
删除配置firewall-cmd --zone=public --remove-port=80/tcp --permanent
以centos6为代表的iptables防火墙
查看防火墙软件状态
service iptables status
开启防火墙
systemctl start iptables
关闭防火墙
systemctl stop iptables
添加防火墙规则
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
其中-A代表APPEND,即在配置文件的末尾添加配置规则。由于iptables是链式(chain)过滤,因此过滤的顺序可能会影响到实际的效果。如果使用-I的话,表示INSERT,即在指定位置(如iptables -I 3 ......
)添加规则,如果不指定位置,则会添加至起始位置。如果使用-D,则表示的是删除某一规则。
-p表示需要过滤的协议,后跟--dport 8000表示对8000端口的tcp协议流量进行过滤
-j表示要执行的操作,常用的包括ACCEPT即允许流量通过、DROP即丢弃(拒绝)该流量、FORWARD即对该流量进行转发操作。
查看已配置的防火墙规则列表
iptables -nvL --line-number
使防火墙配置生效
systemctl restart iptables
安装软件
centos等:yum install
Ubuntu等:apt-get install
mac:brew install
wget "url" (主要是通过url下载包,但是并不会安装下载下来的包)
统计文件行数
wc -l
vim
vi/vim是linux下一款非常好用的文本编辑工具。
以下为vim常用的命令及操作
三种模式
通过esc按键
进入普通模式
在普通模式中通过i
进入编辑模式
在普通模式中通过:
进入命令模式
在普通模式中,使用/
可以直接内容查找模式,类似于notepad中的ctrl+f,但是vim的查找是具有正则匹配功能的
删除
x
删除一个字符
dd
删除一行
dw
删除一个单词
d
通用删除,但是需要通过shift v或其他方式(如鼠标)选中了要删除的部分,再使用d才有效。
delete、backspace按键
移动
hjkl移动
类似于上下左右移动,依个人习惯使用
w
前进一个单词
b
后退一个单词
^
跳转到当前行的第一个字符
$
跳转到当前行的最后一个字符
gg
跳转到第一行
shift+g,或大写字母G
跳转到最后一行
行数 gg
直接在普通模式输入命令,跳转到指定行
退出
:wq
保存并退出(一定会修改文件时间戳)
x
保存并退出(会自行判断是否修改文件的时间戳)
:q
不保存文件退出(在未进行任何操作的情况下,否则会要求你使用强制退出)
:q!
不保存文件强制退出
配置
:set command
配置文件
不同操作系统有不同的位置,一般windows下为C:\Program Files (x86)\vim\vim80_vimrc,而linux下为~/.vimrc
查找和替换
通过/
或:/
进行查找(可加入\c
参数表示查找时大小写不敏感)
通过:{作用范围}s/{from}/{to}/{替换标志}
进行替换。
作用范围包括全局、当前行、选区等。
全局:%s/{from}/{to}/{替换标志}
当前行:s/{from}/{to}/{替换标志}
视图模式选中的行:'<,'>s/{from}/{to}/{替换标志}
(在Visual模式下选择区域后输入:,Vim即可自动补全为 :'<,'>。)
1到10行:1,10s/{from}/{to}/{替换标志}
当前行与接下来的2行:.,+2s/{from}/{to}/{替换标志}
(.
表示当前行)
当前行与上面的2行:.,-2s/{from}/{to}/{替换标志}
(.
表示当前行)
替换标志
全局(全部)替换标志g
空替换标志则会在作用范围内查找,并在当前光标后面找到第一个匹配到的进行替换,并结束查找/替换过程。
大小写不敏感i
等同于在查找语句的from
中加入\c
后缀
确认替换标志c
在匹配到后提示是否确认进行替换操作
大小写敏感和敏感
默认大小写是敏感的,可以通过\c
指定非敏感查找,或通过\C
指定敏感查找。如:%s/foo\c/bar
正则匹配
:{作用范围}s/正则表达式/替换后的内容/{替换标志}
行起始结束标识
^
表示匹配行首,$
表示匹配行尾
匹配内容
.
表示匹配任意字符
[xxxxxx]
表示匹配方括号内的字符(集),如匹配abc中的字符:[abc]、匹配abc1234中的字符:[abc1234]、匹配a到z0和到9中的字符:[a-z0-9]、匹配不在abc中的字符:[^abc]
\d
匹配阿拉伯数字,等同于[0-9]
\D
不匹配阿拉伯数字,等同于[^0-9]
\w
匹配单词字母,等同于[0-9A-Za-z_]
\W
匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\s
匹配空白字符,等同于[ \t],或[ ]。
\S
匹配非空白字符,等同于[^ \t]。
匹配次数
*
前面的表达式匹配到任意次数
+
前面的表达式匹配到最少1次
?
前面的表达式匹配到0次或1次
{n,m}
前面的表达式匹配到n到m次
{n}
前面的表达式匹配到n次
{n,}
前面的表达式至少匹配到n次(n到任意次)
{,m}
前面的表达式最多匹配到m次(0到m次)
?贪心匹配
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串“oooo”,“o+”将尽可能多地匹配“o”,得到结果[“oooo”],而“o+?”将尽可能少地匹配“o”,得到结果 ['o', 'o', 'o', 'o']
保留字符的匹配
由于类似于*
、.
等字符(或字符串)是属于正则表达式中的元字符,即本身代表了一些其他的匹配含义,因此当要匹配这些字符本身时,需要进行转义操作,即在前面加反斜线\
表示这是一个普通字符,而不是元字符。如:\*
、\+
、\.
、\?
、\\
、\/
、\[
注意,在python等其他语言的正则表达式中,是有小括号匹配方式的,即匹配到以后只修改小括号中的内容。如replace aaa(bbb)ccc mmm,匹配到aaabbbccc后只会对小括号中的bbb进行修改操作。这一功能在vim的正则表达式中是不存在的。
修改文件编码
在普通模式下使用:set fenc=xxxx
表示当前文件以xxxx编码(重新)打开。
使用set fencs=aaa,bbb...
对配置文件进行修改,则下次打开任意文件时,会首先以aaa编码进行打开,如果打开失败则以bbb进行打开。一般默认即可,有需要的话可以修改为set fencs=utf8,gb18030,unicode,ascii....