自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(202)
  • 资源 (6)
  • 收藏
  • 关注

原创 Shell基础——重导向(Redirections)

前言在学习重导向之前,请先了解什么是文件描述符。查看一个进程打开了哪些文件,可以通过/proc/[pid]/fd目录查看。其中,pid是这个进程的进程号。例如:我在终端tty2执行命令$ less /var/log/dpkg.log 然后在终端tty1执行命令$ ps -e | grep less 107 tty2 00:00:00 less$ ls -al /proc/107/fdtotal 0dr-x------ 2 felix felix 0 Jul 5 14:20

2020-07-05 14:43:25 343

原创 How to do Threat Modeling

How to do Threat ModelingFirstly, answer four questions1. What are we working on?draw first picture on whiteboardcollaborate with stake holders on the whiteboard.2. What can go wrong?use STRIDE as a guid.SpoofingTamperingRepudiationInformatio

2020-07-01 07:49:12 260

原创 Bash的功能——控制提示符

Bash打印每个主提示(PS1)之前,都会检查变量PROMPT_COMMAND的值。如果设置了PROMPT_COMMAND并且值非空,则执行该命令。$ PROMPT_COMMAND='echo hello word'hello word$hello word$hello word$在交互式Shell里,Bash会在读取命令的第一行之前展开并显示PS1,并在读取多行命令的第二行及后续行之前会展开并显示PS2. Bash在读取命令之后但在执行命令之前会展开并显示PS0.PS1的默认值是’\

2020-06-28 15:00:05 338

原创 Shell基础——模式匹配

Bash的模式匹配用处广泛。可以用在文件名扩展$ ls fo*fo0 foo

2020-06-26 15:37:36 1303

原创 Shell基础——Shell参数和变量扩展

基本格式Shell参数和变量扩展的最基本的格式是${parameter}如果parameter是数字,则是参数扩展;如果parameter是字符串,则是变量扩展;如果parameter是数组,那么就遵循数组的扩展规则;parameter还可以是@, *, #, ?, -等,那参考特殊参数的扩展。只要在不引起混淆的情况下,{ }是可以省略的,比如$ set -- a b c d e f g h i j k l m n$ echo $12a2$ echo ${1}2a2$ echo ${1

2020-06-17 21:56:02 764

原创 Shell基础——Shell扩展

Shell的执行过程里说到,Shell将输入分解为tokens后,会按照下面的顺序进行扩展:{ }扩展~扩展Shell参数和变量扩展命令替换算术扩展进程替换单词拆解文件名扩展引号删除其中,{ }扩展,单词拆解,文件名扩展,"$@“和$*,”${name[@]}"和${name[*]}会在扩展后增加单词的数目,其他的扩展都是一个单词扩展为另一个单词。{ }扩展{ }扩展的格式是可选的前缀,然后是{ }之间一系列用逗号分隔的字符串或序列表达式,然后是可选的后缀。扩展后,在{ }中的每

2020-06-14 21:58:24 407

原创 Shell基础——特殊参数

$*和$@扩展成位置参数$ bash -s a b c$ echo $*a b c$ echo $@a b c如果有引号,$*扩展为一个单词,$@还是扩展为多个单词$ IFS=.$ echo "$*"a.b.c$ echo "$@"a b c$ IFS=""$ echo "$*"abc$ echo "$@"a b c\S@扩展的单词会和前后的单词连接$ echo "12$@3"12a b c3$#扩展为位参个数$ bash -s a b c$ echo

2020-06-13 21:47:35 479

原创 Shell基础——位置参数

位置参数是用一位或多位数字(除了0)表示的参数,位置参数N可以引用为${N},或者当N由单个数字组成时,引用为$N位置参数是在调用shell时从shell参数中分配的$ bash -s a b c$ echo $1 $2 $3a b c$ cat scriptecho $1 $2 $3$ bash script a b ca b c在执行shell函数时临时替换位置参数$ bash -s a b c$ func () { echo $1 $2 $3; }$ func e d f

2020-06-12 21:52:21 425

