首页 文章 精选 留言 我的

精选列表

搜索[linux],共10000篇文章
优秀的个人博客,低调大师

《高性能Linux服务器构建实战》——2.1节初识Varnish

2.1 初识Varnish 2.1.1 Varnish概述Varnish是一款高性能且开源的反向代理服务器和HTTP 加速器,它的开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一。Varnish采用全新的软件体系机构,和现在的硬件体系配合紧密。在1975年时,储存媒介只有两种:内存与硬盘。而现在计算机系统的内存除了主存外,还包括CPU内的L1、L2,有的还包括L3快取,硬盘上也有自己的快取装置,因此Squid Cache自行处理数据替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部分工作应该交给操作系统处理,这就是 Varnish Cache设计架构。挪威最大的在线报纸 Verdens Gang(vg.no)使用3台Varnish代替了原来的12台Squid,性能比以前更好,这是

优秀的个人博客,低调大师

Linux存储入门:简易数据恢复方案--分区和LVM实战

数据恢复有没有简易方案? IT工程师一般都知道如何操作和使用文件和目录。但是,对于系统如何构建出、抽象出文件和目录,一般就不熟悉了。至于更下层的概念,可能大家知道最多的就是驱动了。所以,为了规避这点,可行的简易方案之一,就是以黑箱方式使用testdisk等工具,在我们在对底层了解不多甚至一无所知的情况下,进行数据恢复(商业工具,恢复效果估计更好,当然商业工具的价格也更好)。但是,对于工程师而言,多数时候,仅仅以黑箱方式依赖某些工具进行数据恢复是不够的。 数据恢复,经常是突发事故响应中关键而又耗时的一步。多数情况下,工程师往往并非专司数据恢复,操作环境往往是生产环境,趁手工具难以部署,执行操作要遵循种种约束,加之业务中断的压力。这种情形下,工程师很可能还需要推定数据恢复的结果/耗时等信息,提供数据供决策者使用。很明显,如果你准备考验一下

优秀的个人博客,低调大师

Linux上实现ssh免密码登陆远程服务器

0.说明 平常使用ssh登陆远程服务器时,都需要使用输入密码,希望可以实现通过密钥登陆而免除输入密码,从而可以为以后实现批量自动部署主机做好准备。 环境如下: IP地址 操作系统 服务器端 10.0.0.128/24 CentOS 6.5 x86 客户端 10.0.0.129/24 Ubuntu 16.04 x86 1.客户端生成密钥对 生成密钥对: xpleaf@leaf:~$ssh-keygen-trsa-b2048 Generatingpublic/privatersakeypair. Enterfileinwhichtosavethekey(/home/xpleaf/.ssh/id_rsa): Createddirectory'/home/xpleaf/.ssh'. Enterpassphrase(emptyfornopassphrase): Entersamepassphraseagain: Youridentificationhasbeensavedin/home/xpleaf/.ssh/id_rsa. Yourpublickeyhasbeensavedin/home/xpleaf/.ssh/id_rsa.pub. Thekeyfingerprintis: SHA256:eLssyXJLzUCfSN5mu6nqNH9dB/gOyXSvWBwQdNssIYExpleaf@leaf Thekey'srandomartp_w_picpathis: +---[RSA2048]----+ |o=oo| |E.o=| |oooo| |+=.o+.| |=So=+| |Bo+=o| |o...=.*o| |..+=..+oo| |.o++==| +----[SHA256]-----+ 查看生成的密钥对: xpleaf@leaf:~$ls.ssh id_rsaid_rsa.pub #id_rsa为私钥,这个一般需要保密;id_rsa.pub为公钥,这个可以公开。 2.上传公钥到服务器端 使用scp命令操作: xpleaf@leaf:~$scp.ssh/id_rsa.pubroot@10.0.0.128:/root Theauthenticityofhost'10.0.0.128(10.0.0.128)'can'tbeestablished. RSAkeyfingerprintisSHA256:0Tpm11wruaQXyvOfEB1maIkEwxmjT2AklWb198Vrln0. Areyousureyouwanttocontinueconnecting(yes/no)?yes Warning:Permanentlyadded'10.0.0.128'(RSA)tothelistofknownhosts. root@10.0.0.128'spassword: id_rsa.pub100%3930.4KB/s00:00 3.服务器端操作 把从客户端传来的公钥添加到.ssh/authorized_keys中: [root@leaf~]#catid_rsa.pub>>.ssh/authorized_keys [root@leaf~]#chmod600.ssh/authorized_keys #authorized_keys的权限需要为600 修改ssh配置文件/etc/ssh/sshd_config,找到下面一行: PubkeyAuthenticationno 修改为: PubkeyAuthenticationyes 4.测试 在客户端上使用密钥登陆到服务器上: xpleaf@leaf:~$ssh-i.ssh/id_rsaroot@10.0.0.128 Lastlogin:TueMay915:14:012017from10.0.0.129 [root@leaf~]# 5.注意事项 在服务器端需要把selinux关闭,否则最后无法使用密钥进行远程登陆; 客户端使用scp命令时,在服务器端也需要安装ssh客户端,否则无法把公钥上传到服务器端,另外也可以使用ssh-copy-id root@10.0.0.128来代替scp操作(这样在服务器端也不需要执行创建.ssh目录等这些操作,即相当于该命令可以一步帮我们完成密钥的上传与配置工作);

