Hot For Coding
SecureCRT中文乱码解决

有时时候SSH工具登录远程Linux服务器操作时,中文部分显示乱码,而英文部分显示正常不影响

SecureCRT默认情况下显示中文字符都是乱码,需要设置为UTF8字符集以后才可以正常显示中文字符

菜单栏选项 > 会话选项

full

左侧选择外观,右侧字符编码下拉菜单选择UTF-8。点击确定保存退出即可。

full

如果还是乱码,可以试试GBK。通常中文字符要么是UTF8或者GBK。

...

READ ALL

Linux踢出已登录用户

这个做法有点坏,不过有时候是为了安全

要踢掉别人,首先得用root账户登录,然后使用w命令查看哪些用户登录了

[root@pmv01 ~]# w
 23:25:05 up 56 days, 59 min,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.1.48     23:25    0.00s  0.04s  0.03s w
root     pts/1    192.168.10.35    Wed17    5days  0.02s  0.02s -bash
root     pts/2    192.168.10.35    18:55    2:00m 28.29s  0.10s -bash
root     tty1     :0               06Mar18 56days  6:02   6:02  /usr/bin/Xorg :0 -nr -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-rt8RMd/database -nolisten tcp vt1

...

READ ALL

如何使用SSH工具管理Linux服务器

现在VPS已经成为虚拟主机的替代品,不少童鞋买VPS的时候商家会说此SSH不支持XXX只支持SSH,那么SSH是什么呢?

SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。支持所有UNIX平台,所以Linux自然也支持。

使用SSH管理UNIX平台服务器已经是所有管理员首选,那么常用的SSH管理工具有哪些呢?Xshell、Putty、SecureCRT比较常用。

...

READ ALL

买个Burst的VPS折腾了大半天还是没买好

有几个垃圾站,放国内机房要备案繁琐,所以就想着到国外随便买个便宜稳定的VPS跑跑就好。一番对比后选了84(Burst),感觉它有自己的机房,队伍壮大不会差哪去?

网页经常打不开

刚开始注册登录的时候,网页经常打不开,以为自己的网络原因。知道第二天到公司发现情况还是照旧。

full

重新回车一下,才能打开

信用卡扣款但账单依旧未支付

一番填写资料后,填写信用卡信息提交账单。很快就收到交行发来短信说消费7.15美元,可Burst订单状态还是未支付

full

...

READ ALL

CentOS配置vi高亮设置

CentOS里的vi只默认安装了vim-minimal-7.x,所以syntax高亮不起作用。需要用yum安装另外两个组件vim-common-7.xvim-enhanced-7.x

直接在命令状态下输入以下命令安装:

yum -y install vim-enhanced

此时使用vim命令打开文件就是高亮显示了

如果要修改色彩方案,可以自行在配置文件里制定颜色方案,vi默认带了大约十多种颜色方案,如果都不满意还可以从网上下载。

颜色方案下载地址 www.vim.org

配置文件地址 /etc/vimrc

...

READ ALL

C写的一个连线游戏

初学C语言,经过写完这个游戏发现与众多语言有很大差别的,虽说语法都差不多,但不能直接return数组这种让我觉得写C是一项体力活啊

这个游戏规则为呈现一个九宫格,电脑和人两个玩家对玩,只要有任意一方优先连成一条直线(3个)就算赢

算下来赢法一共就有8种,横线3条竖线3条对角线2条

以下是代码

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>

bool isDone (int arr[9], char a) {
  int len = 9;
  int len1 = 3;
  int correct = 0;
  bool isWin = false;

  for (unsigned int i = 0; i < len; i++) {
    if (arr[i] == a) {
      correct++;
    }
    
    if ((i + 1) % len1 == 0) {
      if (correct == len1) {
        isWin = true;
        break;
      } else {
        correct = 0;
      }
    }
  }

  for (unsigned int i = 0; i < len1; i++) {
    correct = 0;

    for (unsigned int j = i; j < len; j+=len1) {
      if (arr[j] == a) {
        correct++;
      }
    }

    if (correct == 3) {
      isWin = true;
      printf("\n Here 2");
      break;
    }    
  }

  if (arr[0] == a && arr[4] == a && arr[8] == a) {
    isWin = true;
  } else if (arr[2] == a && arr[4] == a && arr[6] == a) {
    isWin = true;
  }

  return isWin;
}

int showGrid (int arr[9]) {
  // int len = sizeof(arr) / sizeof(arr[0]);
  int len = 9;

  printf("\n");
  for (unsigned int i = 0; i < len; i++) {
    if (arr[i] != 0) {
      printf(" %c ", arr[i]);
    } else {
      printf(" %d ", i + 1);      
    }

    if ((i + 1) % 3 == 0) {
      printf("\n");
    }
  }

  printf("\n");
  return 0;
}

int avalible (int arr[9]) {
  // int arrLen = sizeof(arr) / sizeof(arr[0]);
  int arrLen = 9;
  int av = 0;
  for (unsigned int i = 0; i < arrLen; i++) {
    if (arr[i] == 0) {
      av++;
    }
  }
  return av;
}

