js里匹配一串字母和数字的字符串 并且必须要包含字母的正则

/^(?!^[0-9]{4,20}$)^[A-Za-z0-9]{4,20}$/

发表在 前端技术 | 留下评论

JavaScript m选n组合算法

01转换法:

思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。

  • 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
  • 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合;
  • 同时将其左边的所有“1”全部移动到数组的最左端。
  • 当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。

例如求5选3的组合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5 

JavaScript实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
 * 获得指定数组的所有组合
 */
function arrayCombine(targetArr) {
    if(!targetArr || !targetArr.length) {
        return [];
    }
    var len = targetArr.length;
    var resultArrs = [];
    // 所有组合
    for(var n = 1; n < len; n++) {
        var flagArrs = getFlagArrs(len, n);
        while(flagArrs.length) {
            var flagArr = flagArrs.shift();
            var combArr = [];
            for(var i = 0; i < len; i++) {
                flagArr[i] && combArr.push(targetArr[i]);
            }
            resultArrs.push(combArr);
        }
    }
    
    return resultArrs;
}
/**
 * 获得从m中取n的所有组合
 */
function getFlagArrs(m, n) {
    if(!n || n < 1) {
        return [];
    }
    var resultArrs = [],
        flagArr = [],
        isEnd = false,
        i, j, leftCnt;
    for (i = 0; i < m; i++) {
        flagArr[i] = i < n ? 1 : 0;
    }
    resultArrs.push(flagArr.concat());
    while (!isEnd) {
        leftCnt = 0;
        for (i = 0; i < m - 1; i++) {
            if (flagArr[i] == 1 && flagArr[i+1] == 0) {
                for(j = 0; j < i; j++) {
                    flagArr[j] = j < leftCnt ? 1 : 0;
                }
                flagArr[i] = 0;
                flagArr[i+1] = 1;
                var aTmp = flagArr.concat();
                resultArrs.push(aTmp);
                if(aTmp.slice(-n).join("").indexOf('0') == -1) {
                    isEnd = true;
                }
                break;
            }
            flagArr[i] == 1 && leftCnt++;
        }
    }
    return resultArrs;
}
发表在 Linux | 留下评论

排列组合算法

1。最近一直在考虑从m个数里面取n个数的算法。最容易理解的就是递归,但是其效率,实在不能使用。一直找寻中,今日得果

2。算法来源与互联网

组合算法
本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标
代表的数被选中,为0则没选中。
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为
“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。
当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得
到了最后一个组合。
例如求5中选3的组合:
1   1   1   0   0   //1,2,3
1   1   0   1   0   //1,2,4
1   0   1   1   0   //1,3,4
0   1   1   1   0   //2,3,4
1   1   0   0   1   //1,2,5
1   0   1   0   1   //1,3,5
0   1   1   0   1   //2,3,5
1   0   0   1   1   //1,4,5
0   1   0   1   1   //2,4,5
0   0   1   1   1   //3,4,5

全排列算法

从1到N,输出全排列,共N!条。
分析:用N进制的方法吧。设一个N个单元的数组,对第一个单元做加一操作,满N进
一。每加一次一就判断一下各位数组单元有无重复,有则再转回去做加一操作,没
有则说明得到了一个排列方案。

//////////////////////////////////////////////////////

递归算法

全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为
例说明如何编写全排列的递归算法。

1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。
由于一个数的全排列就是其本身,从而得到以上结果。
2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。
即以3开头的和4,5的全排列的组合、以4开头的和3,5的全排列的组合和以5开头的和3,4的全排列的组合.
从而可以推断,设一组数p = {r1, r2, r3, … ,rn}, 全排列为perm(p),pn = p – {rn}。
因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), … , rnperm(pn)。当n = 1时perm(p} = r1。
为了更容易理解,将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。

算法如下:
#include <stdio.h>

int n = 0;

void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf(“%d “, list[i]);
printf(“/n”);
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
int list[] = {1, 2, 3, 4, 5};
perm(list, 0, 4);
printf(“total:%d/n”, n);
return 0;
}

谁有更高效的递归和非递归算法,请回贴。

///////////////////////////////////////

全排序

设R={r1,r2,…,rn}是要进行排列的n个元素,Ri = R-{ri}. 集合 X 中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列上加前缀ri得到的排列。R的全排列可归纳定义如下:

当 n = 1 时, Perm(R) = (r),其中r 是集合R中唯一的元素;

当 n >1 时, Perm(R)有 (r1)Perm(R1),(r2)Perm(R2),…….,(rn)Perm(Rn)构成

依此递归定义,可设计产生Perm(R)的递归算法如下:

template <class Type>

void Perm(Type list[], int k, int m){

if ( k == m ){

for ( int i = 0; i <= m; i++)

cout << list[i];

cout << endl;

}

else{

for ( int i = k; i <= m; i ++){

Swap( list[k],list[i] );

Perm( list,k + 1, m ) ;

Swap( list[k], list[i] );

}

}

}

template < class Type >

inline void Swap ( Type &a ,Type & b)

{

Type temp = a; a = b; b = temp;

}

////////////////////////////////////////

排列组合问题的通用算法

尽管排列组合是生活中经常遇到的问题,可在程序设计时,不深入思考或者经验不足都让人无从下手。由于排列组合问题总是先取组合再排列,并且单纯的排列问题相对简单,所以本文仅对组合问题的实现进行详细讨论。以在n个数中选取m(0<m<=n)个数为例,问题可分解为:
1. 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。
2. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。
很明显,上述方法是一个递归的过程,也就是说用递归的方法可以很干净利索地求得所有组合。
下面是递归方法的实现:
/// 求从数组a[1..n]中任选m个元素的所有组合。
/// a[1..n]表示候选集,m表示一个组合的元素个数。
/// b[1..M]用来存储当前组合中的元素, 常量M表示一个组合中元素的个数。
void combine( int a[], int n, int m,  int b[], const int M )
{
for(int i=n; i>=m; i–)  // 注意这里的循环范围
{
b[m-1] = i – 1;
if (m > 1)
combine(a,i-1,m-1,b,M);
else      // m == 1, 输出一个组合
{
for(int j=M-1; j>=0; j–)
cout << a[b[j]] << ” “;
cout << endl;
}
}
}

