shell

shell

命令描述
cat在面板打印文件内容,只读文件
sed编辑文件
sudo -i切换管理员
&后台运行,解放窗口live-server &

命令位置

  • /etc/bashrc 所有用户
  • /root/.bashrc root用户
  • /home/ [username] /.bashrc 适用于一般用户username
  • ~/.bashrc当前用户

shell 脚本

#! /bin/bash
webdir="/home/ubuntu/webapp"
# 切换工作目录
cd "$webdir"
echo "开始在${webdir}目录下更改"
git pull
cd "dist"
tar -cf myblob.tar ./*

echo 输出

可以将需要的文本输出到文件中。更改文件内容,输出需要用到输出重定向。

echo -[en] "Hello Word"  \\-e转义 -n换行

echo -e "\033[31m 红色字体 \033[0m"
echo -e "\033[32m 绿色字体 \033[0m"
echo -e "\033[33m 黄色字体 \033[0m"
echo -e "123\n123" text.txt

//循环输出
for((i=0;i<10;i++));
do
echo -ne  "\033[3${i}m $i \033[0m"
done

echo ""

history

history [-cw] [历史命令保存文件]

-c:clear
-w:write

alias

alias 别名='原命令'
vim /root/.bashrc

输入重定向和输出重定向

设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出
>  #覆盖输出
>>  #追加输出
0>> #输出
>> #标准输出
2>> #错误输出

date >> out.log
ll error 2>> err.log

多命令顺序执行

命令格式作用
;命令1 ; 命令2按顺序执行
&&命令1 && 命令2命令1正确执行命令2会执行
||命令1 || 命令2命令1不正确执行命令2会执行

grep(global regular expression print 文本搜索)

命令格式
-m num显示最大匹配次数
-n显示行号
-r递归查询
-i不区分大小写
-l只列出匹配的文件名
-L列出不匹配的文件名
-w只匹配整个单词,而不是字符串的一部分
-C匹配的上下文分别显示[number]行
grep demo text.txt
grep demo -r *  //查询当前目录所有文件包含目录
grep console -rnC 2 *
grep 123 -nr *|grep log -n //
grep -nd skip demo *  //跳过子目录
#! /bin/bash
ARGS=`grep -m 1 -n 'asd' ascll.txt|cut -f1 -d:`
`sed -ie "${ARGS}s/asd/test_repllace/" ascll.txt`

文件

所有带有输出的都可以使用输出重定向来新建文件,并且将内容写进文件。或者重写或者追加。

文件编码:set fileencoding :set fileencoding=utf-8

sed

命令描述
-i在源文件上修改
-n只会把经过 sed 命令处理的行输出到屏幕上
s格式为“行范围s/旧字串/新字串/g”
d删除,删除指定的行
a \追加,在当前行后添加一行或多行
i \插入, 在当前行前插入一行或多行
-f脚本文件名:从 sed 脚本中读入 sed 操作
``
``
sed 's/asd/aaaaaa/' ascll.txt
sed -e 's/asd/aaaaaa/' ascll.txt
sed -ie 's/asd/aaaaaa/' ascll.txt
sed '3i hello\nworld\nwl' text.txt

cut

cut -b 2,3 ascll.txt
cut -f1 -d:

管道符号 |

用法:
command 1 | command 2
他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2

字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

str='asdfgh'
echo ${#str} #获取长度->6
str=plkj
echo "length:${#str}" #拼接->length:4
echo ${#str}123qwe"asd" #拼接->4123qweasd
echo "qwe"+"asd" #拼接->qwe+asd
str=123456
echo ${str:1:2} #截取-> 23

expr

命令格式
match
substr截取expr substr STRING START NUM
index抓取第一个字符数字串出现的位置
length计算字串长度
|、&、<、<=、=、+、=、*、%运算
expr length qwe #->3
expr index 123456 4 #->4
expr length qwe #->3
expr substr 123456 2 2 #->23
expr 1 + 1 # ->2
expr 1 \* 3 # ->3

whereis

命令描述
-b二进制文件
-B只在设置的目录下查找二进制文件
-m说明文件
-s原始代码文件
-u查找不包含指定类型的文件

find

find path -option [ -print ] [ -exec -ok command ] {} \;

命令描述
-name根据文件名称查找(严格区分大小写,如果文件名中间有空格,则必须把文件名用双引号引起来)
-iname根据文件名查找(不区分大小写)
-regex“PATTERN” 正则表达式匹配。-regex不是匹配文件名,而是匹配完整的文件名(包括路径)
-user根据文件属主进行查找
-group根据文件属组进行查找
-uid根据文件的uid查找
-gid根据用户的gid查找
find ./* -iname Test.js
find  /var/log/  -name  "*.log"
find ./* -regex ".*/te[^/\.]*$"    //找以te开头的目录
find ./* -regex ".*/te[^/]*\..*$"  //找以te开头的带后缀的文件