int clear (int arr[9]) {
  int len = 9;
  for (unsigned int i = 0; i < len; i++) {
    arr[i] = 0;
  }

  return 0;
}

int random1 (int min, int max) {
  srand(time(NULL));
  return rand()%((max+1)-min) + min;
}

int main (void) {
  int grid[9] = {0};
  int gridCount = sizeof(grid) / sizeof(grid[0]);
  int times = 0;
  int enter = 0;
  int enterTimes = 0;
  int av = 0;
  bool done = false;
  char a = 65;
  char b = 68;
  char restart = 0;
  showGrid(grid);

  printf(" %d", 1 % 3);
  do {
    times++;
    enterTimes = 0;
    enter = 0;

    if (times % 2 == 0) {
      enter = random1(1, 9);
      while (grid[enter - 1] != 0) {
        if (enter >= gridCount) {
          enter = 0;
        }
        
        enter++;
      }

      printf("\n Computer enter the number : %d", enter);
    } else {
      printf("\n User enter the number : ");
      do {
        scanf(" %d", &enter);        
        
        ++enterTimes;
        if (grid[enter - 1] > 0) {
          printf("\n Error: cannot enter this number. You can enter below number. \n ");
          avalible(grid);
          for (unsigned int i = 0; i < gridCount; i++) {
            if (grid[i] == 0) {
              printf(" %d ", i + 1);
            }
          }
          printf("\n Re-enter number please \n ");
        }
      } while (grid[enter - 1] > 0);
    }

    if (times % 2 == 0) {
      grid[enter - 1] = a;
    } else {
      grid[enter - 1] = b;
    }

    showGrid(grid);
    av = avalible(grid);

    if (av >= 1) {
      if (times % 2 == 0) {
        done = isDone(grid, a);
      } else {
        done = isDone(grid, b);
      }

      if (done) {
        if (times % 2 == 0) { 
          printf("\n Computer win! ");
        } else {
          printf("\n User win! ");
        }

        printf("\n Do you wanna restart? (Y/n) ");
        scanf(" %c", &restart);

        while (restart != 'y' && restart != 'n') {
          printf("\n Please input y or n ");
          scanf(" %c", &restart);
        }

        if (restart == 'y') {
          clear(grid);
          showGrid(grid);
          times = 0;
          done = false;
        } else if (restart == 'n') {
          done = true;
        }
      }
    } else {
      printf("\n Game end! ");
      printf("\n Do you wanna restart? (Y/n) ");
      scanf(" %c", &restart);

      while (restart != 'y' && restart != 'n') {
        printf("\n Please input y or n ");
        scanf(" %c", &restart);
      }

      if (restart == 'y') {
        clear(grid);
        showGrid(grid);
        times = 0;
        done = false;
      } else if (restart == 'n') {
        done = true;
      }
    }
  } while (!done);
  return 0;
}

...

READ ALL

MySQL导入sql文件

备份数据库的时候多是备份为sql后缀的文件,因此导入sql文件也是恢复数据的必会方法。

有两种方法导入sql文件

第一种、直接在命令下敲

mysql -u root -p database_name < /mysql/data.sql
  • database_name 数据库名
  • data.sql 写绝对路径或相对当前路径下

第二种、登录MySQL后操作

mysql> source /mysql/data.sql;
  • data.sql 文件最好写绝对路径

其它方法

可以通过phpmyadmin、SQLyog等数据库管理软件工具导入

...

READ ALL

本站迁回国内机房!

记得今年春我因忍受不了美国VPS的乌龟速度转投口碑比较好的Linode东京机房。当然,在我决定购买Linode之前在网上进行了大量的搜索比对。当时心里想的是找一个可以稍微贵点,但速度与稳定性要好,一旦选好以后就不再折腾了,因为迁站一次实在很费精力。

关于选择Linode

full

经过一番搜索,发现Linode东京机房是国内最受欢迎的,有不少博文都大赞东京机房的神速。我当时没考虑使用国内的VPS,原因两点:一是国内的质量信不过(无论是售后,技术等等),二是感觉在国内几乎找不到xen的VPS(或者母机系统是Linux的)。于是购买了Linode以后仔细部署了很多安全与优化措施,当时觉得至少两三年不会再动了。

...

READ ALL

MySQL设置root密码

MySQL安装好了以后,默认只有root用户密码为空,这时候我们需要给root用户设置密码保证数据库操作安全,MySQL对于用户的权限与密码都存在mysql库中的user表,最终只要能操作user表,就能修改任何人的权限与密码

有两种方式设置root密码

第一种

/usr/local/mysql/bin/mysqladmin -u root password "123456"

第二种

update user set password=password('123456') where User='root';

...

READ ALL

安装imagick提示[imagick_class.lo] Error 1解决方法

安装imagick

[root@**]# tar -xzvf imagick-3.0.1.tgz
[root@**]# cd imagick-3.0.1
[root@**]# /usr/local/php/bin/phpize
[root@**]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
[root@**]# make

结果make的时候报错提示

[imagick_class.lo] Error 1

...

READ ALL