cd 进入目录

用法:cd <目录绝对路径|当前目录的相对路径> 举例:当前在/usr 目录下,想要去/etc目录。使用cd /etc或者cd ../etc,分别使用绝对路径和相对路径


ls 列举当前目录下文件

显示全部文件目录(包括隐藏文件、缓存文件和. …):ls -a 显示文件目录的修改时间、权限:ls -l 相当于ll 给文件目录添加类型:ls -F

当文件过多,一般配合grep使用,举例:

  1. ls -F | grep /列举当前目录下的所有目录
  2. ls | grep test列举当前目录下带"test"字符串的文件或目录

grep 筛选字符串

查询某文件 某些文字的上下文
grep -A 10 'csl' ./log.log:查询log.log文件中第一个csl字符的下文十行
grep -B 10 'csl' ./log.log:上文十行
grep -C 10 'csl' ./log.log:上下文十行

使用perl的正则表达式语法
grep -P '/^[0-9]{5}$/':匹配五个数字

通常和其他命令组合使用
举例:

  1. ps -ef | grep tomcat:查找包含字符串"tomcat"的运行的进程或命令
  2. ls | grep mysql:列举当前目录包含字符串"mysql"的文件或目录

mv 移动/改名

mv <文件名> <目的目录|目的文件名>:移动文件到目的目录,或者移动并改名文件到目的文件名
mv a.txt b.txt c.sh d/ f.md -t test移动a.txt b.txt c.sh d/ f.md到test目录


pwd 打印当前路径

pwd:打印当前位置的绝对路径


cp 复制

cp -rf <源文件或目录> <目的文件或目录>:将源文件目录复制到目的文件目录;r 递归复制(复制目录的子目录) ,f 不提示强制复制源覆盖目的(这个一般情况下不起作用)

\cp -rf <源文件或目录> <目的文件或目录>:不提示 强制进行copy,强制覆盖


mkdir 创建目录

mkdir test:创建test目录
mkdir -p test_father/test_son test_mother/test_son:递归创建 “test_father” 和 “test_son” 目录,test_mother与其下的test_son
mkdir -p test/{a,b,c,d}:递归创建test和其下的abcd四个目录


rm 删除

rm -rf <文件名>:强制删除文件或目录,r递归删除,f不提示


tar

tar zxvf <文件名前缀.tar.gz> -C <目标文件路径>:解压.tar.gz压缩包,

  • z:支持gzip文件.gz
  • x:从压缩文件中提取文件
  • v:显示操作过程
  • f:指定压缩文件
  • -C:解压到

tar zcvf <压缩文件名前缀.tar.gz> <file1 <...file2 file3 file4>>:将单个或多个文件或目录压缩成.tar.gz压缩文件

  • c:建立新的压缩文件

ps:不加z 是tar文件??

将一个大文件或目录分包成几个压缩包
tar zcvf - bigFile | split -b 500m - bifFile.tar.gz 解析:

先将bigFile,压缩成文件名为-的文件,
split 切割文件,
-b 指定文件大小,
500m 切割后每份文件500MB及以下
- 要切割的文件
bigFile.tar.gz 切割后文件的前缀名(生成的文件是前缀aa,前缀ab,前缀ac....)

将多份压缩包解压成一个文件
cat bigFile.tar.gz* | tar zxv 我觉得这么写好看些:cat bigFile.tar.gz* > bigFile.tar.gz | tar zxvf bigFile.tar.gz


unzip

unzip <压缩文件>:解压压缩文件到当前目录


vim 编辑文本

