kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

irssi

首先连接服务器,用/connect server-name

  1. /nick
    选择一个没有重名的用户。(重名会有提示)

  2. /msg nickserv register
    通过email认证后:

  3. /msg nickserv identify

使用log:
1.使用pgUP,pgDn键可以实现记录的翻页。
2./goto 12:00, /goto end
3./lastlog nickname 查看nickname所说的话!
4./away暂时离开,/away查看离开时段的聊天记录。

-------------

【日常操作】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(1) /nick <昵称> ,修改昵称
(2) /join #<频道> ,加入一个频道
(3) /wc,离开当前频道
(4) /part <频道> <消息>,退出频道,不加频道名退出当前频道,后面可以跟退出原因。
(5) /disconnect <服务器>,断开一个服务器
(6) /quit 或者 /exit,退出 irssi,结束IRC会话。
(7) /msg <昵称> <消息>,向某人发私消息(新开窗口)
(8) /query <昵称> <消息>,向某人发私消息(新开窗口且转换到这个窗口)
(9) /say <昵称> <消息>,向某人说话(不新开窗口)
(10) /notice <昵称> <消息>,向指定人发出注意消息
(11) /me <动作>,在当前聊天室窗口中做出动作。 如做出晕倒动作:/me 晕倒
(12) /away <原因>,留下信息说明暂时离开,别人向你发出私聊时将会返回此消息,再重新输入 /away(不指定参数)则解除离开状态。
(13) /ignore <昵称>,忽略某人的聊天内容
(14) /set autolog on,自动保存聊天记录

【窗口操作】

1
2
3
4
5
6
7
(1) Alt+1~0,对应1~10的频道编号
(2) Alt+q~p,对应11~20的频道编号
(3) Ctrl+n/p,切换上/下一个频道
(4) PageUP/PageDn,切换上/下页讯息
(5) /window close,关闭当前窗口
(6) /window close <数字>,关闭指定编号的窗口
(7) /window list,窗口列表

【查询信息】