原创 Shell基础——变量

声明变量name=[value]declare name=[value]Bash里的变量不仅有值,还有属性。declare命令可以给变量设置属性。$ declare -i abc=123 # 给变量abc赋予integer属性声明变量时,如果没有提供value,变量的值为null变量声明后,只能通过unset命令删除$ isVarSet () { if [ -v var ]; then echo "var = $var"; fi; }$ isVarSet$ var=$ isV

2020-06-11 21:56:05 179

原创 Shell基础——Shell函数

name () compound-command [ redirections ]function name [()] compound-command [ redirections ]Shell函数将命令列表组合作为一个单元执行。与命令组{ }和( )不同,定义Shell函数时不会理解执行compound-command。当将函数的名称被用作命令时,才会执行与该函数名称关联的命令列表。Shell函数在当前Shell执行,不会为函数创建一个进程。但会为函数里的命令创建进程。$ name () {

2020-06-08 21:04:20 182

原创 Shell内置命令——pwd, cd

pwd [-LP]打印当前工作目录的绝对路径名。 如果提供了-P选项,则打印的路径名将不包含符号链接。 如果提供了-L选项,则打印的路径名可能包含符号链接。 除非确定当前目录的名称时遇到错误或提供了无效的选项,否则返回状态为零。$ cd /dev/fd$ pwd/dev/fd$ pwd -L/dev/fd$ pwd -P/proc/6/fd...

2020-06-05 22:03:00 991

原创 Bash基础——命令组

Bash提供了两种方法将命令列表组合作为一个单元执行。( ) 和 { }组合命令后,重定向应用于整个命令列表。$ echo 1;echo 2 >foo1$ cat foo2$ (echo 1;echo 2) >foo$ cat foo12两种组合方式的区别(list){ list; }( )会创建一个subshell环境,list这个环境下执行。{ }不会创建一个subshell环境,list在当前shell下执行( )是运算符,list不需

2020-06-04 21:57:45 315

原创 Bash内置命令——循环结构里的break和continue命令

break从for, while, until或select循环中退出。 如果提供了n,则退出第n层嵌套循环。 n必须大于或等于1。返回状态为零,除非n不大于或等于1。continue恢复for, while, until或select循环的下一次迭代。 如果提供了n,则从第n层嵌套循环的下一次迭代执行。 n必须大于或等于1。返回状态为零,除非n不大于或等于1。...

2020-06-04 21:37:05 638

原创 Bash基础——循环结构for

forfor结构的退出状态由最后执行的commands决定。如果commands一次都没有被执行,for结构的退出状态为0.for infor name [ [in [words …] ] ; ] do commands; done迭代遍历words里每个成员,绑定到name上,并执行commands.如果in words不存在,等同于in “$@”,即遍历位置参数。$ for var in a b c; do echo $var; doneabc$ bash -s 1 2 3$ f

2020-06-04 21:29:10 144

原创 Bash基础——循环结构until和while

untiluntil test-commands; do consequent-commands; done只要test-commands的退出状态不为0, 就会一直执行consequent-commands.until结构的退出状态是最后一次consequent-commands执行的退出状态。如果consequent-commands一次都没有被执行,until结构的退出状态就为0.$ let i=0$ until (( i >= 10 )); do (( i++ ));echo $i

2020-06-03 21:43:01 245

原创 Bash基础——循环结构select

selectselect name [in words …]; do commands; done如果in words存在,就会把words打印到标准错误(standard error)流里,并显示PS3提示符,等待从标准输入中读取读取一行。如果in words不存在,等同于in “$@”,即将位置参数打印到标准错误(standard error)流里,并显示PS3提示符,等待从标准输入中读取读取一行。$ select var in a b c d; do echo $var;break; don

2020-06-01 22:00:53 406

原创 Bash基础——条件结构case

casecase word in [ [(] pattern [| pattern]…) command-list ;;]…esacBash在执行case结构前,会对word做~扩展,参数扩展,命令扩展,算术扩展和删除引号;对pattern做~扩展,参数扩展,命令扩展和算术扩展command-list后的结束符可以是;; ;& ;;&,只有它们前面的command-list被执行了,这些结束符才会发生作用,决定Bash对case后面的pattern和command-list

2020-05-31 21:57:21 202

原创 Bash基础——条件结构if

ifif test-commands; then consequent-commands;[elif more-test-commands; then more-consequents;][else alternate-consequents;]fi执行test-commands,如果返回状态为零,则执行consequent-commands如果test-commands返回非零状态,则依次执行每个elif的more-test-commands,如果退出状态为零,则执行相应的more-

2020-05-31 21:24:01 131

原创 Bash基础——复合命令:条件、循环和命令组

复合命令是Shell编程语言的一种结构,用reserved word和control operator对多个命令进行组合。Bash提供三种复合命令结构:条件、循环和命令组。复合命令在Bash里被作为一个执行单元。简单解释一下这里所说的“一个执行单元”的含义。例如在交互式shell里编写until … do… done的循环结构时,在没有输入保留字done之前,无论输入了多少个换行符,Bash都不会执行已经输入的命令。直至done输入后敲回车,Bash才会从until开始启动执行。但要注意的时,虽然复合命

2020-05-31 21:15:21 358

原创 Bash基础——顺序执行命令

首先,值得提一下的是,在Bash里,最小的执行单位应该是pipeline. Bash支持对pipelines进行组合,产生顺序、条件、循环等结构。每个pipeline在其自己的subshell中执行,有自己的PID. 但是为了方便,在这里介绍顺序、条件、循环结构时,不刻意强调是由pipeline组成,依旧以命令(command)视为基本单元顺序结构用;分隔的顺序结构$ command1;command2以;分隔的命令按顺序执行。Shell会依次等待每个命令执行终止,即每个命令都在自己的subsh

2020-05-29 22:05:31 2805 1

原创 Shell基础——简单命令和pipeline

简单命令由空格分隔,由control operators(‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘;&’, ‘;;&’, ‘|’, ‘|&’, ‘(’, or ‘)’)终止的单词序列,构成了shell的简单命令(Simple Command)。通常,第一个单词指定要执行的命令,其余单词是该命令的参数。control operators将命令进行组合,产生pipeline和listpipeline首先,一个独立的简单命令,都是pipe

2020-05-28 21:59:04 2243

原创 Bash的功能——执行启动文件

login shell如果Bash作为login shell调用时,它按顺序读取和执行以下文件中的命令:/etc/profile(如果存在)~/.bash_profile~/.bash_login~/.profile通常,在/etc/profile里有这么一句:if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done

2020-05-27 21:57:58 395

原创 Bash的功能——Login Shell

除了Linux的login进程通过/etc/passwd文件调用bash进入Login Shell模式,还有几种进入Login Shell模式的方式。

2020-05-26 21:25:54 1593

原创 Bash的功能——交互式Shell

有如下几种调用Bash进入交互式Shell的方式:没有任何非选项参数$ bash$ PS1=">> " # 此处进入了交互式的子Shell里>> exit # 退出子Shellexit$用-s选项,但不能用-c选项. 这种方式也可以进入交互式Shell.-s选项后面的参数会作为位参传递给交互式Shell$ bash -s a b c$ echo $1 $2 $3a b c-i选项强制Shell以交互式方式运行$ bash -i$ PS1="

2020-05-24 21:51:59 1591

原创 Shell基础——引号规则

在shell里,有些字符或word有特殊的含义,shell会特殊对待它们。例如reserved word, metacharacters, operator,参数扩展符$, 历史扩展符 ! 等。而引号或转移字符的作用就是删除它们的特殊含义。转义字符 \\ 保留了下一个字符的字面值$ echo $(( 1+1 ))2$ echo \$\(\( 1+1 \)\)$(( 1+1 ))$ echo \$\(\( \1\+\1 \)\)$(( 1+1 ))$ echo \\\但是换行符例外。\

2020-05-21 21:21:20 215

原创 Shell基础——Shell执行过程

Shell读取并执行命令时,基本上会执行如下操作:读取输入。Shell输入的来源有三种:文件(Shell脚本),调用bash命令时-c选项提供的参数,用户终端。

2020-05-19 21:22:19 720

原创 Shell基础——Shell脚本

Shell在读取和执行命令时,基本上会执行如下操作:从文件,从-c选项的参数,或者从用户终端读取输入从文件Shell脚本是包含Shell命令的文本文件。当调用Bash时将此类文件用作第一个非选项参数,并且-c和-s选项均未提供时,Bash将从文件中读取并执行命令,然后退出。这种操作模式将创建非交互式Shell。Shell先在当前目录中搜索文件,如果找不到,再在$PATH目录中查找。当Bash运行Shell脚本时,它将特殊参数0设置为文件名,而不是Shell的名称,并且位置参数设置为其余参数。

2020-05-18 21:26:24 110

原创 Shell里的定义

POSIX基于Unix的一系列开放系统标准。 Bash主要关注POSIX 1003.1标准的Shell和Utilities部分。blankspace字符和tab字符builtin由Shell本身在内部实现的命令,而不是由文件系统中某个位置的可执行程序实现的命令。special builtin在POSIX标准中被分类为特殊的builtin。metacharacter当不加引号时,用来分隔单词的字符。元字符有:space, tab, newline, 还有 | & ; ( ) &lt.

2020-05-18 06:07:19 128

原创 Bash的功能——条件表达式

条件表达式用在[[ expression ]], test expression和[ expression ]中。-a fileTrue如果文件file存在-b fileTrue如果文件file存在并且是块文件(block special file)-c fileTrue如果文件file存在并且是字符文件(character special file)-d fileTrue如果文件file存在并且是个目录-e fileTrue如果文件file存在-f fileTrue如果文件fil

2020-05-14 21:33:00 429

原创 Bash内置命令——read

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]从标准输入中读取一行,或从-u选项指定的文件描述符fd读取一行,拆成单词后,依次赋值给name$ echo 1 2 3 >foo$ read a b c <foo$ echo $a+$b=$c1+2=3$ read -u 3 e f g 3<foo$