优秀的个人博客,低调大师

Linux命令:MySQL系列之八--MySQL事务相关内容

MySQL,ODBC 数据库事务 多事务同时执行:彼此之间互不影响的方式进行并行;事务之间交互,通过数据集。 START TRANSACTION; 启动事务命令 数据库只有启动了事务才允许回滚撤销等操作。 且数据的engine引擎必须是innodb,才支持事务 ROLLBACK回滚事务,mysql只要没有提交开启了事务都可以进行回滚操作。 COMMIT:事务提交,事务提交后无法进行回滚操作。 如果没有明确启动事务: autocommit能实现自动提交,每一个操作都直接提交; 所以建议:明确使用事务,否则所有操作都被当成一个事务来处理,并关闭自动提交。 否则会浪费mysql很多IO操作,每写一条语句都执行提交至持久性存储,很浪费资源 事务的特性: Atomicity:原子性,事务所引起的数据库操作,要不都完成,要么都不执行; Consistency: 一致性, Isolation:隔离性 事务调度:事务之间影响最小 MVCC:多版本并发控制 Durability:持久性 ,一旦事务成功完成,系统必须保证任何故障都不会引起事务表示出不一致性; 1、事务提交之前就已经写出数据至持久性存储; 2、结合事务日志完成; 事务日志:顺序IO 数据文件:随机IO 事务的状态: 活动的:active 部分提交的:最后一条语句执行后 失败的: 终止的: 提交的: 及状态间的转换过程: 事务并发执行的优势:1、提高吞吐量和资源利用率 2、减少等待时间 事务调度:1、可恢复调度 2、无极联调度 实例: mysql> SELECT @@AUTOCOMMIT; #查询自动提交的状态1为开启,0为关闭; +--------------+ | @@AUTOCOMMIT | +--------------+ | 1 | +--------------+ 1 row in set (0.00 sec) mysql> SET AUTOCOMMIT=0; #设定自动提交关闭 Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@AUTOCOMMIT; #查询自动提交的状态1为开启,0为关闭; +--------------+ | @@AUTOCOMMIT | +--------------+ | 0 | +--------------+ 1 row in set (0.00 sec) mysql> DELETE FROM student WHERE Name LIKE 'Li%'; #删除Name字段包含Li的行 Query OK, 1 row affected (0.03 sec) mysql> SELECT * FROM student; #Li哪行已经被删除 +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 2 | Cheng Long | 0 | 2 | | 3 | Yang Guo | 0 | 3 | | 4 | Guo Jing | 0 | 4 | +-----+------------+-----+-----+ 3 rows in set (0.00 sec) mysql> ROLLBACK; #回滚事务,自动提交关闭后,默认就开启了事务,可以实现回滚等操作 Query OK, 0 rows affected (0.01 sec) mysql> SELECT * FROM student; #删除的哪行恢复了 +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 1 | Li Lianjie | 0 | 1 | | 2 | Cheng Long | 0 | 2 | | 3 | Yang Guo | 0 | 3 | | 4 | Guo Jing | 0 | 4 | +-----+------------+-----+-----+ 4 rows in set (0.00 sec) 保存点:恢复到所定义的那个保存点SAVEPOINT,保存点名称不能以数字开头。 保存点:SAVEPOINT savepoint_name; 保存以上操作为该保存点名称 回滚保存点:ROLLBACK TO savepoint_name; 回滚到该保存点之前的状态 Usage: mysql> START TRANSACTION; #启动事务 Query OK, 0 rows affected (0.00 sec) mysql> select * FROM student; +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 1 | Li Lianjie | 0 | 1 | | 2 | Cheng Long | 0 | 2 | | 3 | Yang Guo | 26 | 3 | | 4 | Guo Jing | 53 | 4 | +-----+------------+-----+-----+ 4 rows in set (0.00 sec) mysql>SAVEPOINT a; #该保存点student表数据都存在 Query OK, 0 rows affected (0.00 sec) mysql> select * FROM student; +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 1 | Li Lianjie | 0 | 1 | | 2 | Cheng Long | 0 | 2 | | 3 | Yang Guo | 26 | 3 | | 4 | Guo Jing | 53 | 4 | +-----+------------+-----+-----+ 4 rows in set (0.00 sec) mysql> DELETE FROM student WHERE SID=4; #删除student表的SID为4的行 Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM student; +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 1 | Li Lianjie | 0 | 1 | | 2 | Cheng Long | 0 | 2 | | 3 | Yang Guo | 26 | 3 | +-----+------------+-----+-----+ 3 rows in set (0.00 sec) mysql> SAVEPOINT b; #该保存点student表数据的SID为4的行不存在了 Query OK, 0 rows affected (0.00 sec) mysql> DELETE FROM student WHERE SID=3; Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM student; +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 1 | Li Lianjie | 0 | 1 | | 2 | Cheng Long | 0 | 2 | +-----+------------+-----+-----+ 2 rows in set (0.00 sec) mysql> SAVEPOINT c; #该保存点student表的SID为3和4的行都不存在 Query OK, 0 rows affected (0.00 sec) mysql> ROLLBACK TO b; #回滚至保存点b,即student表,SID为4的行不存在的行 Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM student; +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 1 | Li Lianjie | 0 | 1 | | 2 | Cheng Long | 0 | 2 | | 3 | Yang Guo | 26 | 3 | +-----+------------+-----+-----+ 3 rows in set (0.00 sec) mysql> ROLLBACK TO a;#即所有数据都存在的那个点 Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM student; +-----+------------+-----+-----+ | SID | Name | Age | CID | +-----+------------+-----+-----+ | 1 | Li Lianjie | 0 | 1 | | 2 | Cheng Long | 0 | 2 | | 3 | Yang Guo | 26 | 3 | | 4 | Guo Jing | 53 | 4 | +-----+------------+-----+-----+ 4 rows in set (0.00 sec)