因为递归程序均可以通过引入栈,用回溯转化为相应的非递归程序,所以组合问题又可以用回溯的方法来解决。为了便于理解,我们可以把组合问题化归为图的路径遍历问题,在n个数中选取m个数的所有组合,相当于在一个这样的图中(下面以从1,2,3,4中任选3个数为例说明)求从[1,1]位置出发到达[m,x] (m<=x<=n)位置的所有路径:
1  2  3  4
2  3  4
3  4
上图是截取n×n右上对角矩阵的m行构成,我们要求的所有组合就相当于从第一行的第一列元素[1,1]出发,到第三行的任意一列元素作为结束的所有路径,规定每走一步需跨越一行,并且从上一行的任何一个元素到其下一行中列处于其右面的任何一个元素均有一路径相连,显然任一路径经过的数字序列就对应一个符合要求的组合。
下面是非递归的回溯方法的实现:
/// 求从数组a[1..n]中任选m个元素的所有组合。
/// a[1..n]表示候选集,m表示一个组合的元素个数。
/// 返回所有排列的总数。
int combine(int a[], int n, int m)
{
m = m > n ? n : m;

int* order = new int[m+1];
for(int i=0; i<=m; i++)
order[i] = i-1;            // 注意这里order[0]=-1用来作为循环判断标识

int count = 0;
int k = m;
bool flag = true;           // 标志找到一个有效组合
while(order[0] == -1)
{
if(flag)                   // 输出符合要求的组合
{
for(i=1; i<=m; i++)
cout << a[order[i]] << ” “;
cout << endl;
count++;
flag = false;
}

order[k]++;                // 在当前位置选择新的数字
if(order[k] == n)          // 当前位置已无数字可选,回溯
{
order[k–] = 0;
continue;
}

if(k < m)                  // 更新当前位置的下一位置的数字
{
order[++k] = order[k-1];
continue;
}

if(k == m)
flag = true;
}

delete[] order;
return count;
}

下面是测试以上函数的程序:
int main()
{
const int N = 4;
const int M = 3;
int a[N];
for(int i=0;i<N;i++)
a[i] = i+1;

// 回溯方法
cout << combine(a,N,3) << endl;

// 递归方法
int b[M];
combine(a,N,M,b,M);

return 0;
}

由上述分析可知,解决组合问题的通用算法不外乎递归和回溯两种。在针对具体问题的时候,因为递归程序在递归层数上的限制,对于大型组合问题而言,递归不是一个好的选择,这种情况下只能采取回溯的方法来解决。

n个数的全排列问题相对简单,可以通过交换位置按序枚举来实现。STL提供了求某个序列下一个排列的算法next_permutation,其算法原理如下:
1. 从当前序列最尾端开始往前寻找两个相邻元素,令前面一个元素为*i,后一个元素为*ii,且满足*i<*ii;
2. 再次从当前序列末端开始向前扫描,找出第一个大于*i的元素,令为*j(j可能等于ii),将i,j元素对调;
3. 将ii之后(含ii)的所有元素颠倒次序,这样所得的排列即为当前序列的下一个排列。
其实现代码如下:
template <class BidirectionalIterator>
bool next_permutation(BidirectionalIterator first, BidirectionalIterator last)
{
if (first == last) return false;   // 空範圍
BidirectionalIterator i = first;
++i;
if (i == last) return false;       // 只有一個元素
i = last;                          // i 指向尾端
–i;

for(;;)
{
BidirectionalIterator ii = i;
–i;
// 以上,鎖定一組(兩個)相鄰元素
if (*i < *ii)                     // 如果前一個元素小於後一個元素
{
BidirectionalIterator j = last;  // 令 j指向尾端
while (!(*i < *–j));            // 由尾端往前找,直到遇上比 *i 大的元素
iter_swap(i, j);                 // 交換 i, j
reverse(ii, last);               // 將 ii 之後的元素全部逆向重排
return true;
}
if (i == first)                   // 進行至最前面了
{
reverse(first, last);            // 全部逆向重排
return false;
}
}
}

下面程序演示了利用next_permutation来求取某个序列全排列的方法:
int main()
{
int ia[] = {1,2,3,4};
vector<int> iv(ia,ia+sizeof(ia)/sizeof(int));

copy(iv.begin(),iv.end(),ostream_iterator<int>(cout,” “));
cout << endl;
while(next_permutation(iv.begin(),iv.end()))
{
copy(iv.begin(),iv.end(),ostream_iterator<int>(cout,” “));
cout << endl;
}

return 0;
}
注意:上面程序中初始序列是按数值的从小到大的顺序排列的,如果初始序列无序的话,上面程序只能求出从当前序列开始的后续部分排列,也就是说next_permutation求出的排列是按排列从小到大的顺序进行的。

///////////////////////////////////////////////////////

排列组合与回溯算法

KuiBing

感谢Bamboo、LeeMaRS的帮助

[关键字] 递归 DFS

[前言] 这篇论文主要针对排列组合对回溯算法展开讨论,在每一个讨论之后,还有相关的推荐题。在开始之前,我们先应该看一下回溯算法的概念,所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中产生一个正确的解,然后在以后的每一步搜索过程中,都检查其前一步的记录,并且它将有条件的选择以后的每一个搜索状态(即第i+1层的状态节点)。

需掌握的基本算法:

排列:就是从n个元素中同时取r个元素的排列,记做P(n,r)。(当r=n时,我们称P(n,n)=n!为全排列)例如我们有集合OR = {1,2,3,4},那么n = |OR| = 4,切规定r=3,那么P(4,3)就是:

{1,2,3}; {1,2,4}; {1,3,2}; {1,3,4};{1,4,2};{1,4,3};{2,1,3};{2,1,4}; {2,3,1}; {2,3,4}; {2,4,1}; {2,4,3}; {3,1,2}; {3,1,4}; {3,2,1}; {3,2,4}; {3,4,1}; {3,4,2}; {4,1,2}; {4,1,3}; {4,2,1}; {4,2,3}; {4,3,1}; {4,3,2}

算法如下:

int  n, r;
char used[MaxN];
int  p[MaxN];

void permute(int pos)
{ int i;
/*如果已是第r个元素了,则可打印r个元素的排列 */
if (pos==r) {
for (i=0; i<r; i++)
cout << (p[i]+1);
cout << endl;
return;
}
for (i=0; i<n; i++)
if (!used[i]) { /*如果第i个元素未用过*/
/*使用第i个元素,作上已用标记,目的是使以后该元素不可用*/
used[i]++;
/*保存当前搜索到的第i个元素*/
p[pos] = i;
/*递归搜索*/
permute(pos+1);

/*恢复递归前的值,目的是使以后改元素可用*/
used[i]–;
}
}

相关问题
UVA 524 Prime Ring Problem

可重排列:就是从任意n个元素中,取r个可重复的元素的排列。例如,对于集合OR={1,1,2,2}, n = |OR| = 4, r = 2,那么排列如下:

{1,1}; {1,2}; {1,2}; {1,1}; {1,2}; {1,2}; {2,1}; {2,1}; {2,2}; {2,1}; {2,1}; {2,2}

则可重排列是:

{1,1}; {1,2}; {2,1}; {2,2}.

算法如下:

#define FREE -1
int n, r;
/*使元素有序*/
int E[MaxN] = {0,0,1,1,1};
int P[MaxN];
char used[MaxN];

void permute(int pos)
{
int i;
/*如果已选了r个元素了,则打印它们*/
if (pos==r)  {
for (i=0; i<r; i++)
cout << P[i];
cout << endl;
return;
}
/*标记下我们排列中的以前的元素表明是不存在的*/
P[pos] = FREE;
for (i=0; i<n; i++)
/*如果第I个元素没有用过,并且与先前的不同*/
if (!used[i] && E[i]!=P[pos]) {
/*使用这个元素*/
used[i]++;
/*选择现在元素的位置*/
P[pos] = E[i];
/*递归搜索*/
permute(pos+1);
/*恢复递归前的值*/
used[i]–;
}
}

相关习题
UVA 10098 Generating Fast, Sorted Permutations

组合:从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合,例如OR = {1,2,3,4}, n = 4, r = 3则无重组合为:

{1,2,3}; {1,2,4}; {1,3,4}; {2,3,4}.

算法如下:

int n, r;
int C[5];
char used[5];

void combine(int pos, int h)
{
int i;
/*如果已选了r个元素了,则打印它们*/
if (pos==r) {
for (i=0; i<r; i++)
cout<< C[i];
cout<< endl;
return;
}
for (i=h; i<=n-r+pos; i++) /*对于所有未用的元素*/
if (!used[i]) {
/*把它放置在组合中*/
C[pos] = i;
/*使用该元素*/
used[i]++;
/*搜索第i+1个元素*/
combine(pos+1,i+1);
/*恢复递归前的值*/
used[i]–;
}
}

相关问题:
Ural 1034 Queens in peaceful position

可重组合:类似于可重排列。

[例] 给出空间中给定n(n<10)个点,画一条简单路径,包括所有的点,使得路径最短。

解:这是一个旅行售货员问题TSP。这是一个NP问题,其实就是一个排列选取问题。

算法如下:

int  n, r;
char used[MaxN];
int  p[MaxN];
double min;

void permute(int pos, double dist)
{
int i;
if (pos==n) {
if (dist < min) min = dist;
return;
}
for (i=0; i<n; i++)
if (!used[i]) {
used[i]++;
p[pos] = i;
if (dist + cost(point[p[pos-1]], point[p[pos]]) < min)
permute(pos+1, dist + cost(point[p[pos-1]], point[p[pos]]));
used[i]–;
}
}

[例]对于0和1的所有排列,从中同时选取r个元素使得0和1的数量不同。

解 这道题很简单,其实就是从0到2^r的二元表示。

算法如下:

void dfs(int pos)
{
if (pos == r)
{
for (i=0; i<r; i++) cout<<p[i];
cout<<endl;
return;
}
p[pos] = 0;
dfs(pos+1);
p[pos] = 1;
dfs(pos+1);}

相关问题:

Ural

1005 Stone pile
1060 Flip Game
1152 The False Mirrors

[例]找最大团问题。

一个图的团,就是包括了图的所有点的子图,并且是连通的。也就是说,一个子图包含了n个顶点和n*(n-1)/2条边,找最大团问题是一个NP问题。算法如下:

#define MaxN 50

int  n, max;
int  path[MaxN][MaxN];
int  inClique[MaxN];

void dfs(int inGraph[])
{
int i, j;
int Graph[MaxN];

if ( inClique[0]+inGraph[0]<=max ) return;
if ( inClique[0]>max ) max=inClique[0];

/*对于图中的所有点*/
for (i=1; i<=inGraph[0]; i++)
{
/*把节点放置到团中*/
++inClique[0];
inClique[inClique[0]]=inGraph[i];
/*生成一个新的子图*/
Graph[0]=0;
for (j=i+1; j<=inGraph[0]; j++)
if (path[inGraph[i]][inGraph[j]] )
Graph[++Graph[0]]=inGraph[j];
dfs(Graph);
/*从团中删除节点*/
–inClique[0];}
}
int main()
{
int inGraph[MaxN];
int i, j;
cin >>n;
while (n > 0)
{
for (i=0; i<n; i++)
for (j=0; j<n; j++)
cin >>path[i][j];
max = 1;
/*初始化*/
inClique[0]= 0;
inGraph[0] = n;
for (i=0; i<n; i++) inGraph[i+1]=i;
dfs(inGraph);
cout<<max<<endl;
cin >>n;
}
return 0;}

