当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 终端操作的记录在哪里?
帖子发表于 : 2007-09-29 9:40 

注册: 2007-03-01 11:44
帖子: 86
送出感谢: 0 次
接收感谢: 0 次
安装好ubuntu后,首先与终端打交道,写了N个sudo apt-get。还好,通过方向键(↑),能够把所有的操作召唤回来,非常方便。那么,这些终端操作的记录在哪里呢? 我想把第一次键入的命令保留下来。



不会是通过方向键(↑),来实现我的目的吧。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-09-29 9:45 

注册: 2007-07-26 15:07
帖子: 256
送出感谢: 0 次
接收感谢: 0 次
~/.bash_history


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-09-29 9:48 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
我是在想,同时开了N个终端的时候,怎么记的?


_________________
关注我的blog: ε==3


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-09-29 9:50 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
http://forum.ubuntu.org.cn/viewtopic.ph ... highlight=


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-09-29 10:07 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
ee干嘛哦?弄个不相关的链接...


_________________
关注我的blog: ε==3


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-09-29 10:09 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
bones7456 写道:
我是在想,同时开了N个终端的时候,怎么记的?


根据退出的顺序
每退出一个shell 就记录那个shell下的命令

代码:
static int
history_do_write (filename, nelements, overwrite)
     const char *filename;
     int nelements, overwrite;
{
  register int i;
  char *output;
  int file, mode, rv;
#ifdef HISTORY_USE_MMAP
  size_t cursize;

  mode = overwrite ? O_RDWR|O_CREAT|O_TRUNC|O_BINARY : O_RDWR|O_APPEND|O_BINARY;
#else
  mode = overwrite ? O_WRONLY|O_CREAT|O_TRUNC|O_BINARY : O_WRONLY|O_APPEND|O_BINARY;
#endif
  output = history_filename (filename);
  rv = 0;

  if ((file = open (output, mode, 0600)) == -1)
    {
      FREE (output);
      return (errno);
    }

#ifdef HISTORY_USE_MMAP
  cursize = overwrite ? 0 : lseek (file, 0, SEEK_END);
#endif

  if (nelements > history_length)
    nelements = history_length;

  /* Build a buffer of all the lines to write, and write them in one syscall.
     Suggested by Peter Ho (peter@robosts.oxford.ac.uk). */
  {
    HIST_ENTRY **the_history;   /* local */
    register int j;
    int buffer_size;
    char *buffer;

    the_history = history_list ();
    /* Calculate the total number of bytes to write. */
    for (buffer_size = 0, i = history_length - nelements; i < history_length; i++)
#if 0
      buffer_size += 2 + HISTENT_BYTES (the_history[i]);
#else
      {
    if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0])
      buffer_size += strlen (the_history[i]->timestamp) + 1;
    buffer_size += strlen (the_history[i]->line) + 1;
      }
#endif

    /* Allocate the buffer, and fill it. */
#ifdef HISTORY_USE_MMAP
    if (ftruncate (file, buffer_size+cursize) == -1)
      goto mmap_error;
    buffer = (char *)mmap (0, buffer_size, PROT_READ|PROT_WRITE, MAP_WFLAGS, file, cursize);
    if ((void *)buffer == MAP_FAILED)
      {
mmap_error:
    rv = errno;
    FREE (output);
    close (file);
    return rv;
      }
#else
    buffer = (char *)malloc (buffer_size);
    if (buffer == 0)
     {
        rv = errno;
    FREE (output);
    close (file);
    return rv;
      }
#endif

    for (j = 0, i = history_length - nelements; i < history_length; i++)
      {
    if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0])
      {
        strcpy (buffer + j, the_history[i]->timestamp);
        j += strlen (the_history[i]->timestamp);
        buffer[j++] = '\n';
      }
    strcpy (buffer + j, the_history[i]->line);
    j += strlen (the_history[i]->line);
    buffer[j++] = '\n';
      }

#ifdef HISTORY_USE_MMAP
    if (msync (buffer, buffer_size, 0) != 0 || munmap (buffer, buffer_size) != 0)
      rv = errno;
#else
    if (write (file, buffer, buffer_size) < 0)
      rv = errno;
    free (buffer);
#endif
  }

  close (file);
 FREE (output);

  return (rv);
}


_________________
目前负债150多万


页首
 用户资料  
 
7 楼 
 文章标题 : less .bash_history 能看到自己的操作历史