2020-05-11 22:00:30 384

原创 Bash的功能——数组

Bash提供两种数组变量:索引数组和关联数组。Bash的数组变量是一维的。任何变量都可以用作索引数组。当使用name[subscript]=value这种语法时,就自动创建了一个索引数组变量。(subscript是必须得到数字的算术表达式)$ bar=1+2$ declare -p bardeclare -- bar="1+2"$ bar[0]=1$ declare -p bardeclare -a bar=([0]="1")$ bar=1+2$ declare -p bardeclar

2020-05-08 22:12:43 516

原创 Bash的功能——shell算术

shell会在以下几种情况下对算术表达式求值算术扩展(Arithmetic Expansion) $ echo $(( 1+2 ))3Bash内置命令let$ let foo=1+2$ echo $foo3复合命令(($ (( foo=1+2 ))$ echo $foo3declare命令的-i选项$ declare -i foo=1+2$ ech...

2020-05-07 21:59:59 164

原创 Bash内置命令——local

locallocal [option] name[=value] …声明变量name,并赋值。为变量name赋予属性。local命令的option参考declare命令。local命令只能在一个函数内使用; 它使变量名的可见范围仅限于该函数及其子函数。如果name为‘-’,则将shell选项集设置为局部的:在函数内部使用set命令更改的shell选项只在函数内生效,当函数退出后,恢复原...

2020-05-07 21:16:45 3307

原创 Bash内置命令——declare

declaredeclare [-aAfFgilnrtux] [-p] [name[=value] …]声明变量并为其赋予属性。$ declare foo=bar abc=123$ echo ${foo} ${abc}bar 123如果没有给name,则显示所有变量。$ declareBASH=/bin/bashBASHOPTS=checkwinsize:cmdhis...

2020-05-06 22:02:04 1897

原创 Shell内置命令——执行Bash脚本的 . 运算符

. 句号. filename [arguments]从当前Shell上下文中的filename读取和执行命令。如果没有执行任何命令,return status为0;否则,return status为最后执行的命令的exit status;如果找不到filename,或无法读取,return status不为0。等同于另一个Shell内置命令source例子1 filename里有/...

2020-05-05 21:57:59 248

原创 Shell内置命令——:运算符,看似无用,其实可以巧用

: 分号: [arguments]除了扩展参数(extend arguments)和执行重定向(redirections)之外,什么也不做。 返回状态(return status)为零。

2020-05-05 21:17:34 153

原创 给你们讲个发生在我身上的真实的事

给你们讲个发生在我身上的真实的事。你们现在还不知道的是,我6月份时离开了京东,加入了一家外企。7月份,我所在的团队接了一个任务。项目经理是Andrea, 需求方是产品经理Lukasz. 这个任务需要另一个产品团队B的配合,这个团队的成员有Chi, Chudy和Taylor. 这个任务的设计和实现由我承担。我们按照Lukasz的需求设计进行研发,在中期时开始和团队B沟通合作,团队B在美国

2017-08-09 14:55:08 618 1

原创 用个小例子来介绍一下JDK8的CompletableFuture

代码要解决的问题是:在两个线程里并行执行任务A和任务B,只要有一个任务完成了,就执行任务C。代码如下:import java.time.LocalTime;import java.util.Random;import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;

2017-01-13 16:22:55 9471 1

原创 Parallel Scavenge收集器与MaxTenuringThreshold

在准备Java垃圾收集器和内存分配策略课件的过程中,看到Parallel Scavenge收集器与Serial收集器在Survivor区的使用策略还是有很大不同。本文对看到的Parallel Scavenge收集器的运行现象进行笔记。本人开发环境的JVM版本信息如下:>java -version java version "1.8.0_101" Java(TM) SE Ru

2016-12-19 22:05:39 941 1

原创 Parallel Scavenge收集器与PretenureSizeThreshold

的确已有定论:Paralle Scavenge收集器不认识PretenureSizeThreshold参数。但我在准备Java垃圾收集器和内存分配策略课件的过程中,发现了一个有趣的事。先记录下来,后续找到解答了再补充此文。本人开发环境的JVM版本信息如下:>java -versionjava version "1.8.0_101"Java(TM) SE Runtime Environm

2016-12-19 21:16:04 3972 1

Introduction to Algorithms, Third Edition

Introduction to Algorithms, Third Edition

2013-06-10

Spring MVC、hibernate validator和i18n源代码

我的博客中的《Spring MVC、hibernate validator和i18n》文章描述的项目的源代码,该文是对Spring mvc, validation和i18n的一个入门级的tutorial。我的博客地址是http://blog.csdn.net/zjysource

2010-03-29

《Java 2 入门经典 JDK5》 源代码

这个源代码在http://www.wrox.com上可以获得,并且还有课后习题的答案以及JDK5到JDK6的变动说明,甚至还有书中LinkedList类的纠正版本。(都在压缩包里的Beg_Java_15文件夹里)<br>但是为了学习JAVA我自己亲自把书上的例题代码都敲了一便,并运行通过(压缩包里的BeginningJava2文件夹),我把源代码按照书的页码组织的。<br>这1058页的书,我一年前看过一遍,现在又过了一遍,而且把代码都敲了一遍,对面向对象的分析和设计又有了新的更深的认识。而且这次我用了一个月的时间,整整七月份,我每天都是半天在学德语,半天在敲代码。现在总算告一段落了。紧接着要做下一件事了。呵呵。<br>现在把劳动成果拿出来与大家分享。

2008-07-31

实现了排列组合算法的类(JAVA).rar

所使用的算法应该是效率最高的算法,而且这两个类都只是对需要排列组合的数组的下标进行处理,所以能对任何类型的数组进行排列组合。

2007-08-04

DataGridView控件分页显示辅助类

这个类用于帮组DataGridView分页显示记录,而且一点也不依赖于的数据库。

2007-06-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除