参考论文 <A fast algorithm for the maximum clique problem>

相关问题:

acm.zju.edu.cn: 1492 maximum clique

相关网站

http://acm.uva.es/p

http://acm.timus.ru/

Contact me:

MSN: Bing0672@Hotmail.com

/////////////////////////

求集合子集,和全排列的递归算法实现(c++,Dev C++调试通过)

求集合全排列算法实现:

求集合所有子集的算法实现:

1.求集合全排列算法实现:

/*
Name:
Copyright:
Author: XuLei
Date: 01-11-05 09:40
Description:求一个字符串集合(List)的全排列,一共有n!种(假设字符数为n)
Algorithms:令E= {e1 , …, en }表示n 个元素的集合,我们的目标是生成该集合的所有排列方式。令Ei
为E中移去元素i 以后所获得的集合,perm (X) 表示集合X 中元素的排列方式,ei.p e r m
(X)表示在perm (X) 中的每个排列方式的前面均加上ei 以后所得到的排列方式。例如,如果
E={a, b, c},那么E1={b, c},perm (E1 )=( b c, c b),e1 .perm(E1) = (a b c, a c b)。
对于递归的基本部分,采用n = 1。当只有一个元素时,只可能产生一种排列方式,所以
perm (E) = (e),其中e 是E 中的唯一元素。当n > 1时,perm (E) = e1 .perm(E1) +e2 .p e r m
(E2) +e3.perm(E3) + … +en .perm (En)。这种递归定义形式是采用n 个perm(X) 来定义perm(E),
其中每个X 包含n-1个元素。至此,一个完整的递归定义所需要的基本部分和递归部分都已完成。
*/
#include <iostream>
using namespace std;
//const int ListLength=10;
const int ListLength=3;     //字符串数组的长度
void Swap(char &c, char &s) //交换字符c和s
{
char temp=c;
c=s;
s=temp;
}
void Perm(char *List, int m, int k)
{
static int count=0;
if(m==k)
{
cout<<++count<<“:”;
for(int i=0; i<=ListLength-1; i++)
{
cout<<List[i];
}
cout<<endl;
}
else
{
for(int i=m; i<=k; i++)
{
Swap(List[m],List[i]);
Perm(List, m+1, k);
Swap(List[m],List[i]);

}
}

}
int main()
{
//char List[ListLength]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’};
char List[ListLength]={‘a’,’b’,’c’};
Perm(List, 0, ListLength-1);
system(“pause”);
return 0;

}

2. 求集合所有子集的算法实现:

/*
Name:
Copyright:
Author: XuLei
Date: 01-11-05 11:34
Description: 求一个集合(List)的所有子集,并输出
Algorithms: 由SubSet函数来求所有的子集,SubSet(char *List, int m, char *Buffer, int flag)
基本思想为首先取出List[m],然后依次把List[m+1…ListLength-1]加到List[m]后面,
每加一个,存储在集合Buffer[]中,并输出。由flag标识数组Buffer的长度。
以集合{a,b,c}为例,首先取出a存入Buffer[0],输出。
然后调用SubSet(char *List, 1, char *Buffer, 1)把Buffer[1]=b
输出ab。
再调用SubSet(char *List, 2, char *Buffer, 2) 把Buffer[2]=c
输出abc。
再进入SubSet(char *List, 1, char *Buffer, 1) 把Buffer[1]=c
输出ac。
退回最外层的循环。
取出b存入Buffer[0],输出。
然后调用SubSet(char *List, 1, char *Buffer, 1)把Buffer[1]=c
输出bc。
取出c存入Buffer[0],输出。
*/
#include <iostream>
using namespace std;
const int ListLength=10;
//const int ListLength=3;

//输出Buffer集合
void Output(char *Buffer, int flag)
{
static int count=1;
if(count==1)
{
cout<<count++<<“: { }”<<endl;
}
cout<<count++<<“: {“;
for(int i=0; i<=flag; i++)
{
cout<<Buffer[i];
}
cout<<“}”<<endl;
}
//找到元素c在集合List中的位置
int Index(char *List, char c)
{
for(int i=0; i<=ListLength-1; i++)
{
if(c==List[i])
{
return i;
break;
}
}
return -1;
}

void SubSet(char *List, int m, char *Buffer, int flag)
{
if(m <= ListLength-1)
{
/*if(m==0)
{
Buffer[0]=List[0];
}*/
//Buffer[flag]=List[m];
/*if(flag==0)
{
Buffer[flag]=List[m];
}*/

for(int i=(flag==0) ? 0 : Index(List,Buffer[flag-1])+1; i<=ListLength-1; i++)
//当flag==0时,Buffer中没有任何元素,此时i=[0…ListLength-1]
//当flag>0时,找到Buffer中的最后一个元素在集合List中的位置i,把[i….ListLength-1]
//处的元素,加到Buffer元素的最后面
{
Buffer[flag]=List[i];
Output(Buffer,flag);
SubSet(List, m+1, Buffer,flag+1);
}
}
return;
}

int main()
{
char List[ListLength]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’};
//char List[ListLength]={‘a’,’b’,’c’};
char Buffer[ListLength]={‘ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘};
//char Buffer[ListLength]={‘ ‘,’ ‘,’ ‘};
//int flag=0;
//TEST
//cout<<Index(List,’c’);  OK
SubSet(List,0,Buffer,0);
system(“pause”);
return 0;
}

///////////////////////////////////////////////////////////////////////

发表在 Linux | 留下评论

Linux(CentOS 7.0)安装Oracle11g R2

http://www.cnblogs.com/xi52qian/p/4187039.html

