嗷,卖葛! 这次完了~ 关错服务器了,,,
:( 经常会犯这样的错误,因为桌面上开着N多个Putty远程连接,它们都长成一个样子,一不小心就会弄错! 有什么好办法能让我更好地区分它们呢?
下面给出好的解决方案
(以下场景执行Putty工具,使用root用户远程登录,SSH主机是 Ubuntu Server
)
● 使用不带任何参数的 cd 命令,进入到 ~ 目录下面
● 由于 Ubuntu Server 13 的 ~/ 下没有.bash_profile , 我们先用 touch .bash_profile 创建一个全新的
● 用 vi 编辑之,输入以下内容
---------------------------------------
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startupprograms
# PATH=$PATH:$HOME/bin
# export PATH
# add following statement to the END offile ~/.bash_profile
# auto add env parameter $PROMPT_COMMANDwhen use non-Linux tty login by ssh.
if [ "$SSH_CONNECTION" != '' ]; then
export HOSTIP=`echo $SSH_CONNECTION |awk '{print $3}' |awk -F: '{if ($1== "") print $4; else print $1}'`
export PROMPT_COMMAND='echo -ne"\033]0;${USER}@'$HOSTIP':[${HOSTNAME%%.*}]:${PWD/#$HOME/~} \007"'
env |grep PROMPT_COMMAND
# Set the DISPLAY env var for Xmanagerforward
# export DISPLAY=`echo $SSH_CONNECTION |awk '{print $1}' |awk -F: '{if($1 == "") print $4; else print $1}'`:0.0
fi
---------------------------------------
● 上面的脚本第一二句会执行一些环境参数设置的脚本 ~/.bashrc,经研究,由于 Ubuntu 下的默认设置脚本某些参数会与我们想要的效果冲突,所以要编辑并屏蔽掉部分内容。
用 vi 编辑 ~/.bashrc 将下面的两段代码给注释屏蔽掉(将第一行最前加注释符号 # )
---------------------------------------
第一段:
# set a fancy prompt (non-color, unless weknow we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
---- 注释后 -------
# case "$TERM" in
# xterm-color) color_prompt=yes;;
# esac
第二段:
# If this is an xterm set the title touser@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
---------------------------------------
下面给出配置完毕后登录时自动显示相关信息的效果图
enjoy !! :)
作者:gaopenghigh ,转载请注明出处。 (原文地址)
信号的使用 信号的概念信号是通知进程发生了某件事的技术。每个信号都有一个名字,这些名字都以”SIG”开头。 需要注意的是,SIGUSR1和SIGUSR2这两个信号是给用户自定义的,可用于应用程序。
对于信号,内核有三种处理方式:
- 忽略。但有两种信号不能被忽略:SIGKILL和SIGSTOP,因为它们为超级用户提供了使进 程终止或停止的可靠方法。 * 捕捉信号。前提是要提前通知内核在某个信号发生时调用用户的某个函数。 * 执行系统默认动作。对大部分信号的默认动作是终止进程。
signal函数是关于信号最基本的函数。
#include <signal.h> void (*signal(int signo, void (*func)(int)))(int);
这个函数非常不直观,用正常一点的语言来说就是:
- signal函数的返回指是一个函数地址,该函数没有返回值(void),并且需要一个int型 的参数。
- signal函数需要两个参数,第一个参数是signo,整型,代表信号名;第二个参数是func ,这是一个函数地址,该函数没有返回值(void),且需要一个int型的参数。
- 总的来说signal函数就是注册一个信号signo,当这个信号发生时,调用func函数去处理 ,同时signal函数返回注册之前该信号的处理程序的指针。
参数func可以是SIG_DFL,代表使用默认处理动作,还可以是SIG_IGN,代表忽略,当 然更可以是其他具体的处理函数,这个函数就叫做信号处理程序(signal handler) 或者信号捕捉程序(signal-catching function),此时处理动作就叫做捕捉。
从signal的定义来看,不改变进程对信号的处理方式,就不能知道进程原本对信号的处理 方式,稍后介绍的sigaction函数能解决这个问题。
信号相关的术语信号产生(generation)后,内核会递送(delivery)这个信号给进程,在产生和递送的 这个时间间隔内,称信号是“未决的(pending)”。
进程可以选择对一些信号“阻塞”,当为进程产生了一个信号,且进程对该信号设置了阻塞 ,且进程对该信号的处理方式是默认或者捕捉,那么该进程就将该信号保持为未决 (pending)状态,直到阻塞被解除,或者进程对该信号的动作改为忽略。
如果进程对一个信号接触阻塞之前,该信号发生了多次,那么解除阻塞后,内核也只递送 这个信号一次。
每个进程都有一个“信号屏蔽字(signal mask),它规定了进程当前要阻塞的信号集。
kill和raise函数kill发送信号给进程或进程组。 raise允许进程发送一个信号给自己。
#include <signal.h> int kill(pid_t pid, int signo); int raise(int signo); /* 成功时返回0,出错返回-1 */ /* raise(signo) 等价于 kill(get_pid(), signo) */ /* * 参数pid的4种不同情况: * pid > 0 发送给pid进程 * pid == 0 发送给同一进程组的所有进程 * pid < 0 发送给进程组ID等于pid绝对值的所有进程 * pid == -1 发送给有权限发送的所有进程 */alarm和pause函数
alarm函数用来设置一个定时器,定时器超时后会产生一个SIGALRM信号,对该信号的默认 处理方式是终结进程。
#include <signal.h> unsigned int alarm(unsigned int secondes); /* 返回值:0或者以前设置的闹钟时间的余留秒树 */
如果在调用alarm时,以前也设置过一个闹钟且该闹钟还没有超时,那么该闹钟的余留时间 将作为这次alarm调用的返回值,以前登记的闹钟也会被新的闹钟所代替。
pause函数使调用进程挂起,直到接收到一个信号。
#include <unistd.h> int pause(void); /* 返回-1,并将errno设置为EINTR */信号集
数据类型sigset_t表示一个信集,有下面几个处理信号集的函数:
#include<signal.h> int sigemptyset(sigset_t *set); /* 清空信号集 */ int sigfillset(sigset_t *set); /* 填满信号集,使其包含每一个可能的信号 */ int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo); int sigismember(const sigset_t *set, int signo);sigprocmask和sigpending函数
进程有一个信号屏蔽字,它规定了当前阻塞哪些进程。调用sigprocmask函数可以检查和 更改进程的信号屏蔽字:
#include <signal.h> int sigprocmask(i
一种权限管理系统
目录
1需求描述... 1
1.1 有一系列可扩展的权限... 1
1.2 针对权限有不同身份的管理员,拥有不同权限... 1
2 功能设定... 1
2.1 有一系列可扩展的权限配置文件,包括了权限定义名,和权限数字... 1
2.2 针对权限有不同权限的管理员身份定义,拥有不同权限... 2
2.3 每个人 拥有不同的身份从而拥有不同权限... 2
1需求描述 1.1 有一系列可扩展的权限
1.2 针对权限有不同身份的管理员,拥有不同权限 2 功能设定 2.1 有一可扩展的权限配置文件,包括了权限定义名,和权限含义(基础权限数组)
形如
Array(
“p_user_edit” => “用户编辑”,
“p_data1_edit” => “数据1编辑”,
“p_data2_edit” => “数据2编辑”,
);
2.2 针对权限有不同权限的管理员身份定义,拥有不同权限例如
系统管理员
Array(
“p_user_edit” => 1,
“p_data1_edit” => 1,
“p_data2_edit” => 1,
);
其中,可以是 0:无编辑权限 1:有编辑权限
2.3 每个人 拥有不同的身份从而拥有不同权限
User表,定义用户的基础信息
User_privilege定义 用户id和身份id的关联
3数据库结构 3.1 user表
id
name
3.2 privilege表
id
name
auth
description
3.3 user_privilege 表
id
user_id
privilege_id
3 功能实现 3.1 添加权限身份
1)将基础权限展开成可选框
2)填写权限身份名
3)填写权限身份描述
4)将选择的基础权限名对应的值提交
5)将得到的权限数组json编码后入库
3.2 添加用户及身份
1)填写用户名
2)填写用户邮件
3)选择身份id
4)提交数据
5)生成用户id,关联到身份id