用法:vim <文本路径/文本名称> 举例:修改当前目录下的test.md文件,使用vim ./test.md,会进入指令模式。
(vim的三种模式叫法很乱,我按自己的习惯来叫的:
通过按键操作——指令模式
按了’:'之后——命令模式
按了’i’之后——编辑模式

指令模式:

i:进入编辑模式
Shift+v:(此命令也就是’V’ 大写)行选择
Shift+V:(此命令就是’v’ 小写)段落选择
v:视图
y:(行选择、段选择或者视图 选中之后)复制
x:(行选择、段选择或者视图 选中之后)剪切
p:在光标行的下一行 粘贴
yy:复制当前行,3yy包括当前行向下复制三行
dd:删除当前行,2dd包括当前行向下删除两行
u:撤销操作
Ctrl+r:反撤销
Ctrl+w+w:多窗口下的切换窗口
Ctrl+w+[h\j\k\l]:多窗口下的指定方向切换窗口(h左,j下,k上,l右)
0:光标移至行首
$:光标移至行尾
gg:光标移至文件首行
G:光标移至文件尾行
/:查找文本;例如查找"root"字符串 /root。注:转义用 \

  • n:下一个匹配文本
  • N:上一个匹配文本

?:向上查找文本,用法与’/'相同,不过,'n’向上匹配下一个,'N’向下匹配
Ctrl+b:向上翻页
Ctrl+f:向下翻页

编辑模式:

Esc:退出编辑模式,进入指令模式
Ctrl + Insert:复制
Shift + Insert:粘贴
Ctrl + w:向前删除一个单词
Ctrl + n:自动补全命令

命令模式:

:q:退出,若文件文本内容改变,会提示需使用强制退出命令才能退出
:q!:不写入强制退出
:wq:强制写入并退出
:x:检测文本内容是否修改,若修改则保存并退出,无修改直接退出
:X:设置密码
:vs <文件路径/文件名>:多列窗口编辑
:sp <文件路径/文件名>:多行窗口编辑
:res <+|-|=> <num>:高度±=多少
:vertical res <+|-|=> <num>:宽度
:%s/a/b/g:将全文出现的a替换成b

  • %s:所有行
  • g:全部

cat 查看文件(全部列出来)

cat <文件> | tail -n <数字>:查看<文件>的末尾<数字>行
cat <文件> | head -n <数字>:开头,用法同上


more 查看文件(以页的形式展示)

more <文件>

空格:向下一屏
Enter:向下一行


lsof (list open files)查看打开的文件

linux环境一切都以文件的形式存在

lsof -i :<端口号> 查询占用端口的进程信息


ps 查看进程

显示所有的进程和命令行:ps -ef 列举目前内存中运行的程序:ps -aux

ps:ps通常通过 | 管道与 grep 一起使用

举例:ps -ef | grep mysql:列举包含"mysql"的进程或命令


kill 杀死进程

kill -9 <进程号>:强制杀死进程;


rz、sz、scp 文件传输

rz:将文件从window上传到linux系统上
大文件上传,因为特殊字符而中断,使用rz -be,b:二进制方式上传,e:对所有控制字符转义

sz <路径/文件名称>:将文件从linux的路径名称下下载到window中

scp -P <port> -r <文件> <用户名>@<ip地址>:<目录或新文件名>:linux 与linux系统间的文件传输

P 指定端口号
r 递归传输,可理解指定目录


find 查找文件

模板:find <路径> <选项> "<参数>"

-name: 查找 名字为 name 的文件
find . -name "mysql*":查找当前目录下以"mysql"为开头的文件

-type: 按类型查找

f 文件 find . -type f d 目录 find . -type d c 字符设备文件 find . -type c b 块设备文件 find . -type b l 链接文件 find . -type l p 管道文件 find . -type p

-mtime: 查找 按天为阶段 修改的文件

  • -n:n天内修改的文件
  • +n:n天以外修改的文件
  • n:n天修改的文件

find <路径> -mtime 0:查找路径下所有修改时间在一天内的文件
find <路径> -mtime -5:五天内修改的文件

-mmin按分钟、-size按大小 用法与-mtime相同


rpm 安装包管理

rpm -qa | grep java:查找包含"java"的安装包

  • -q:查询一个包是否安装
  • -a:查询所有安装包

rpm -e --nodeps <文件>: 删除安装包


systemctl

服务管理(兼容service)
systemctl <command> <unit>

  • command:
  • start:启动服务
  • stop:停止服务
  • restart:重启服务
  • reload:重载配置文件
  • enable:开机启动
  • disable:取消自动开机
  • status:查看服务状态
  • show:查看服务配置

systemctl start docker:启动docker服务


service

service stop docker.service:启动docker服务


chmod 修改权限

chmod <操作对象><操作符><权限> <文件>:

  • 操作对象:
  • u:用户user,文件的所有者
  • g:用户组,文件所属用户组
  • o:其他用户
  • a:所有用户
  • 操作符:
  • +:增加权限
  • -:减少权限
  • =:直接赋予权限
  • 权限:
  • r:读权限
  • w:写权限
  • x:执行权限

chmod a+x <文件>:添加 所有用户对文件的执行权限

ll 查看文件权限为:“-rwxr-xr–”
第一个"-"表示类型
前三个rwx为文件所有者权限,可读可写可执行
中间三个r-x为文件所属组权限,可读不可写可执行
后三个为其他用户权限,只可读

换成二进制,rwx为 111,也就是十进制的7
r-x为 101,十进制为 5
r–为100,实际值为 4

所以另一种赋予权限的写法:
chmod 777 <文件>:添加 所有用户对文件的读写执行权限


sed

利用脚本处理文本文件
sed <动作> <脚本> <文件>

  • 动作:
  • a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

我只使用过 -i,
举例,将test.txt文件中的所有name替换成nickname,sed -i "s/name/nickname/g" test.txt


ssh 连接服务器

通过指定端口,跳转连接 服务器
ssh <username>@<ip> -p <port>


sftp 安全文件传输协议

用法与ftp基本相同。

远程连接:sftp <username>@<ip> 回车后yes存储秘钥,输入密码,登录sftp终端

文件上传:put -r <local_file_path> <server_file_path> 文件下载:get -r <server_file_path> <local_file_path>


curl 请求Web服务器

curl <参数> <ip>:访问ip地址,或者域名,返回html
例如:curl baidu.com:访问百度网站,返回html
参数
-k:忽略证书不受信
-b:指定cookie
-i:指定响应头

curl模拟post请求
curl -H 'Content-Type:application/json' -X POST http://ip:port/path -d '{"first":"f","second":"s"}'


echo 打印输出

echo 打印输出


reboot 重启linux

reboot 重启主机


重定向

>: 重定向,清空目标文件内容,并将源文件内容添加至目标文件尾
>>: 追加重定向,将源内容追加在目标尾部
举例:test.txt有文本"111"
echo "123" > test.txt:test.txt中只有123
echo "123" >> test.txt:test.txt中有111和123


ulimit 控制shell程序的资源

ulimit -a:显示目前资源限制的设定
ulimit -n 2048:设定打开文件句柄的上限


mount 挂载硬盘

mount /dev/vdb /mnt:将/dev/vdb硬盘 挂载到 /mnt目录
mount -t ext4 /dev/vdb /mnt:格式化硬盘/dev/vdb 为 ext4格式,并挂载到 /mnt


env 查看环境变量

env:查看环境变量


export 设置或查看环境变量

export <-fnp><变量名>=<变量值> 参数说明:
- f:代表变量名为函数名称
-n:不显示指定变量,后续指令不再显示指定变量
-p:列出所有shell赋予程序的环境变量

举例:
export -p:列举所有变量
export MY_ENV=123:定义变量并赋值


crontab 定期执行程序

crontab [-u user] file:为某个用户设定定期执行file文件

举例:

  1. 创建编辑一个测试输出的文件:touch /home/test
  2. 创建编辑一个文件 作为时程表,vim crontab_file
    编辑内容为 * * * * * echo 'test' >> '/home/test'(每分钟执行一次输出test文本追加到test文件)

时间格式如:f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推

  1. 为root用户指定这个时程表,crontab -u root /home/crontab_file
  2. 等待一段时间查看/home/test文件,是否追加test文本。
  3. 查看 /var/spool/cron/root,文件为root用户的时程表
  4. 查看 /var/spool/mail/root,文件为root用户的定时任务 执行日志。
  5. crontab -l,查看当前登录用户的时程表;crontab -r,删除当前用户的时程表;crontab -e,修改时程表

date 输出日期

date:输出日期

格式化输出:date '+<format>',例如date '+%Y-%m-%d %H:%M:%S'

format格式

说明

%%

一个文字的 %

%a

当前locale 的星期名缩写(例如: 日,代表星期日)

%A

当前locale 的星期名全称 (如:星期日)

%b

当前locale 的月名缩写 (如:一,代表一月)

%B

当前locale 的月名全称 (如:一月)

%c

当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)