优秀的个人博客,低调大师

linux中生成考核用的NTFS文件系统(历史版本)

注2017年6月25日修改:这个版本想得复杂了,还是改为python脚本容易实现的方式。见相关blog(ntfs案例一) 目的: 生成一个NTFS文件系统,要求: 1、$MFT至少2个碎片 2、根目录下建90个以从1开始的数字编号为名的子目录,每个子目录下建80-100个文件,文件编号从1开始编起。 3、有大量文件是由2个或以上碎片组成。(本例多为2个碎片) 1、shell 脚本如下: !/bin/sh #Script.sh # # #Createdby张宇on2017/3/29.此脚本已包含后面的命令 # mkdir~/$1 cd~/$1 qemu-imgcreate-fraw$1.img1G qemu-nbd-fraw-c/dev/nbd0$1.img parted-s/dev/nbd0mklabelmsdos parted-s/dev/nbd0mkpart-sprimaryNTFS128s100% mkfs.ntfs-f/dev/nbd0p1 mount.ntfs-3g/dev/nbd0p1/mnt #第一段for,先创建30个子目录,每个目录下80-100个文件,大小为16K-48K,这一段基本连续 for((i=1;i<=3;i++));do mkdir/mnt/$i r1=$(($RANDOM%20)) for((ii=1;ii<80+$r1;ii++));do r2=$(($RANDOM%64+32)) ddif=/dev/urandomof=/mnt/$i/$iibs=512count=$r2 done done #sleep60便于让文件系统flush #sleep60 mkdir/mnt/padding cd/mnt/padding #填充65000个文件,这样可以使NTFS$MFT填充到第一个使用的数据区段,从而产生$MFT碎片。 for((i=1;i<65000;i++));do touch$i done #创建出其他4-90子目录,这些文件会位于$MFT的第二个片断或以后 for((i=4;i<=90;i++));do mkdir/mnt/$i r1=$(($RANDOM%20)) for((ii=1;ii<80+$r1;ii++));do r2=$(($RANDOM%64+32)) ddif=/dev/urandomof=/mnt/$i/$iibs=512count=$r2 done done #sleep60 #第二段for,使用dd把第一段for创建出的文件,从0-16K的位置,写入48K-80K,基本保证>约2个碎片,子目录3下的文件是第一段$MFT下的文件,3之后的为$MFT第二个片断。 for((i=3;i<=90;i++));do cd/mnt/$i foriiin`ls`;do r2=$(($RANDOM%64+96)) r3=$(($RANDOM%32)) ddif=/dev/urandomof=/mnt/$i/$iibs=512seek=$r3count=$r2 done done #删除padding,以免目录结构太臃肿 rm-rf/mnt/padding cd/mnt find.-typef-print|xargsmd5sum-b|tra-zA-Z1>~/$1/md5.list foriin`find.-typef`;dontfscluster-f-F$i/dev/nbd0p1;done1>~/$1/file.info2>/dev/null 2、在shell中执行如下命令: qemu-imgcreate-frawtest2.img1G qemu-nbd-fraw-c/dev/nbd0test2.img fdisk/dev/nbd0#此命令交互,目的为/dev/nbd0分个区,不想交互,可使用parted加参数 mkfs.ntfs-f/dev/nbd0p1 mount.ntfs-3g/dev/nbd0p1/mnt /bin/bashrun.sh 3、测试结果是否满意: 命令一:ntfscluster-f-I0/dev/nbd0p1 结果与预想相符,$mft果然为2个片断: Forced to continue. Dump: /$MFT 0x10 - resident 0x30 - resident 0x80 - non-resident VCN LCN Length 0 4 16387 16387 20488 1880 0xb0 - non-resident VCN LCN Length 0 2 2 2 16391 1 命令二:ntfscluster-f-F1//dev/nbd0p1 结果与预想相符,抽样目录,也为2个片断 Forced to continue. Unnormalized path 1/ Dump: /1 0x10 - resident 0x30 - resident 0x50 - resident 0x90 - resident 0xa0 - non-resident VCN LCN Length 0 53328 2 2 49238 1 0xb0 - resident 命令三: ntfscluster-f-F60/9/dev/nbd0p1 结果与预想相符,抽样文件,也为2个片断 Forced to continue. Dump: /60/9 0x10 - resident 0x30 - resident 0x50 - resident 0x80 - non-resident VCN LCN Length 0 211991 8 8 115298 7 4、生成所有文件的md5 哈希,便于生成考核答案 cd/mnt find.-typef-print|xargsmd5sum-b|tra-zA-Z 5、生成所有文件的碎片信息,便于生成考核答案 cd/mnt foriin`find.-typef`;dontfscluster-f-F$i/dev/nbd0p1;done2>/dev/null 6、生成目录的碎片信息,便于生成考核答案 cd/mnt foriin`find.-typed`;dontfscluster-f-F$i/dev/nbd0p1;done2>/dev/null 7、生成元文件的文件记录信息,便于生成考核答案 for((i=0;i<16;i++));dontfscluster-f-I$i/dev/nbd0p1;done2>/dev/null 或者通过命令:ntfscluster -i -f /dev/nbd0p1, 查看如下值:initialized mft records : 73115 再执行,下面命令即可将所有文件的碎片信息打印出来,再做加工,即可生成考核答案 for((i=0;i<73115;i++));dontfscluster-f-I$i/dev/nbd0p1;done2>/dev/null ntfs-3g源码改动: 1、ntfscluster.c 400行while改为如下,目的是便于输出结果用grep,sed或awk加工 while((rec=find_attribute(AT_UNUSED,ctx))){ ntfs_log_info("0x%02x-",(int)le32_to_cpu(rec->type)); if(rec->non_resident){ ntfs_log_info("non-resident\n"); runs=ntfs_mapping_pairs_decompress(vol,rec,NULL); if(runs){ ntfs_log_info("INODEATTRRUN#VCNLCNLength\n"); for(i=0;runs[i].length>0;i++){ ntfs_log_info("%8lld0x%02x%8lld%8lld%8lld%8lld\n", (longlong)(ino->mft_no&0x0000FFFFFFFFFFFFUL), (int)le32_to_cpu(rec->type), (longlong)i, (longlong)runs[i].vcn, (longlong)runs[i].lcn, (longlong) runs[i].length); } ntfs_log_info("[INFO]:0x%02xRuns:%d,Inode:%lld,path:%s\n", (int)le32_to_cpu(rec->type), i, (longlong)(ino->mft_no&0x0000FFFFFFFFFFFFUL), buffer); free(runs); } }else{ ntfs_log_info("resident\n"); } } 结果将如下: Dump: /50/3 0x10 - resident 0x30 - resident 0x50 - resident 0x80 - non-resident INODE ATTR RUN# VCN LCN Length 69425 0x80 0 0 194588 9 69425 0x80 1 9 217183 8 [INFO]:0x80Runs:2,Inode:69425,path:/50/3 考题及答案生成部分: 1、$MFT:$DATA 2、$MFT:$BITMAP 3、在$MFT第一个片断中的,拥有$DATA:RUNLIST唯一一条记录的文件,回答其MD5 4、在$MFT第二个片断中的,拥有$DATA:RUNLIST两条记录的文件,回答其MD5 5、读取某个拥有至少2个A0属性的目录块的MD5 6、给定一个起始簇号,解释一个RUNLIST的前3条记录(样本中至少有3条记录) 7、恢复一个删除的文件 (可生成答案后,删除某个目录,再恢复其下面的某个文件即可)

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册