重定向

I/O重定向和管道——《Unix/Linux编程实践教程》读书笔记(第10章)

拈花ヽ惹草 提交于 2019-12-07 16:23:53
1、I/O重定向的概念与原因 及 标准输入、输出的标准错误的定义 所以的Unix I/O重定向都基于标准数据流的原理。三个数据了分别如下: 1)标准输入——需要处理的数据流 2)标准输出——结果数据流 3)标准错误输出——错误消息流 概念:所以的Unix工具都使用文件描述符0、1和2。标准输入文件的描述符是0,标准输出的文件描述符是1,而标准错误输出的文件描述符则是2。Unix假设文件描述符0、1、2已经被打开,可以分别进行读写操作。 通常通过shell命令行运行Unix系统工具时,stdin、stdout、stderr连接在终端上。因此,工具从键盘读取数据并且把输出和错误消息写到屏幕。 大部分的Unix工具处理从文件或标准输入读入的数据。如果在命令行上给出了文件名,工具将从文件读取数据。若无文件名,程序则从标准输入读取数据。从另一方面说,大多数程序并不接收输出文件名;它们总是将结果写到文件描述符1,并将错误消息写到文件描述符2。如果希望将进程的输出写道文件或另一个进程的输入去,就必须重定向相应的文件描述符。 重定向I/O的是shell而不是程序 最低可用文件描述符(lowest-available-fd)原则:文件描述符是一个数组的索引号。每个进程都有其打开的一组文件。这些打开的文件被保持在一个数组中。文件描述符即为某文件在此数组中的索引。当打开文件时

多系统单点登录(sso)设计

和自甴很熟 提交于 2019-12-07 04:59:29
文章目录 问题提出 登录信息共享机制设计 简单实现 淘宝天猫登录信息共享(简化版) 登录流程 问题提出 多个系统中,如何做到其中一个系统登录了,在浏览器中打开其他系统也会成登录状态?比如在淘宝登陆了,打开天猫网页,也会显示已登录 网上有一种设计方案是通过二级域名来共享登录状态,本设计是针对不同域名下登录状态的信息共享。 登录信息共享机制设计 简单实现 实现原理: 通过在sso系统域名下存储信息,其他系统通过获取sso域下的cookie信息来获取登录信息 不过有个问题:出于安全的原因,当前域不能获取其他域的cookie信息,所以只能通过跨域访问sso系统,然后返回登录信息 在开始前我们设定两个变量: t_token 这个浏览器的一个标志, 在同一个浏览器中 ,所有相关系统内的网站共享同一个t_token access_token 用户真正的token 要实现上述功能,我们可以使用跨域机制来实现共享token。这里我们设置三个系统,两个客户端系统,一个sso系统。如图: 流程如下: 以上就是通过跨域来同步token的流程。 在上面的流程中,会存在一个跨域访问的问题,一般来说有两种解决方法: 使用jsonp来获取 使用CORS机制跨域获取数据 具体的可以看这两篇文章: CORS详解 跨域访问数据 淘宝天猫登录信息共享(简化版) 淘宝天猫token的获取原理是一样的,但是流程要稍复杂一些

如何优雅地将printf的打印保存在文件中?

旧城冷巷雨未停 提交于 2019-12-06 22:10:40
我们都知道,一般使用printf的打印都会直接打印在终端,如果想要保存在文件里呢?我想你可能想到的是重定向。例如: $ program > result.txt 这样printf的输出就存储在result.txt中了。 当然了,如果你既想打印在终端,又想保存在文件,还可以使用tee命令: program | tee result.txt 注:program为你运行的程序。 不过文本介绍了不是通过命令行的方式,而是通过代码实现。 写文件 你可能会想,那不用printf,直接将打印写入到文件不就可以了?类似于下面这样: #include<stdio.h> int main(void) { FILE *fp = fopen("log.txt","w+"); if(NULL == fp) { printf("open failed "); return -1; } int a = 10; fprintf(fp,"test content %d ",a); fclose(fp); return 0; } 不过这需要将原先的printf改用fprintf,修改了最原始的代码。但是本文并不是说明如何实现一个logging功能,而是如何将printf的原始打印保存在文件中。 重定向 实际上,我们的程序在运行起来后,都会有三个文件描述符: 0 标准输入 1 标准输出 2 标准错误

SHELL脚本--管道和重定向基础

末鹿安然 提交于 2019-12-06 22:07:30
匿名管道"|"                   管道符号意如其名,类似管道一样将管道入口的数据通过管道传递给管道出口。 管道是为了解决进程间通信问题而存在,它可以让两个进程之间的数据进行传递,将一个进程的输出数据传递给另一个进程作为其输入数据。管道左边是数据给予方,管道右边是数据接收方。 例如echo "abcd" | passwd --stdin username,表示将进程echo的输出结果"abcd"作为进程passwd的输入数据。 基本的管道符号及其用法很容易理解。现在的疑问是,对于ps aux | grep "ssh" ,为什么在结果里会有grep进程出现? [root@localhost ~]# ps aux |grep ssh root 1528 0.0 0.2 66236 1244 ? Ss 03:47 0:00 /usr/sbin/sshd root 1841 0.0 0.9 104616 4552 ? Ss 03:53 0:00 sshd: root@pts/0 root 2532 0.0 0.7 59836 3688 pts/0 S+ 04:46 0:00 ssh localhost root 2533 0.0 0.9 102540 4512 ? Ss 04:46 0:00 sshd: root@pts/1 root 2825 0.0 0.1 103332

Shell编程规范与变量