删除后缀

find . -name '*.exe' -type f -print -exec rm -rf {} \;

jps

可以列出本机所有java进程的pid。

jps [ options ] [ hostid ]

命令格式
-q仅输出VM标识符,不包括class name,jar name,arguments in main method

-m 输出main method的参数
-l 输出完全的包名,应用主类名,jar的完全路径名
-v 输出jvm参数
-V 输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件

awk

读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域, 1 表 示 第 一 个 域 , 1表示第一个域, 1,n表示第n个域。默认域分隔符是"空白键" 或 “[tab]键”

awk '{print $2}' data.txt # 默认空格和Tab键分隔,打印第二段
awk -F, '{print $2}' data.txt # 逗号分隔,打印第二段

tar

# 是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -cf all.tar *.jpg
# 解压 tar包
tar -xvf file.tar

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的

命令描述
-c建立压缩档案create
-x解压
-t查看内容
-r向压缩归档文件末尾追加文件
-u更新原压缩包中的文件

这是配合使用的命令

命令描述
-z有gzip属性的
-j有bz2属性的
-Z有compress属性的
-v显示所有过程
-O将文件解开到标准输出

下面的参数-f是必须的

命令描述
-f使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。filename

参考

ps

ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等

命令描述
-A所有的进程均显示出来,与 -e 具有同样的效用
-u以用户为主的进程状态
-a显示现行终端机下的所有进程,包括其他用户的进程
-x通常与 a 这个参数一起使用,可列出较完整信息

lsof

apt-get install lsof
List Open Files 列出当前系统打开文件的工具。

命令描述
lsof abc.txt显示开启文件abc.txt的进程
lsof -c abc显示出以字母 abc 开头进程现在打开的文件
lsof -p 1234列出进程号为1234的进程所打开的文件
lsof -g gname/gid显示归属gname或gid的进程情况
lsof -u uname/uid显示归属uname或uid的进程情况
lsof +d /usr/local/显示目录下被进程开启的文件
lsof +D /usr/local/同上,但是会搜索目录下的目录,时间较长
lsof -i用以显示符合条件的进程情况

netstat

apt-get install net-tools

netstat -tap | grep node

netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

命令描述
-a(all)显示所有选项,netstat默认不显示LISTEN相关
-t(tcp)仅显示tcp相关选项
-u(udp)仅显示udp相关选项
-n拒绝显示别名,能显示数字的全部转化成数字。(重要)
-l仅列出有在 Listen (监听) 的服務状态
-p显示建立相关链接的程序名(macOS中表示协议 -p protocol)
-r显示路由信息,路由表
-e显示扩展信息,例如uid等
-s按各个协议进行统计 (重要)
-c每隔一个固定时间,执行该netstat命令。

tail

tail -f 100 log.log循环查看日志

命令描述
-f循环读取
-q不显示处理信息
-v显示详细的处理信息
-c<数目>显示的字节数
-n<行数>显示文件的尾部 n 行内容
–pid=PID与-f合用,表示在进程ID,PID死掉之后结束
-q–quiet, --silent 从不输出给出文件名的首部
-s–sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

head

head -2 log.log

命令描述
-n显示文件的前n行
-c n显示文件的前n个字节

more

more功能类似 cat,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。
more -10 -c log.log

参数描述
+n从笫n行开始显示
-n定义屏幕大小为n行
+/pattern在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c从顶部清屏,然后显示
-d提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l忽略Ctrl+l(换页)字符
-p通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s把连续的多个空行显示为一行
-u把文件内容中的下画线去掉
命令描述
Enter向下n行,需要定义。默认为1行