1
2
3
4
5
6
7
8
9
10
(1) /list,频道列表
(2) /names [#聊天室],列出当前服务器或指定聊天室下的所有人员名称(无法列出隐藏人员)
(3) /who,查看频道的所有人
(4) /whois [昵称],查看某人的基本资料
(5) /ison <别名1> <别名2> ...查询指定别名是否在线
(6) /info,查询服务器信息
(7) /admin,查询当前服务器上的Admin
(8) /lusers,查询当前服务器上的统计信息
(9) /motd,查询当前服务器今日的统计信息
(10) /links,查询当前的服务器,解析当前的有几个服务器。

【提示信息】

[Act: 1,3,6,9,10]:这些数字提示各个频道上对话情况:[灰白色] 表示有人登录或登出,[白色] 代表有人在此channel上说话,[灰红色] 代表对话中提起你的名字或呼叫你。

【转换编码】

/recode add #<频道> <编码>,加入此频道编码格式
/recode,查看加入的编码列表

screen

vim .screenrc

1
2
3
4
5
6
7
8
9
deflogin off
startup_message off
defscrollback 100000

caption always "%H %c | %3n %t%? @%u%?%? [%h]%?%=%c"
hardstatus alwayslastline '%{bW}%-w%{.wB}%n %t%{-}%+w %=%{.w}'

screen -t bash
screen -t bash

vim .bashrc

1
2
export LANG=en_US.UTF-8  # 有些终端会初始化出 LANG=c
export TERM=linux # screen 的bash默认 TERM=screen,标签的标题就会随 /etc/bashrc 里的变化

断开控制台而不结束会话-Screen

设想一下,你通过 ssh 连接到了一台服务器,接着你开始编译一个软件。这或许要占用你一个小时甚至更多的时间,突然!你需要离开,或者是断开网络了~
怎么办?下次再重新编译一次么?还有例外一种办法~(当然,我指的不是一开始放在后台运行。)
Screen!

一、启动 Screen

下载配置文件screenrc,放到~/.screenrc,注意要加一个.号。然后启动 Screen 再简单不过了,在 Shell 中运行 screen ,按回车,就进入 Screen 输入环境了。

二、给 Screen 的指令

和VIM类似,当你想给 Screen 发送指令,而不是给 shell 输入指令的时候需要用到特定的组合键:Ctrl-A 。(这类似于 VIM 中的 ESC。)当你执行Ctrl-A 后就可以引起 Screen 的注意了。

三、我在 Screen 中么?

通过 screen -list 调用 screen 可以看到类似如下界面:
这标明你正处于 Screen 中。并且进程号是8941。

四、还有哪些命令?

通过 Ctrl-A and ? 的方式你可以看到如下列表:
ok!一切都明了了!

五、离开

这时我需要离开那台正在编译软件的主机了,通过 Ctrl+A and D。我们脱离了 screen。但是 screen 依然在后台运行着。

六、归来

当你回到这台主机,并想重新进入之前的 screen 时,以前看到的 进程号(PID)就要发挥作用了。
通过命令:
screen -r pid
就可以回到之前的Screen了。
如果你觉得记住 PID 是一件很麻烦的事情,也可以使用 -S 参数:
scree -S latteye
这样就可以打开一个名为 latteye 的会话,下次连接时使用:
screen -r latteye
即可。

七、特殊情况

有些时候我们离开 screen 并不是那么正常,不一定会按 Ctrl-a + D 来离开 Screen,比如网络突然断开的时候。
这个时候,若我们重新回到主机,则通过 -r 参数是无法连接 screen 的,我们还需要 -d 的帮助:
screen -d -r pid


命令其实超简单的:
直接在终端上输入 screen , 这个时候,服务器端会启一个新的终端,但这个终端,与之前的普通终端不一样,它不隶属于 sshd 进程组,这样,当本地终端关闭后,服务器终端不会被 kill。
当然,优点还不止这么些,在服务器终端里执行任务时,你甚至可以随时地切换到本地终端做些其他事情,然后,要回去时,再恢复到刚才已经打开的服务器终端里,如果刚才的任务没有结束,还可以继续执行任务。
操作步骤:
首先,进入 screen -S sessionname终端。(sessionname是为了区分你的session)
然后按 ctrl + a,再按 d键暂时退出终端。
当要返回时, 先查看刚才的终端进程ID, screen -list
或直接
screen -r xx(刚才的sessionname)就可以了
当然,当你开了很多个session后,打算关闭几个session,可以进入到session后,exit一下就可以了.

1
2
3
4
5
6
7
8
9
10
11
12
13
Ctrl + a + ?            显示所有键绑定信息
Ctrl + a + w            显示所有窗口列表
Ctrl + a + a            切换到之前显示的窗口
Ctrl + a + c            创建一个新的运行shell的窗口并切换到该窗口
Ctrl + a + n            切换到下一个窗口
Ctrl + a + p            切换到前一个窗口(与C-a n相对)
Ctrl + a + 0..9         切换到窗口0..9
Ctrl + a + " + 0..99    切换到窗口0..99,用于超过9个窗口的切换
Ctrl + a + a            发送 C-a到当前窗口
Ctrl + a + d            暂时断开screen会话
Ctrl + a + k            杀掉当前窗口
Ctrl + a + [ OR Esc     进入拷贝/回滚模式,Space 第一次按为标记copy区起点,第二次按为终点
Ctrl + a + ]            把刚刚在 copy mode 选定的内容贴上

jni 编程

jni 编译:

g++ -L /usr/lib/jvm/default-java/jre/lib/amd64/server -o judge judge.cpp -ljvm

jni 运行:

以root身份把库路径加入/etc/ld.so.conf或在/etc/ld.so.conf.d中创建特定的.conf文件,然后运行 ldconfig更新/etc/ld.so.cache。例如:在/etc/ld.so.conf.d下创建文件jvm.conf写入

1
2
/usr/lib/jvm/default-java/jre/lib/amd64
/usr/lib/jvm/default-java/jre/lib/amd64/server

jni

GetFieldID是得到java类中的参数ID,GetMethodID得到java类中方法的ID,它们只能调用类中声明为 public的参数或方法。使用如下:

1
2
jfieldID topicFieldId = env->GetFieldID(objectClass,"name", "Ljava/lang/String;");
jmethodID getcName=env->GetMethodID(objectClass,"getcatName","()Ljava/lang/String;");

第一参数是Java 类对象。第二个参数是参数(或方法名),第三个参数是该参数(或方法)的签名。第三个参数由以下方法得到。 有类

1
2
3
4
5
6
7
8
9
10
11
12
public class Cat {
	private int catNumber;
	String catName;
	public Cat(int i,String name){catNumber=i;catName=name;}
	public String getCatName () {
		return this.catName;
	}

	public void setCatName (String catName) {
		this.catName=catName;
	}
}

查看 Cat类进入到Cat所在目录 先用javac Cat.java进行编译 然后输入命令:

1
Javap –s Cat

得到Cat方法getcatName 的签名是()Ljava/lang/String,Cat类中的参数是private 所以它没有签名。

1
options[0].optionString = "-Djava.class.path=./tmp/1";