僤鯓⒐⒋嵵緔 提交于 2019-12-06 21:24:54
shell编程规范与变量 一、shell脚本的应用场景 ​ Shell脚本就是将要执行的命令按照顺序保存到一个文本文件,并给该文件可执行权限,方便一次性执行的一个程序文件。主要是方便管理员进行设置或管理,可结合各种shell控制语句以完成更复杂的操作。常用于重复性操作、批量事务处理、自动化运维、服务运行状态监控、定时任务执行等。 二、shell编程规范 1、shell的作用 命令解释器 : 介于系统内核与用户之间,负责解释命令行 2、用户的登录shell 登录后默认使用的shell程序,一般为/bin/bash 不同shell的内部指令,运行环境等会有所区别 通过/etc/shells文件可以了解当前系统所支持的shell脚本种类 3、编写第一个shell脚本 使用vim文本编辑器 每行一条Linux命令,按执行顺序依次编写 脚本后缀为.sh 例如,将以下三条命令按顺序用shell脚本编写 cd /boot/ pwd ls -lh vml* [root@localhost ~]# vim 1.sh #!/bin/bash cd /boot/ pwd ls -lh vml* 写好之后按 :wq 保存退出,再执行脚本。在执行脚本之前,需要赋予可执行权限 [ ] 赋予可执行权限,使脚本具有可执行属性 chmod +x 1.sh 4、执行脚本文件(三种方法) 方法一: sh脚本文件路径 ​

request与response的作用

喜夏-厌秋 提交于 2019-12-06 19:05:33
Request对象:为脚本提供了当客户端请求一个页面或者传递一个窗体时,客户端提供的全部信息。这包括能指明浏览器和用户的HTTP变量,在这个域名下存放在浏览器中的cookie,任何作为查询字符串而附于URL后面的字符串或页面的<FORM>段中的HTML控件的值。也提供使用Secure Socket Layer(SSL)或其他加密通信协议的授权访问,及有助于对连接进行管理的属性。 Response对象:用来访问服务器端所创建的并发回到客户端的响应信息。为脚本提供HTTP变量,指明服务器和服务器的功能和关于发回浏览器的内容的信息,以及任何将为这个域而存放在浏览器里新的cookie。它也提供了一系列的方法用来创建输出,例如无处不在的Response.Write方法。 cookie: Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。 当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。 讲的通俗一点就是: Request(中文“请求”的意思)类:可以理解为客户端向服务器端请求的信息,就是客户端向服务器端请求时,把自己的浏览器信息、HTTP变量和保存在客户端的Cookie告诉服务器

redirect与forward跳转的区别

左心房为你撑大大i 提交于 2019-12-06 19:05:05
Servlet 跳转 redirect 与 forward 跳转的区别 Servlet: 当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。 一、原理 1) redirect 方式 response.sendRedirect("/a.jsp"); 页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如: response.sendRedirect("http://www.ycul.com"); 跳转后浏览器地址栏变化。 这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。 这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException

request对象getAttribute和getParameter区别

╄→гoц情女王★ 提交于 2019-12-06 19:04:30
java ee 中request对象getAttribute和getParameter区别   1.getAttribute是取得jsp中 用setAttribute設定的attribute 2.parameter得到的是string;attribute得到的是object 3.request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。   JSP中getParameter与getAttribute有何区别? ——说实话,这个问题当初我也困惑很久,我也知道怎么用,可是到底有什么区别,我也不是很清楚,后来找了很多资料才明白。昨天又有一位朋友问我这个问题,想我当初同样也困惑过,于是我就把这个问题贴出来,让同样困惑的朋友解惑。 ——getParameter得到的都是String类型的。或者是 id=123中的123,或者是某个表单提交过去的数据。 ——getAttribute则可以是对象。 ——getParameter

Unix系列shell程序编写从入门到精通(上)

心不动则不痛 提交于 2019-12-06 18:31:03
*Shell 是什么 ? 任何发明都具有供用户使用的界面。 UNIX 供用户使用的界面就是 Shell(DOS 的 command 熟悉吧,但 UNIX 的要强大的多 ) 。 Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境。 为了不同的需要, UNIX 提供了不同的 Shell 。现在的 UNIX 大部分都支持 BourneShell ,以下教程就以 BourneShell(Bsh) 为例,一步步的领略 UNIX Shell 的强大功能,占先其强大魅力,达到更方便灵活的管理、应用 UNIX 的目的。 1.UNIX 内核和 Shell 的交互方法 启动 UNIX 时,程序 UNIX( 内核 ) 将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程中,程序 init 将进入后台运行一直到机器关闭。该程序查询文件 /etc/inittab ,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时, init 程序调用 getty 程序在终端上显示 login 等登陆信息。 (username 和 passwd) ,在输入密码后, getty 调用 login 进程,该进程根据文件 /etc/passwd 的内容来验证用户的身份。若用户通过身份验证, login 进程 把用户的 home 目录设置成当前目录并把控制交给一系列 setup 程序。

重定向和请求转发的区别

≯℡__Kan透↙ 提交于 2019-12-06 18:16:24
重定向:   response.sendRedirect();       客户端向服务端发送请求,客户端告诉服务端,你去找另一个servlet,遂,找到,解决   中间过程是两次请求,两次响应    请求转发:通俗讲就是客户端向服务端发送请求,   request.getRequestDispatcher().forward();   客户端向服务端发送请求,服务端找到另一个servlet,遂,解决   中间是一次请求,一次响应 请求转发地址栏不会改变,重定向会改变 第一次请求的数据请求转发不会改变,重定向会改变 请求转发的转发次数是一次,重定向转发次数是两次 重定向访问任意,请求转发只能在同一个服务器下 重定向速度慢,请求转发速度快          来源: https://www.cnblogs.com/xiexiaofei/p/11996896.html