// 注释 # root用户 $oracle用户
1. 关闭安全措施
# chkconfig iptables off // 永久关闭防火墙
# serviceiptables stop // 暂时关闭防火墙,重启系统后会自动打开
# sed -i “s/SELINUX=enforcing/SELINUX=disabled/” /etc/selinux/config // 关闭Selinux
2. 验证硬件
2.1 内存:
要求:内存最小1G,推荐2G或者更高。
查看命令:# grep MemTotal /proc/meminfo
2.2 Swap:
要求:
RAW
Swap
1G至2G 1.5倍
2G至16G 同RAW相等
16G以上 16G
查看命令:# grep SwapTotal /proc/meminfo
          # free
3. 验证软件
3.1 操作系统
  • Asianux Server 3 SP2
  • Oracle Linux 4 Update 7
  • Oracle Linux 5 Update 2 (with Red Hat Compatible Kernel)
  • Oracle Linux 5 Update 5
  • Oracle Linux 6
  • Oracle Linux 6 (with Red Hat Compatible Kernel)
  • Red Hat Enterprise Linux 4 Update 7
  • Red Hat Enterprise Linux 5 Update 2
  • Red Hat Enterprise Linux 5 Update 5 (with the Oracle Unbreakable Enterprise Kernel for Linux)
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 6 (with the Oracle Unbreakable Enterprise Kernel for Linux)
  • SUSE Linux Enterprise Server 10 SP2
  • SUSE Linux Enterprise Server 11
CentOS7本文按照Red Hat Enterprise Linux 6来配置。
# cat /proc/version // 查看版本
3.2 内核
  • On Oracle Linux 4 and Red Hat Enterprise Linux 4 2.6.9 or later
  • On Oracle Linux 5 Update 2 with Red Hat Compatible Kernel 2.6.18 or later
  • On Oracle Linux 5 Update 5 with Red Hat Compatible Kernel 2.6.18 or later
  • On Oracle Linux 5 Update 5 with Unbreakable Enterprise Kernel 2.6.32-100.0.19 or later
  • On Oracle Linux 6 2.6.32-100.28.5.el6.x86_64 or later
  • On Oracle Linux 6 with Red Hat Compatible Kernel 2.6.32-71.el6.x86_64 or later
  • On Red Hat Enterprise Linux 5 Update 2 2.6.18 or later
  • On Red Hat Enterprise Linux 5 Update 5 2.6.18 or later
  • On Red Hat Enterprise Linux 5 Update 5 with Unbreakable Enterprise Kernel 2.6.32 or later
  • On Red Hat Enterprise Linux 6 2.6.32-71.el6.x86_64 or later
  • On Red Hat Enterprise Linux 6 with Unbreakable Enterprise Kernel 2.6.32-100.28.5.el6.x86_64 or later
  • On Asianux Server 3 2.6.18 or later
  • On SUSE Linux Enterprise Server 10 2.6.16.21 or later
  • On SUSE Linux Enterprise Server 11 2.6.27.19 or later
# uname-r
3.3 验证需要的包:
# rpm -qa binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers glibc-static kernel-headers pdksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel libstdc++-static make numactl-devel sysstat unixODBC unixODBC-devel // 验证命令26个包
  • kernel-headers-3.10.0-123.el7.x86_64
  • gcc-c++-4.8.2-16.el7.x86_64
  • numactl-devel-2.0.9-2.el7.x86_64
  • glibc-headers-2.17-55.el7.x86_64
  • glibc-common-2.17-55.el7.x86_64
  • binutils-2.23.52.0.1-16.el7.x86_64
  • unixODBC-devel-2.3.1-10.el7.x86_64
  • libaio-0.3.109-12.el7.x86_64
  • make-3.82-21.el7.x86_64
  • elfutils-libelf-0.158-3.el7.x86_64
  • elfutils-libelf-devel-0.158-3.el7.x86_64
  • sysstat-10.1.5-4.el7.x86_64
  • glibc-static-2.17-55.el7.x86_64
  • glibc-devel-2.17-55.el7.x86_64
  • glibc-2.17-55.el7.x86_64
  • elfutils-libelf-devel-static-0.158-3.el7.x86_64
  • libaio-0.3.109-12.el7.i686
  • gcc-4.8.2-16.el7.x86_64
  • libgcc-4.8.2-16.el7.i686
  • libstdc++-static-4.8.2-16.el7.x86_64
  • libaio-devel-0.3.109-12.el7.x86_64
  • libstdc++-4.8.2-16.el7.x86_64
  • libaio-devel-0.3.109-12.el7.i686
  • unixODBC-2.3.1-10.el7.x86_64
  • libstdc++-devel-4.8.2-16.el7.x86_64
  • compat-libstdc++-33-3.2.3-71.el7.x86_64
  • libgcc-4.8.2-16.el7.x86_64
  • libgomp-4.8.2-16.el7.x86_64