%C

世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)

%d

按月计的日期(例如:01)

%D

按月计的日期;等于%m/%d/%y

%e

按月计的日期,添加空格,等于%_d

%F

完整日期格式,等价于 %Y-%m-%d

%g

ISO-8601 格式年份的最后两位 (参见%G)

%G

ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用

%h

等于%b

%H

小时(00-23)

%I

小时(00-12)

%c

按年计的日期(001-366)

%k

时(0-23)

%l

时(1-12)

%m

月份(01-12)

%M

分(00-59)

%n

换行

%N

纳秒(000000000-999999999)

%p

当前locale 下的"上午"或者"下午",未知时输出为空

%P

与%p 类似,但是输出小写字母

%r

当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)

%R

24 小时时间的时和分,等价于 %H:%M

%s

自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数

%S

秒(00-60)

%t

输出制表符 Tab

%T

时间,等于%H:%M:%S

%u

星期,1 代表星期一

%U

一年中的第几周,以周日为每星期第一天(00-53)

%V

ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)

%w

一星期中的第几日(0-6),0 代表周一

%W

一年中的第几周,以周一为每星期第一天(00-53)

%x

当前locale 下的日期描述 (如:12/31/99)

%X

当前locale 下的时间描述 (如:23:13:48)

%y

年份最后两位数位 (00-99)

%Y

年份

%z +hhmm

数字时区(例如,-0400)

%: z +hh:mm

数字时区(例如,-04:00)【 : 和 z 之间没有空格,markdown连在一起就成表情了】

%:: z +hh:mm:ss

数字时区(例如,-04:00:00)【同上注释】

%::: z

数字时区带有必要的精度 (例如,-04,+05:30)【同上注释】

%Z

按字母表排序的时区缩写 (例如,EDT)


查看硬件配置

查看linux系统版本:lsb_release -a或者红帽子系命令cat /etc/redhat-release或者发行版命令cat /etc/issue 查看CPU名称:cat /proc/cpuinfo | grep 'model name' | uniq 查看cpu物理个数:cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l 查看内存使用状况:free -h 查看CPU使用情况:top 查看硬盘容量:lsblk 查看单个cpu核数:cat /proc/cpuinfo | grep 'cores' | uniq 查看linux内核版本:cat /proc/version或者uname -a 查看硬盘储存情况:df -h 查看当前目录存储情况:du -sh *


快捷键

Ctrl + l:清屏
Ctrl + r:history,查找之前执行的命令
Ctrl + g:退出history