scp

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,服务器之间复制文件,而且scp传输是加密的。
scp local_file remote_username@remote_ip:remote_folder

  • remote_username 登录远程服务器的用户名字
  • remote_ip 远程服务器的IP
  • remote_folder 远程服务器文件位置
参数描述
-r递归复制整个目录
-q不显示传输进度条
-p保留原文件的修改时间,访问时间和访问权限
-C允许压缩
-F ssh_config指定一个替代的ssh配置文件,此参数直接传递给ssh

从远程服务器复制到本地服务器:
scp remote_username@remote_ip:remote_folder local_folder

# example
 scp -r wangli@172.16.126.155:/home/wangli/workspace/commons-lang-2.6 ./

nohup

后台运行程序

nohup live-server --port=10086 &
exit

free -m

内存使用量

df -h

硬盘使用量

wget

wget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip 
curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。参考

# 下载网页 小些o
curl -o linux.html http://www.linux.com
# 下载文件 大写O
curl -O http://download.redis.io/redis-stable.tar.gz

apt-get

安装应用。

# 更新本地cache
sudo apt-get update
# 搜索
sudo apt-cache search npm
# 安装mysql
sudo apt-get install mysql-server mysql-client

高级

# 卸载但不删除配置
apt-get remove xxxx 
# 卸载并且删除相关配置
sudo apt-get remove nodejs --purge
# 卸载所有自动安装且不再使用的软件包
sudo apt-get autoremove xxxx

常用;

sudo apt-get install git
sudo apt-get install nodejs-legacy
sudo apt-get install npm
sudo npm install npm@latest -g
sudo npm install -g n
sudo apt-get install nginx

安装 nginx

crontab

定时任务
1、Linux和Mac下操作crontab都是一致的
2、配置文件都在/etc/crontab下,如果没有就创建。
3、测试发现直接使用crontab -e命令创建的定时任务是放在临时文件夹的,重启会删除,并且与/etc/crontab文件无关联。

第一步:
crontab -e进入编辑界面
第二步:配置定时作业输入
* * * * * /bin/echo "11" >> /Users/apple/test/test/shell/log.log
简单的打印任务,每秒执行一次,后面的路径记得使用绝对路径。

vim

# 全局设置
vim ~/.vimrc
# 设置行号
:set nu
# 删除多行
:1,15d
# 设置tab
:set expandtab # 将tab按键设置为空格
:set ts=4 # 设置为四个空格
# 使用鼠标
set mouse=a # n 普通模式,v 可视模式,i 插入模式,c 命令行模式,a 以上所有的模式
set mouse= # 不设置任何模式,关闭鼠标模式
# 显示匹配的括号
set showmatch

vim-plug

插件管理器 Vundle
# 安装插件管理器
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
# 安装vue插件
git clone https://github.com/posva/vim-vue.git ~/.vim/pack/plugins/start/vim-vue
# 或者
vim
:PluginInstall "posva/vim-vue"

配置信息:

set nocompatible              " 这是必需的 
filetype off                  " 这是必需的 

" 在此设置运行时路径 
set rtp+=~/.vim/bundle/Vundle.vim
" vundle初始化 
call vundle#begin()
" 或者传递一个 Vundle 安装插件的路径
"call vundle#begin('~/some/path/here')

" 让 Vundle 管理 Vundle, 必须
Plugin 'VundleVim/Vundle.vim'

" 下面是不同支持幅度的例子
" 保持 Plugin 命令 在 vundle#begin 和 end 之间
" plugin 在 GitHub 仓库
Plugin 'tpope/vim-fugitive'
" 来自http://vim-scripts.org/vim/scripts.html的插件 
" Plugin 'L9'
" 未托管在GitHub上的Git插件 
" Plugin 'git://git.wincent.com/command-t.git'
" 本地机器上的git软件库(即编写自己的插件时) 
" Plugin 'file:///home/gmarik/path/to/plugin'
" sparkup vim脚本在名为vim的该软件库子目录下。 
" 传递路径,合理设置运行时路径。 
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" 安装 L9 并避免名称冲突 
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}

"每个插件都应该在这一行之前  
call vundle#end()            " 这是必需的 
filetype plugin indent on    " 这是必需的 
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

参考
参考2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值