shell不是具体哪一款程序,是一类程序的统称,这些程序只要是能够按照用户的要求去调用操作系统的接口,就可以称之为shell程序.
linux发展至今,有许多shell程序,其中一款软件叫做bash.
以我的测试机centerOS6.5为例,可以通过/etc/shells文件下查看有多少个可以使用的shell程序,注意第二个/bin/bash就是现在linux标准shell程序.也就是平常说的bash.
[[email protected] ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[[email protected] ~]$
当我们用命令行的方式登录到一台linux机器,此时就开启了一个shell程序供我们与操作系统进行交互,具体是开启了哪一款shell软件,可以通过linux系统内所有账号信息文件/etc/passwd查看,
[[email protected] ~]$ cat /etc/passwd
#注意每一行代表一个账号,每一行中用:隔开代表一个部分,每一行的:隔开的最后一个部分就是该账号登录后默认开启的shell程序
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
mysql:x:498:498:MySQL server:/var/lib/mysql:/bin/bash
YAOYE:x:500:500::/home/YAOYE:/bin/bash
[[email protected] ~]$
从上面的信息可以确定,当前我登录的账号YAOYE的默认shell程序就是bash.
当我们用命令行远程连接一台linux主机之后,就开启了bash.
在命令行中我们通过上下键可以查看敲过的历史指令,并且重新连接后依然存在.
可以通过tab键来自动补全指令.
可以通过alias来为复杂指令起别名.
例如:
alias lm='ls -al'
以后就可以用lm来代替 ls -al 来查看文件夹内的隐藏文件了,另外直接输入alias然后回车可以查看当前已经定义别名的指令.
[[email protected] ~]$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias lm='ls -al'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[[email protected] ~]$
可以让指令在后台运行,不被ctrl+c所阻断.
通配符 *
比如查询当前文件夹下有多少版本号是3.4.6的jar包
[[email protected] lib]$ ls -l ./*3.4.6.jar
-rw-rw-r--. 1 YAOYE YAOYE 792964 9月 10 2018 ./zookeeper-3.4.6.jar
[[email protected] lib]$
通过 man bash可以查看bash的具体介绍和使用,按q退出.
[[email protected] ~]$ man bash
BASH(1) # (1) 代表用户在 shell 环境中可以操作的挃令戒可执行文件 BASH(1)
NAME #bash的全称
bash - GNU Bourne-Again SHell
SYNOPSIS #bash的用法的语法
bash [options] [file]
COPYRIGHT #版权
Bash is Copyright (C) 1989-2009 by the Free Software Foundation, Inc.
DESCRIPTION #bash的介绍
Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file. Bash also incorporates
useful features from the Korn and C shells (ksh and csh).
..........省略
bash的man信息内容非常多,如果要读完恐怕要几天几夜.
变量含义和平常写程序中定义一个某类型的变量是一个意思.
在bash中查看变量的值: echo $变量名
例如,大写的PATH是bash中的一个用户变量,这个变量是bash内已经定义好的,其他还有比如 PATH、HOME、MAIL、SHELL
[[email protected] local]$ echo $PATH
/usr/local/src/java/jdk1.8/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/YAOYE/bin
[[email protected] local]$
语法:变量名=变量值
变量名不用声明,直接这样写就行
[[email protected] local]$ echo $testing
[[email protected] local]$ testing=定义一个变量了
[[email protected] local]$ echo $testing
定义一个变量了
[[email protected] local]$ testing=200
[[email protected] local]$ echo $testing
200
赋值符号两边不可以有空格.
变量内如果有空格可以用单引号将整个变量的值括起来.当变量的值引用了变量,则用双引号将变量的值括起来.
[[email protected] ~]$ echo $testing
200
[[email protected] ~]$ testing2="testing1=$testing"
[[email protected] ~]$ echo $testing2
testing1=200
[[email protected] ~]$ testing2="$testing"str
[[email protected] ~]$ echo $testing2
200str
[[email protected] ~]$
变量在其他程序中使用需要用 export 变量名 将变量声明成环境变量.子程序的意思是在shell程序中开启了另外一个shell程序.
[[email protected] ~]$ bash #进入子程序
[[email protected] ~]$ echo $testing2 #子程序无法使用外层bash声明的变量
[[email protected] ~]$ exit #退出子程序
exit
[[email protected] ~]$ echo $testing2 #在外层程序将变量设置成环境变量
200str
[[email protected] ~]$ export testing2 #在外层程序将变量设置成环境变量
[[email protected] ~]$ bash
[[email protected] ~]$ echo $testing2
200str
[[email protected] ~]$
取消变量的方式是 unset 变量名.
可以用键盘上数字1左边的那个按键或者$()括起来其他命令,用命令的返回值用作当前指令的内容
[[email protected] kernel]$ cd /lib/modules/${uname -r}/kernel #uname -r 这个指令的返回当前linux内核的版本
-bash: /lib/modules/${uname -r}/kernel: bad substitution
[[email protected] kernel]$ cd /
[[email protected] /]$ cd /lib/modules/`uname -r`/kernel
[[email protected] kernel]$ pwd
/lib/modules/2.6.32-431.el6.i686/kernel
[[email protected] kernel]$ cd /lib/modules/$(uname -r)/kernel
[[email protected] kernel]$ pwd
/lib/modules/2.6.32-431.el6.i686/kernel
查看当前所有环境变量 env 指令
[[email protected] ~]# env
HOSTNAME=yaoyeLinux
SHELL=/bin/bash
.....略
testing2=200 #注意使用过export的变量会变成环境变量,注意只对当前shell和子shell有效
注意env指令查看的是环境变量,用set则是查看所有变量, 包括环境变量,用户自定义的变量.
语法是:read -p 提示语 -t 等待时间 变量名
[[email protected] ~]$ read -p "yes/no:" -t 30 agree
yes/no:yes
[[email protected] ~]$ echo ${agree}
yes
[[email protected] ~]$
语法 declare [-aixr] 变量名
-a : 数组类型
-i : int 类型
-x : 直接转换成环境变量
-r : readonly,不可修改,不可unset
例1:数字运算
[[email protected] ~]$ sum=1+200
[[email protected] ~]$ echo $sum
1+200
[[email protected] ~]$ declare -ix sum=1+200
[[email protected] ~]$ echo $sum
201
[[email protected] ~]$
注意:bash下直接运算只支持到整数,比如1/10结果是0
例2:数组
[[email protected] ~]$ arr[0]=1
[[email protected] ~]$ arr[1]=2
[[email protected] ~]$ echo "${arr[0]},${arr[1]}"
1,2
[[email protected] ~]$
区别就是获取bash是否需要登录.
login shell: 例如通过客户端远程连接linux
non-login shell:比如在已经获取的bash中开启新bash.
一、glide缓存策略缓存在请求网络图片时能减少不必要的流量浪费。Glide 缓存分为内存缓存和硬盘缓存,这两个缓存模块的作用各不相同,内存缓存的主要作用是 防止应用重复的将图片数据读取到内存,而硬盘缓存则是防止应用重复从网络或其他地方下载和读取数据。关于缓存,就一定涉及到缓存 key 。如何生成 key 呢?查看 KeyFactory.buildKey() 方法。一般一张网络图片的唯一标志是图片 url 地址,但是基于这张图片加载时设置的一系列规则,比如 override 设置了固定大小也会生成新的缓
注意: 以下命令都是在配置完环境变量后, 才可以任意目录下输入的命令,配置环境变量示例任意目录下输入 vim /etc/profiles打开后,按下i键, 进行插入, 在最下方插入下方示例, 其中 /usr/local/mysql 是export MYSQL_HOME=/usr/local/mysqlexport MYSQL_HOMEexport PATH=$PATH:$MYSQL_HOME/bin1.mysql在配置完环境变量后, 输入 mysql -V, 即可查看mysql的版本号
$more get_wstts_success.sh#!/bin/bashopen_gw_1=$(ssh [email protected] "sh /home/admin/bin/check_wstts_success.sh")open_gw_2=$(ssh [email protected] "sh /home/admin/bin/check_wstts_success.sh")...
项目当中需要绘制一个虚线圆和虚线椭圆,记录一下,以免忘记
ClassLoader 类加载器Class类描述的是整个类的信息,在Class类中提供的forName()方法,这个方法根据ClassPath配置的路径进行类的加载,如果说现在你的类的加载路径可能是网络、文件,这个时候就必须实现类加载器,也就是ClassLoader类的 主要作用。1 ClassLoader是什么?首先通过Class类观察如下方法: public ClassLoader g...
生物信息学习的正确姿势NGS系列文章包括NGS基础、转录组分析(Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析(ChIP-seq基本分析流程)、单细...
CAGradientLayer 是用来生成两种或更多颜色平滑渐变的 也是一个图层,layer的mask属性也是一个图层(CALayer),mask属性就像一个饼干切割机,mask图层的不透明的部分会被保存下来,透明的部分会被抛弃,也就是说 一个layerA 本身自带一张图片,假设再设置这个layerA的mask属性为layerB,layerB也含有一张图片,那么结果就是 相当于把layerB覆盖到
L2-013. 红色警报时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,...
贝茜的晨练计划cowrun.pas/c/cpp【题目描述】 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。 贝茜的体力限制了她跑步的距离。更具体地,如果贝茜选择在第i分钟内跑步,她可以在这一分钟内跑D_i(...
为什么80%的码农都做不了架构师?>>> ...
文章目录kNN算法1.算法简介2.算法思想3.算法流程kNN算法的一般流程伪代码4.代码部分kNN算法的python实现kNN实现手写数字分类数据集部分可视化预测,计算accuracy5.实验部分(k的取值对决策的影响)实验结论实验代码6.算法优缺点kNN算法1.算法简介kNN算法全称叫k-Nearest Neighbors,即k最近邻算法。1968年由 Cover和 Hart 提出。在机器学习算法中,kNN算法的思想简洁,可解释性强,同时也是一个有监督学习通用算法(既适用于分类问题也适用于回归问题)
在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力: @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); ...