#rpm -ivh 安装包名 // 安装程序包
4. 创建组和用户
# groupadd dba
# groupadd oinstall
# useradd -m -g oinstall -G dba oracle
# passwd oracle
// 如果nobody用户不存在(id nobody命令查看),则创建:
# useradd nobody
5. 配置内核
注:配置大于系统数据需要配置更改,否则不需要配置。
要求配置:
参数 最小值 文件 命令
semmsl
semmns
semopm
semmni
50
32000
100
128
/proc/sys/kernel/sem
# /sbin/sysctl -a | grep sem
shmall
2097152
/proc/sys/kernel/shmall
# /sbin/sysctl -a | grep shm
shmmax
4294967296
/proc/sys/kernel/shmmax
// 最大共享内存,官方文档建议是内存的1/2
// 我的服务器是8G内存,所以为4*1024*1024*1024
// 最小值为536870912(1G内存/2)
# /sbin/sysctl -a | grep shm
shmmni
4096
/proc/sys/kernel/shmmni
# /sbin/sysctl -a | grep shm
file-max
6815744
/proc/sys/fs/file-max
# /sbin/sysctl -a | grep file-max
ip_local_port_range
9000 65500
/proc/sys/net/ipv4/ip_local_port_range
# /sbin/sysctl -a | grep ip_local_port_range
rmem_default
262144
/proc/sys/net/core/rmem_default
# /sbin/sysctl -a | grep rmem_default
rmem_max
4194304
/proc/sys/net/core/rmem_max
# /sbin/sysctl -a | grep rmem_max
wmem_default
262144
/proc/sys/net/core/wmem_default
# /sbin/sysctl -a | grep wmem_default
wmem_max
1048576
/proc/sys/net/core/wmem_max
# /sbin/sysctl -a | grep wmem_max
aio-max-nr 1048576
# vi /etc/sysctl.conf
按照系统值对比添加:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
保存后生效命令:
# /sbin/sysctl -p
6. 创建安装目录
# mkdir -p /opt/oracle/product/11.2.0.1
# chown -R oracle:oinstall /opt/oracle
# mkdir /var/oracle
# chown oracle:oinstall  /var/oracle
# chmod 755 /var/oracle
7. 配置环境变量
vi /etc/profile
增加下面行:
if [ $USER = “oracle” ]; then
if [ $SHELL = “/bin/ksh” ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
使用Oracle用户登陆:
su – oracle
vi ~/.bash_profile
以下是配置文件的内容,里面已有的部分就不必在次添加了。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
# +————————–+
# | SETUP ORACLE ENVIRONMENT |
# +————————–+
TMP=/tmp
TMPDIR=/tmp
export TMP TMPDIR
# 如果安装出现相关问题请屏蔽下面5行,
# 安装好后再取消屏蔽这些环境变量设置
export ORACLE_HOME=/opt/oracle/product/11.2.0.1
export ORACLE_BASE=/opt/oracle
export ORACLE_SID=afcsc
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$PATH:$ORACLE_HOME/bin
# +————————–+
# | LINUX STUFF |
# +————————–+
export LANG=AMERICAN_AMERICA.ZHS16GBK
unset USERNAME
# +————-+
# | “GREETINGS” |
# +————-+
echo “.bash_profile executed”
执行:source ~/.bash_profile
8. 设置进程数和最大会话数
编辑文件:
# vi /etc/security/limits.conf 加入以下语句:
oracle           soft    nproc           2047
oracle           hard    nproc           16384
oracle           soft    nofile          1024
oracle           hard    nofile          65536
9. 关联设置
编辑文件:vi /etc/pam.d/login 加入以下语句:
session    required     pam_limits.so
(注意:根据最后一条session规则的注释,应该加在最后一条规则之前)

9. 解压缩
将linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip移动到移动到/tmp目录下进行解压缩。
$ cd /tmp
$ unzip linux.x64_11gR2_database_1of2.zip
$ unzip linux.x64_11gR2_database_2of2.zip
10. 安装
$ cd /tmp/database/
$ ./runInstaller
注意:
选择advance install
数据库home设置为/opt/oracle/product/11.2.0.1
数据库全局名称设置为afcsc
字符集选Simplified Chinese ZHS16GBK
检查后会运行图形化安装界面。
安装过程中连接库时会出现两个错误:
  • 第一个:

/lib64/libstdc++.so中memcpy@GLIBC_2.4找不到。

问题:glibc是2.17的库,连接找的是2.14的库。
解决办法:改成静态链接。
查看 /usr/lib64/libc.a是否存在。
修改oracle安装目录下:$ORACLE_HOME/ctx/lib/ins_ctx.mk
ctxhx: $(CTXHXOBJ)
$(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK)
修改为:
ctxhx: $(CTXHXOBJ)
-static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/libc.a
然后点击retry通过。
  • 第二个:

问题:undefinied reference symbol’B_DestroyKeyObject’,查看日志,实际就是没有找到nnz11这个库。

解决办法:
修改/opt/oracle/product/11.2.0.1/sysman/lib/ins_emagent
$(MK_EMAGENT_NMECTL)
修改为:
$(MK_EMAGENT_NMECTL) -lnnz11
然后点击retry通过。
注:安装需要远程图形化连接安装oracle,具体方式和软件这里不说了。
发表在 Linux | 留下评论

地区后缀

1 省
1 市
1 县
1 州
1 郡
1 区
1 乡
1 镇
1 村
1 庄
1 城
1 屯
1 苑
1 街
1 路
1 里
1 口
1 道
1 巷
1 弄
1 楼
1 馆
1 寺
1 宫
1 府
1 园
1 门
1 桥
1 山
1 岗
1 峰
1 河
1 江
1 湖
1 海
2 东
2 南
2 西
2 北
2 中
2 内
2 外
3 一
3 二
3 三
3 四
3 五
3 六
3 七
3 八
3 九
3 零
3 ○

发表在 Linux | 留下评论

android coap 初探

package com.mtjst.im;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

import org.eclipse.californium.core.CoapClient;
import org.eclipse.californium.core.CoapResponse;

import java.net.URI;

public class MainActivity extends Activity {
    private TextView resultView;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        btn = (Button) findViewById(R.id.btn);
        resultView = (TextView) findViewById(R.id.result);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    URI uri = new URI("coap://192.168.10.109:5683/");
                    CoapClient mCoapClient = new CoapClient(uri);
                    CoapResponse response = mCoapClient.get();
                    resultView.setText(response.getResponseText());
                } catch (Exception e) {

                }
            }
        });
    }
}

服务端

const coap = require('coap'), 
	server = coap.createServer(),
	  uuid = require('uuid');
 
server.on('request', function(req, res) {
	res.end(uuid.v1())
});

// the default CoAP port is 5683 
server.listen(function() {

});

 

jar包

发表在 Linux | 留下评论

Setting up Mosquitto 1.4 with libwebsockets on CentOS 7 on Google Compute Engine

I use mosquitto for a lot of projects; it’s a great MQTT broker. However, I’ve also always had to spin my own middleware to meld it into my websocket implementations. This isn’t the worst thing, as the approach allows a custom layer that can do heavy processing before being sent to clients.

The issue being…sometimes I just want the straight stream without the middleware.

