除了可以在配置文件外指定已发送邮箱存储的文件,如果不这样,你第一次使用mutt 的时候,会提示你自动创建sent邮箱。
当你再次键入neomutt
命令时,进入的是收件箱的UI.怎么才能找到发件箱呢?
方法;type c
then display Open mailbox('?' for list mailbox)
.So you can type sent
.If you want to return
to mailbox(received mail box),you can type the mailbox of dir,in my example it is /var/mail/me
the article.
The method: first you must be enable configure option duplicate_threads = yes
.you can type :set ?duplicate_threads
to ensure the results.
Then you can type o to resort all mails in certainly pattern.For exampled
,which will be sort mail as date
model.
As last you say T tag pattern,put in ~=
as the pattern.Duplicate mail are now tagged.The mail tagged will show start with a *
.To delete them,either type just d
or type ;
then hit d
.
You can add configure option in .muttrc
to delete duplicate mail automatically.
订阅了lkml,可是经常有很多的邮件看不了而删了。现在,强大的命令来了,请接招:
首先,使用命令
mutt
进入,接着按__c__, 选择邮箱,这里我是自己用的是IMAP,这个协议把你的mutt当作 了终端。你在邮箱服务器上有几个文件夹或者标签,在mutt上就会有几个信箱。假如 你没有使用mutt,那么可以忽略这一步。
接着,在当前的邮箱下,键入:shift D
shift d
它会提示
Delete messages matching:
汉语就是
删除符合此样式的信件:
接着使用:
~s .*
回车,所有的邮件被标记上了D,这就是你单封删除邮件的作用。或者,还可以使用
~A
也可以达到以上相同的效果
这个功能更是geek,首先新建一个.mailcap
的文件在主目录下:
更新: mutt只是一个管理邮箱的软件,并不会显示很复杂的邮件内容, 比如,网页类型的及非ascii编码类型的。如果想使用以上效果,那么就需要 其他软件配合了。
我首先使用的lynx文本网页浏览器,有一点我是开始没有理会 的,无法显示中文的邮件内容,lynx的配置在.mailcap的配置如下:
text/html; lynx -dump -width=78 -nolist %s | sed 's/^ //';
sopiousoutput; needsterminal;nametemplate=%s.html
这样mutt就会将mail中html格式的信息转化为PLAIN/TEXT格式,方便阅读。
mutt对于英语的支持那是相当不错,可是在浏览由中文邮箱发过来的邮件 时便会遇到可恶的乱码问题,如今,你可以使用w3m这个对中文支持好的。
将上面.mailcap文件的注释掉,使用下面的语句:
text/html; w3m -dump -ppc 9 -I %{charset} -T text/html %s|uniq; copiousoutput
这样子你就可以看见你亲切的汉字邮件了。
在.muttrc
内新建命令绑定
# 设置键绑定 ,为了使用urlview.
macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
前提是你要安装urlview
这个软件。
然后使用命令ctrl-b
就可以打开链接了
</del>
现在使用urlscan
命令,同样,在.muttrc
配置文件中写入man手册的语句。
现在,这几大发行版本已经把NeoMutt作为默认的版本了,但是使用源码安装的时候会遇上各种各样的包依赖,这时候,你要熟悉你的发行版的搜索软件的命令,以debian为例,那就是这样:
sudo apt-cache search xx
将源代码包下载下来后,使用如下的编译选项:
这个软件首先安装字符库或者图形界面的需要,推荐使用slang。当完成以后,使用./configure.autosetup –help,因为下面的命令已经不适用了。
./configure --with-slang=/usr/local/src/slang-2.2.4
--ssl --disable-doc --debug
接着使用
make
make install
简单记录LWP的应用。
$document = get(“URL”); 这个函数没有返回码。
这个函数就是将访问到的URL内容保存下来。 两个参数哈 在这里面有两个状态值is_success()和is_error()判断上面的正确与否;
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
my $url = 'http://www.baidu.com';
my $file = '/tmp/baidu.html';
my $status = getstore($url,$file);
die "Error $status on $url" unless is_success($status);
open(IN,"<$file") || die "Can't open $file: $!";
while(<IN>){
if (m/百度/){
print "hello,baidu,$url";
last;
}
}
close(IN);
这个函数抓取接着打印,后面的参数是URL;
perl -MLWP::Simple -e "getprint('http://cpan.org/RECENT') || die" | grep Apache
url很重要,这样子你就可以了解相关软件的perl模块的最新情况。
#!/usr/bin/perl -w
use strict;
use LWP;
my $url = 'http://www.baidu.com/';
my $browser = LWP::UserAgent->new();
my $response = $browser->get($url);
print $response->header("Server"), "\n";
这段代码很有用,它可以让你知道你所测的主机的服务器使用的什么服务器。 最关键的是面向对象的思想在里面
linux下c或者c++编程始终离不开动态动态库”*.so”,具体它是怎么产生的、如何使用, 现在就简单介绍一下。
这里用一个简单的例子,比如有三个.c文件so_a.c、so_b.c、so_c.c;一个头文件so_he ad.h,我们将他们连接编译成一个动态库: libso.so. 文件的内容分别如下:
so_head.h:
#include<stdio.h>
void print_a();
void print_b();
void print_c();
so_a.c:
#include "so_head.h"
void print_a()
{
printf("This is print_a\n");
}
so_b.c:
#include "so_head.h"
void print_b()
{
printf("This is print_b\n");
}
这里省略so_c.c的源文件。 将这几个文件编译成一个动态库:libso.so 下面是Makefile:
SRCS = $(wildcard *.c)
OBJS = libso.so
$(OBJS):
gcc $(SRCS) -fPIC -shared -o $(OBJS)
:-shared
这里的-shared是指定生成的动态链接库,(让链接器生成的T类型的导出符号表,有 时候也生成弱连接w类型的导出符)。不用该标志外部程序无法连接。(为什么呢)
:-fPIC
表示编译为位置独立的代码,不用此选项的编译后的代码是位置相关的,这样在动态载 入时通过代码拷贝的方式来满足不同进程的需要,而不能真正达到代码共享的目的
所谓的连接就是将你所编译成的动态库连接你的可执行文件。 上面,我们已经生成了libso.so,那么我们需要编写一个文件调用里面的函数。
/* so_test.c */
#include "so_test.h"
int main(){
print_a();
print_b();
}
将上面的Makefile改写成:
SRCS = so_a.c \
so_b.c \
so_c.c \
so_head.h
OBJS = libso.so
PROC = so_test.c
EXE = test
$(EXE): $(OBJS)
gcc $(PROC) -L. -lso -o $(EXE)
$(OBJS):
gcc $(SRCS) -fPIC -shared -o $(OBJS)
-L.:
表示要连接到库所在的当前目录。
-lso:
就是查找动态连接库时隐含的命名规则,即在给出的名字前面加上lib,后面加上库的 名称。上面的默认的就是libso.so 这个时候,你使用ldd命令查看一下可执行文件test,里面就包含着libso.so呢。
以上步骤完全正确,但有时程序无法执行,也就是找不到so动态库,这时你就要通过 修改LD_LIBRARY_PATH的值来确定了。
LD_LIBRARY_PATH=.
即可,当然,还有其他的修改方法
常见的有三种:
T类:是在库中定义的函数,用T表示; U类:在库中被调用,但并没用在库中定义(表名需要其他库的支持); W类: 所谓的“弱态”符号,虽然在库中被定义,但是可能被其他库中的同名符号覆盖;
所以,你想知道某个动态库中是否引用了printf(), 可以使用下面的命令:
nm libxx.so grep printf
将可执行文件内的内容读出来 比如: riscv 的readelf -h 如下:
readelf -h Hello (riscv bin)
ELF 头:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
类别: ELF64
数据: 2 补码,小端序 (little endian)
Version: 1 (current)
OS/ABI: UNIX - System V
ABI 版本: 0
类型: EXEC (可执行文件)
系统架构: RISC-V
版本: 0x1
入口点地址: 0x278be
程序头起点: 64 (bytes into file)
Start of section headers: 609704 (bytes into file)
标志: 0x5, RVC, double-float ABI
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
Number of section headers: 19
Section header string table index: 17
上面是riscv的elf头文件. x86_64的elf文件源代码: cat elf.c:
int main(){
printf("Hello Wrold\n");
}
下面是x86_64 的elf文件展出:
readelf -h elf
ELF 头:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
类别: ELF64
数据: 2 补码,小端序 (little endian)
版本: 1 (current)
OS/ABI: UNIX - System V
ABI 版本: 0
类型: DYN (共享目标文件)
系统架构: Advanced Micro Devices X86-64
版本: 0x1
入口点地址: 0x530
程序头起点: 64 (bytes into file)
Start of section headers: 8696 (bytes into file)
标志: 0x0
本头的大小: 64 (字节)
程序头大小: 56 (字节)
Number of program headers: 9
节头大小: 64 (字节)
节头数量: 34
字符串表索引节头: 33
ELF Magic tag表明这是一个elf文件,如果没有这16个字节,则就不是elf文件。
根据上一个工具readelf读出相应地址的内容 ?
反汇编代码
请先参考这篇文章 ELF(Executable and Linking Format)是一种对象文件格式,从名字上我们也能窥探出 他的作用来。这里主要三种类型的。
1 可重定位(relocalable)
2 可执行文件(Exectuable)
3 共享目标文件(shared object file)
gcc生成的object文件在linking和Execution的角度来看是不一样的。 先说在Linking的角度:
linking view _________________ | ELF Header | |----------------| |Program Header | | Table Optional | |----------------| | Section 1 | |----------------| | ... | |----------------| | Section n | |----------------| |Section Header | | Table | |----------------|
还是在这里分开吧
Executeable View |----------------| | ELF Header | |----------------| | Program Header | | Table | |----------------| | | | segment 1 | |----------------| | | | segment 2 | |----------------| | ... | |----------------| | section Header | | Table Optional | |________________|
其实上面的图示忽略了一点,即segment是由多个Section组成的。
在这两种的观点来看,都是包含着指令、数据、符号表、重定位等信息。 program header table 告诉系统如何创造一个进程镜像 .在链接阶段必须有一个 section header table.
as输出的目标文件至少有三个section,他们是text,data,bss段。你如果不写出.text 或者.data段,但是目标文件依然会有他们,只不过是空的。
update: as 汇编器连接的.S文件生成的是.o文件,这是一个重定位文件 然后才是ld的任务生成可执行文件,当生成了可执行文件, 以静态连接为例,作为ld的输入文件,可重定位文件x.o的包含了好几个sections:指令 、被初始化的全局变量、未初始化的变量。
./p
会激活装载器(loader),它的作用是将可执行文件中的数据和代码复制到内存中去。 然后开始执行程序
Address 0 ---->|--------------| | .text | |______________| | .data | |______________| | .bss | |______________|
#
DHC是我实习的公司,不是其他哈
一、从公司或项目现场到新的项目现场出差的格式要求:
张三,出差地点:长治;出发地:马鞍山分公司(或具体地点);出发日期:20140311 ; 到达日期:20140312;项目经理:翟文山
请每位同事到项目现场时按此格式,将邮件发给此项目现场的经理,再由经理转发给我 ,各位经理/组长将自己出差邮件直接转给我,谢谢
二,从项目现场返回公司要求:
张三,返回地点:长治;返回地:马鞍山分公司(或具体地点);出发日期:20140311 ;到达日期:20140312;项目经理:翟文山;20140315日再次返回项目现场(或201403 15日先回公司上班)
请每位同事离开项目现场时按此格式,将邮件发给此项目现场的经理,再由经理转发给 我,各位经理/组长将自己出差邮件直接转给我,谢谢
三,请假格式:
张三,请假时间XXXX年XX月XX日-XXXX年XX月XX日,共XX天,请假类型:(事假、病假 、年假、婚丧假),请假原因:XXXXXX
如:张三,工作属地是泰安,假设他的出差轨迹是:2014年2月1日出发到长沙参与湖南 省农信项目,2014年3月2日从长沙出发去马鞍山参与阳泉项目,4月4日从马鞍山回泰安 ,那么他的出差及返回写的申请依次如下:
张三,出差地点:长沙;出发地:东华软件泰安分公司;出发日期:20140201;到达日 期:20140202;项目经理:张继清
张三,出差地点:马鞍山;出发地:长沙;出发日期:20140302;到达日期:20140302 ;项目经理:权浩
张三,返回地点:马鞍山;返回地:泰安;出发日期:20140404;到达日期:20140405 ;项目经理:权浩,20140406日休假4天,2014年4月11日回泰安公司上班(或2014年4 月7日先回公司上班,4月8-4月12日休假,2014年4月15日再回公司上班;或者2014年4 月7日先回公司上班,4月8-4月12日休假,2014年4月15日回马鞍山项目现场);
http://fbdpmdx.dhcc.com.cn:9898/