帖子发表于 : 2007-09-30 18:06 

注册: 2007-03-01 11:44
帖子: 86
送出感谢: 0 次
接收感谢: 0 次
:D :D :D :D


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-09-30 18:09 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
xhy 写道:
bones7456 写道:
我是在想,同时开了N个终端的时候,怎么记的?


根据退出的顺序
每退出一个shell 就记录那个shell下的命令

代码:
static int
history_do_write (filename, nelements, overwrite)
     const char *filename;
     int nelements, overwrite;
{
  register int i;
  char *output;
  int file, mode, rv;
#ifdef HISTORY_USE_MMAP
  size_t cursize;

  mode = overwrite ? O_RDWR|O_CREAT|O_TRUNC|O_BINARY : O_RDWR|O_APPEND|O_BINARY;
#else
  mode = overwrite ? O_WRONLY|O_CREAT|O_TRUNC|O_BINARY : O_WRONLY|O_APPEND|O_BINARY;
#endif
  output = history_filename (filename);
  rv = 0;

  if ((file = open (output, mode, 0600)) == -1)
    {
      FREE (output);
      return (errno);
    }

#ifdef HISTORY_USE_MMAP
  cursize = overwrite ? 0 : lseek (file, 0, SEEK_END);
#endif

  if (nelements > history_length)
    nelements = history_length;

  /* Build a buffer of all the lines to write, and write them in one syscall.
     Suggested by Peter Ho (peter@robosts.oxford.ac.uk). */
  {
    HIST_ENTRY **the_history;   /* local */
    register int j;
    int buffer_size;
    char *buffer;

    the_history = history_list ();
    /* Calculate the total number of bytes to write. */
    for (buffer_size = 0, i = history_length - nelements; i < history_length; i++)
#if 0
      buffer_size += 2 + HISTENT_BYTES (the_history[i]);
#else
      {
    if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0])
      buffer_size += strlen (the_history[i]->timestamp) + 1;
    buffer_size += strlen (the_history[i]->line) + 1;
      }
#endif

    /* Allocate the buffer, and fill it. */
#ifdef HISTORY_USE_MMAP
    if (ftruncate (file, buffer_size+cursize) == -1)
      goto mmap_error;
    buffer = (char *)mmap (0, buffer_size, PROT_READ|PROT_WRITE, MAP_WFLAGS, file, cursize);
    if ((void *)buffer == MAP_FAILED)
      {
mmap_error:
    rv = errno;
    FREE (output);
    close (file);
    return rv;
      }
#else
    buffer = (char *)malloc (buffer_size);
    if (buffer == 0)
     {
        rv = errno;
    FREE (output);
    close (file);
    return rv;
      }
#endif

    for (j = 0, i = history_length - nelements; i < history_length; i++)
      {
    if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0])
      {
        strcpy (buffer + j, the_history[i]->timestamp);
        j += strlen (the_history[i]->timestamp);
        buffer[j++] = '\n';
      }
    strcpy (buffer + j, the_history[i]->line);
    j += strlen (the_history[i]->line);
    buffer[j++] = '\n';
      }

#ifdef HISTORY_USE_MMAP
    if (msync (buffer, buffer_size, 0) != 0 || munmap (buffer, buffer_size) != 0)
      rv = errno;
#else
    if (write (file, buffer, buffer_size) < 0)
      rv = errno;
    free (buffer);
#endif
  }

  close (file);
 FREE (output);

  return (rv);
}


是追加模式?.. 不会覆盖掉其他shell写的?


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-09-30 19:08 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
追加模式不会覆盖的
如果不是追加模式 就要使用文件锁了

当前文件长度记录在V表中 每个文件的V节点在内核中只有一份
追加模式打开文件 每次写的时候都会把文件表中的偏移量设置为V节点中记录的数值
磁盘IO的write 当数据量不是太大的时候 一般可以认为是原子操作完成


_________________
目前负债150多万


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-09-30 19:37 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
我上面那帖子里面就有这设置的啊。


_________________
● 鸣学


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 终端操作的记录在哪里?
帖子发表于 : 2012-01-15 21:51 

注册: 2012-01-15 21:48
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
我不知道别的版本在哪,ubuntu11.10是在用户的home中。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 终端操作的记录在哪里?
帖子发表于 : 2012-01-15 22:30 
头像

注册: 2008-04-26 12:41
帖子: 10971
送出感谢: 11
接收感谢: 38
:em09


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译