To accomplish this, we can build a custom version of the Mosquitto 1.4 branch with libwebsockets that will allow us to configure Mosquitto to output on a websocket.

Fire up the VM on Google Compute Engine

There are two ways to start an instance on Compute Engine; the web panel or the command line. The command line is the easiest in my opinion. This assume you’ve already auth’ed (otherwise you may want to read up on the managing authentication and credentials)

➜  ~ gcloud compute instances create my-instance-name --image centos-7 --zone us-central1-a

Once we’re up and running, we can go ahead an ssh into that instance:

➜  ~ gcloud compute ssh my-instance-name --zone us-central1-a

Grab some dependiences

First things first: grab your development tools:

➜  ~ sudo yum groupinstall "Development Tools"

Now, let’s grab other pieces we’ll need to build libwebsockets and mosquitto:

➜  ~ sudo yum install wget mercurial cmake openssl-devel c-ares-devel libuuid-devel

Fantastic! Now, let’s go get libwebsockets:

➜  ~ wget https://github.com/warmcat/libwebsockets/archive/v1.3-chrome37-firefox30.tar.gz

Building libwebsockets

Presuming everything above went a-okay, we should have all we need to build.

Note: I’ve shorted the zsh command prompts without the path name below; obvisouly we’re changing into a directory and in oh-my-zsh that would put the folder in the path…it just gets a little long on the cut and paste.

➜  ~ tar zxvf v1.3-chrome37-firefox30.tar.gz
➜  ~ cd libwebsockets-1.3-chrome37-firefox30
➜  ~ mkdir build; cd build;
➜  ~ cmake .. -DLIB_SUFFIX=64
➜  ~ sudo make install

The cmake command above is important on CentOS 7; if we don’t give it the lib suffix, the build will fail.

Building Mosquitto 1.4

First, let’s pull the code from the repo using mecurial:

➜  ~  hg clone https://bitbucket.org/oojah/mosquitto
➜  ~  cd mosquitto
➜  ~  hg pull && hg update 1.4

Okay, so you have some code. Now we need to tell Mosquitto to use libwebsockets by editing the config.mk file and enabling WITH_WEBSOCKETS:

WITH_WEBSOCKETS:=yes

After we’ve done that, we can build mosquitto:

➜  ~  make binary
➜  ~  sudo make install

Why “make binary”? Because mosquitto really isn’t very setup to build kindly on CentOS; we would have to change a lot of hardcoded paths to the docbook xsl dependinces. There is a bug marked WONTFIX that explains this (see issue 1269967). Trust me, it’s not worth the time. Just use make binary.

It all went well…or so I thought

So everything builds, you install everything, you go to fire up mosquitto and it fails. Turns out, we need to symlink our libwebsockets lib:

➜  ~ sudo ln -s /usr/local/lib64/libwebsockets.so.4.0.0 /usr/lib/libwebsockets.so.4.0.0

Well, and it would be helpful to have a very basic mosquitto.conf:

autosave_interval 1800
persistence true
persistence_file mosquitto.db
persistence_location /var/mosquitto/
connection_messages true
log_timestamp true

listener 1883

listener 10001 127.0.0.1
protocol websockets

Note the “protocol websockets” line. This is going to enable our implemenation.

Now, we fire mosquitto up:

➜  ~ /usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf -d

Open up some ports

It would help if we told the instance to allow some traffic:

➜  ~ gcloud compute firewall-rules create allow-mqtt --allow tcp:1883

Let us not forget our websocket:

➜  ~ gcloud compute firewall-rules create allow-websocket --allow tcp:10001

Talk with Paho JavaScript

With the server feeling chatty, you can now connect and talk with Eclipse Paho’s JavaScript implementation: Paho JavaScript Client. The wire up is fairly straightforward in the most basic setup:

mqttClient = new Messaging.Client(YOUR_HOST, parseInt(YOUR_PORT), MY_CLIENT_ID);

mqttClient.onConnectionLost = onConnectionLost;
mqttClient.onMessageArrived = onMessageArrived;
mqttClient.connect({onSuccess:onConnect});

function onConnect() {
  client.subscribe("#");
}

function onMessageArrived(response) {
  var ret_topic = response.destinationName;
  var ret_payload = response.payloadString;

  // More things!
}
发表在 Linux | 留下评论

CenOS 7 安装配置Samba服务

http://blog.csdn.net/styyzxjq2009/article/details/38900093

 

参考http://www.howtoforge.com/samba-server-installation-and-configuration-on-centos-7

实现windows 7与centos 7的文件夹共享,本人的是windows7系统下安装的centos7 虚拟机,桥接模式

不知是不是因为VM的原因,共享文件夹不可用,所以迫不得已使用samba共享,以下是具体步骤,个人验证可用

1、编辑C:\Windows\System32\drivers\etc\hosts

 

  1. # Copyright (c) 1993-2009 Microsoft Corp.
  2. #
  3. # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
  4. #
  5. # This file contains the mappings of IP addresses to host names. Each
  6. # entry should be kept on an individual line. The IP address should
  7. # be placed in the first column followed by the corresponding host name.
  8. # The IP address and the host name should be separated by at least one
  9. # space.
  10. #
  11. # Additionally, comments (such as these) may be inserted on individual
  12. # lines or following the machine name denoted by a ‘#’ symbol.
  13. #
  14. # For example:
  15. #
  16. #      102.54.94.97     rhino.acme.com          # source server
  17. #       38.25.63.10     x.acme.com              # x client host
  18. # localhost name resolution is handled within DNS itself.
  19. #   127.0.0.1       localhost
  20. #   ::1             localhost
  21. 127.0.0.1 genuine.microsoft.com
  22. 127.0.0.1 mpa.one.microsoft.com
  23. 127.0.0.1 sls.microsoft.com
  24. 192.168.10.187 localhost.localdomain centos
  25. #ip地址是centos的ip,localhost.localdomain表示centos的hostname,最后一个参数centos表示centos的别名,即可以通过\\centos访问centos的共享文件夹</span>

直接打开hosts文件是无法修改的,有两种解决方法:

一是以管理员权限打开记事本程序,然后在记事本程序里打开hosts文件,二是把hosts文件拷贝出来修改后再进行覆盖
安装samba服务相关包

yum install samba samba-client samba-common

查看相关包
~#: rpm -qa| grep samba
samba-common-4.1.1-37.el7_0.x86_64
samba-4.1.1-37.el7_0.x86_64
samba-libs-4.1.1-37.el7_0.x86_64
samba-client-4.1.1-37.el7_0.x86_64

 

修改smb.conf,最好先备份原文件,以防修改不正确导致smb无法执行

vi /etc/samba/smb.conf

  1. [global]
  2. workgroup = WORKGROUP
  3. server string = Samba Server %v
  4. netbios name = centos
  5. security = user
  6. map to guest = bad user
  7. dns proxy = no
  8. #============================ Share Definitions ==============================
  9. [Anonymous]
  10. path = /samba/anonymous
  11. browsable =yes
  12. writable = yes
  13. guest ok = yes
  14. read only = no

执行以下命令,启动samba服务

mkdir -p /samba/anonymous
systemctl enable smb.service
systemctl enable nmb.service
systemctl restart smb.service
systemctl restart nmb.service

3、 跳过防火墙

 一种方法是关闭防火墙

 systemctl stop firewalld.service

setenforce 0

二方法是添加规则

firewall-cmd –permanent –zone=public –add-service=samba

firewall-cmd --reload

4 输入\\centos 即可看到共享文件了,so happy~

#ip地址是centos的ip,localhost.localdomain表示centos的hostname,最后一个参数centos表示centos的别名
发表在 Linux | 留下评论

CentOS 7最小化安装后找不到‘ifconfig’命令——修复小提示

就像我们所知道的,“ifconfig”命令用于配置GNU/Linux系统的网络接口。它显示网络接口卡的详细信息,包括IP地址,MAC地址,以及网络接口卡状态之类。但是,该命令已经过时了,而且在最小化版本的RHEL 7以及它的克隆版本CentOS 7,Oracle Linux 7和Scientific Linux 7中也找不到该命令。

在CentOS最小化服务器版本中如何查找网卡IP和其它详细信息?

CentOS 7最小化系统,使用“ip addr”和“ip link”命令来查找网卡详情。要知道统计数据,可以使用“ip -s link”。

要查看网卡细节,输入以下命令:

  1. ip addr

输出样例:

  1. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
  2. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  3. inet 127.0.0.1/8 scope host lo
  4. inet6 ::1/128 scope host
  5. valid_lft forever preferred_lft forever
  6. 2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
  7. link/void
  8. inet 127.0.0.1/32 scope host venet0
  9. inet 192.168.1.101/32 brd 192.168.1.101 scope global venet0:0

要查看网络接口统计数据,输入命令:

  1. ip link

输出样例:

  1. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT
  2. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  3. 2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT
  4. link/void

或者

  1. ip -s link

输出样例:

  1. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT
  2. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  3. RX: bytes packets errors dropped overrun mcast
  4. 0 0 0 0 0 0
  5. TX: bytes packets errors dropped carrier collsns
  6. 0 0 0 0 0 0
  7. 2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT
  8. link/void
  9. RX: bytes packets errors dropped overrun mcast
  10. 8515667 6667 0 0 0 0
  11. TX: bytes packets errors dropped carrier collsns
  12. 300403 4249 0 0 0 0

在CentOS 7最小化服务器版本中如何启用并使用“ifconfig”命令?

如果你不知道在哪里可以找到ifconfig命令,请按照以下简单的步骤来找到它。首先,让我们找出哪个包提供了ifconfig命令。要完成这项任务,输入以下命令:

  1. yum provides ifconfig

输出样例:

  1. Loaded plugins: fastestmirror
  2. Loading mirror speeds from cached hostfile
  3. * base: centos.aol.in
  4. * extras: centos.aol.in
  5. * updates: centos.aol.in
  6. net-tools-2.0-0.17.20131004git.el7.x86_64 : Basic networking tools
  7. Repo : @base
  8. Matched from:
  9. Filename : /usr/sbin/ifconfig

或者你也可以使用以下命令。

  1. yum whatprovides ifconfig

这里,“provides”或者“whatprovides”开关用于找出某个包提供了某些功能或文件。

就像你在上面的输出中所看到的,net-tools包提供了ifconfig命令。因此,让我们安装net-tools包来使用ifconfig命令。

  1. yum install net-tools

现在,你就可以像以往一样使用ifconfig命令了。

  1. ifconfig -a

输出样例:

  1. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436
  2. inet 127.0.0.1 netmask 255.0.0.0
  3. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  4. loop txqueuelen 0 (Local Loopback)
  5. RX packets 0 bytes 0 (0.0 B)
  6. RX errors 0 dropped 0 overruns 0 frame 0
  7. TX packets 0 bytes 0 (0.0 B)
  8. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  9.  
  10. venet0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP> mtu 1500
  11. inet 127.0.0.1 netmask 255.255.255.255 broadcast 0.0.0.0 destination 127.0.0.1
  12. unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC)
  13. RX packets 7073 bytes 8549159 (8.1 MiB)
  14. RX errors 0 dropped 0 overruns 0 frame 0
  15. TX packets 4611 bytes 359201 (350.7 KiB)
  16. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  17.  
  18. venet0:0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP> mtu 1500
  19. inet 192.168.1.101 netmask 255.255.255.255 broadcast 192.168.1.101 destination 192.168.1.101
  20. unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC)
发表在 Linux | 留下评论

MACOSX下查看某个端口被哪个程序占用及杀进程方法

sudo lsof -i :9000

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

java 61342 a 313u IPv6 0x1111111111111 0t0 TCP *:cslistener (LISTEN)

然后根据PID杀进程:

sudo kill -9 61342

发表在 Linux | 留下评论