0%

id 我也是有身份…证的人

id命令用于显示用户的以及其所属群组的ID。

官方定义为:

id - print real and effective user and group IDs

语法

1
$ id [OPTION]... [USER]

参数说明

  • -g, --group:仅仅显示组的ID
  • -G, --groups:显示所有组的IDs
  • -u, --user:打印用户的ID

默认使用

显示当前用户信息

1
2
$ id 
uid=1000(user) gid=1000(user) groups=1000(user),980(data),1006(monitor)

可以看到用户user的ID及组ID均为1000,该用户还属于data和monitor组。

显示用户群组的ID

1
2
$ id -g
1000

仅显示用户组的ID

time - 时光总是催人老

.. note::
林花谢了春红,太匆匆。无奈朝来寒雨晚来风。

  • 李煜《相见欢·林花谢了春红》

Linux time命令的用途,在于测量指定命令消耗的时间。

最常用的在于大概评估一个程序的运行时间。

这个命令很容易给人的印象是与date混淆起来

官方定义为:

time - time a simple command or give resource usage

可以给出包括系统的粗略时间。

语法

1
$ time [options] command [arguments...]

参数

​ - 可以认为没有参数

示例

会显示程序或命令执行的消耗时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ time ls /var
account crash games lib log ......

real 0m0.014s
user 0m0.003s
sys 0m0.010s


$ time ps -aux
root 295490 0.0 0.0 0 0 ? S Feb20 0:10 [ldlm_cb00_019
root 297717 0.0 0.0 0 0 ? S< Jan29 0:04 [kworker/58:1H
root 304801 0.0 0.0 0 0 ? S Mar19 0:00 [kworker/1:1]
root 311110 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/66:0]
root 313146 0.0 0.0 0 0 ? S Mar20 0:01 [kworker/73:2]
root 313461 0.0 0.0 0 0 ? S< Jan29 0:00 [kworker/44:2H
root 313914 0.0 0.0 0 0 ? S Feb21 0:10 [kworker/9:2]
root 314118 0.0 0.0 0 0 ? S Feb21 3:34 [kworker/18:1]
root 315801 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/79:2]

real 0m0.180s
user 0m0.019s
sys 0m0.114

唯一需要留意的是上面的三个含义:

  1. real : 程序从开始调用到最后终止之间经过的实时时间
  2. user : 程序本身,以及它所调用的库中的子例程使用的CPU 时间
  3. sys : 程序直接或间接调用的系统调用执行的CPU 时间

Linux的 time 命令

Linux time命令的用途,在于测量指定命令消耗的时间。

最常用的在于大概评估一个程序的运行时间。key

这个命令很容易给人的印象是与date混淆起来

官方定义为:

time - time a simple command or give resource usage

可以给出包括系统的粗略时间。

语法

1
$ time [options] command [arguments...]

参数

​ - 可以认为没有参数

one 示例

会显示程序或命令执行的消耗时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ time ls /var
account crash games lib log ......

real 0m0.014s
user 0m0.003s
sys 0m0.010s

#=====================================

$ time ps -aux
root 295490 0.0 0.0 0 0 ? S Feb20 0:10 [ldlm_cb00_019
root 297717 0.0 0.0 0 0 ? S< Jan29 0:04 [kworker/58:1H
root 304801 0.0 0.0 0 0 ? S Mar19 0:00 [kworker/1:1]
root 311110 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/66:0]
root 313146 0.0 0.0 0 0 ? S Mar20 0:01 [kworker/73:2]
root 313461 0.0 0.0 0 0 ? S< Jan29 0:00 [kworker/44:2H
root 313914 0.0 0.0 0 0 ? S Feb21 0:10 [kworker/9:2]
root 314118 0.0 0.0 0 0 ? S Feb21 3:34 [kworker/18:1]
root 315801 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/79:2]

real 0m0.180s
user 0m0.019s
sys 0m0.114

唯一需要留意的是上面的三个含义:

  1. real : 程序从开始调用到最后终止之间经过的实时时间
  2. user : 程序本身,以及它所调用的库中的子例程使用的CPU 时间
  3. sys : 程序直接或间接调用的系统调用执行的CPU 时间

雁过留痕的 history

.. _linux_history_beginner:

.. note::
雁过留痕,人过留名。

  • 晏殊 《浣溪沙》

history命令用于显示用户以前执行过的历史命令,并且能对历史命令进行追加和删除等操作。

如果你经常使用Linux命令,那么使用history命令可以有效地提升你的效率。

语法比较简单:

1
$ history [OPTIONS] [..]

常用参数:

  • -a 将当前shell会话的历史命令追加到命令历史文件中,命令历史文件是保存历史命令的配置文件
  • -c 清空当前历史命令列表
  • -d 删除历史命令列表中指定序号的命令
  • -n 从命令历史文件中读取本次Shell会话开始时没有读取的历史命令

显示所有的历史命令

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
$ history

1 sudo apt get update
2 sudo apt update
3 sudo apt upgrade
4 sudo apt install vim
5 ls
6 pwd
7 cd
8 ls
9 sudo apt install vim
10 sudo apt search pgplot
11 bash go.sh
12 sudo apt install zsh
13 bash down.sh
14 exit
15 echo $PS1
16 bash
17 exit
18 sh test.sh
19 bash
20 exit
21 rsync -rv --progress user@192.168.1.123:~/data1/ .
22 rsync -rv --progress user@192.168.1.123:~/src/ .
......

列出最近的几条命令

history后面跟上数字,就可以列出最近的几条命令:

1
2
3
4
$ history 3
8540 pwd
8541 echo $PATH
8542 git status

删除部分命令

可以通过-d参数来删除某一条或者某些历史命令,支持正则表达式

1
2
3
4
5
# 删除第35条历史命令
$ history -d 35

# 删除第31到39条历史命令
$ histor -d 3{1..9}

删除全部命令

如果登陆某些调试机器,后面将不在使用,考虑到安全性,可以删除操作过的所有历史,通过-c参数,即clear的意思。

1
$ history -c

此时将没有任何历史操作。

炫技 - 如何获取使用的命令及频率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort –nr

967 ls
507 cd
199 vim
199 python
165 cp
152 less
105 mv
95 rm
94 ll
90 echo
85 bash
72 cat
66 apt
59 pwd
51 mkdir
...

history命令 – 显示与操纵历史命令

history命令用于显示用户以前执行过的历史命令,并且能对历史命令进行追加和删除等操作。

如果你经常使用Linux命令,那么使用history命令可以有效地提升你的效率。

语法格式: history [参数] [目录]

常用参数:

-a 将当前shell会话的历史命令追加到命令历史文件中,命令历史文件是保存历史命令的配置文件
-c 清空当前历史命令列表
-d 删除历史命令列表中指定序号的命令
-n 从命令历史文件中读取本次Shell会话开始时没有读取的历史命令
-r 读取命令历史文件到当前的Shell历史命令内存缓冲区
-s 将指定的命令作为单独的条目加入命令历史内存缓冲区。在执行添加之前先删除命令历史内存缓冲区中最后一条命令
-w 把当前的shell历史命令内存缓冲区的内容写入命令历史文件

参考实例

显示最近的10条命令:

1
[root@linuxcool ~]# history 10  

将本次登录的命令写入历史文件中:

1
[root@linuxcool ~]# history -w

将命令历史文件中的内容读入到目前shell的history记忆中 :

1
[root@linuxcool ~]# history -r  

将当前Shell会话的历史命令追加到命令历史文件中:

1
[root@linuxcool ~]# history -a  

清空当前历史命令列表:

1
[root@linuxcool ~]# history -c 

使用HISTCONTROL来消除命令历史中的连续重复条目

在下面的例子中pwd被输入了三次,当你使用history的时候,你会看到这三条命令连续出现。设置HISTCONTROLignoredups,来消除重复命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# pwd

# pwd

# pwd

# history | tail -4

44 pwd

45 pwd

46 pwd

47 history | tail -4

[注: 上面pwd被执行了三次之后,历史中有三条pwd命令]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# export HISTCONTROL=ignoredups

# pwd

# pwd

# pwd

# history | tail -3

56 export HISTCONTROL=ignoredups

57 pwd

58 history | tail -4 [注:即使上面pwd被执行了三次,历史中也只有一条pwd命令]

用HISTIGNORE让history在存储时忽略某些指令

有时你不想在记录里看到诸如pwd,ls之类的基本指令,可以用HISTIGNORE忽略这些指令。

注意在HISTIGNORE中添加ls,只忽略“ls”不忽略ls –l。一定要准确的写出要忽略的的指令。

1
# export HISTIGNORE=”pwd:ls:ls –ltr:”

先停住世界 - halt

.. _linux_halt_beginner:

.. note::
一曲新词酒一杯,去年天气旧亭台。
宋 晏殊《浣溪沙》

halt 字面是“停机/挂起”,历史上偏“停掉操作系统调度”,是否断电因实现而异。今天多数发行版上,你随口说的关机,更常敲的是 poweroff;重启则是 reboot

三者参数高度同源,细节与对照表见主文 :ref:linux_reboot_beginner。本篇只把 halt 自己的日常用法说清。

halt 的官方定义为:

halt, poweroff, reboot - Halt, power-off or reboot the machine

命令格式

1
$ halt [选项]
1
$ sudo halt

停机与关机

不带花活时,halt 请求系统停下来。若你明确要断电,更直观的是:

1
$ sudo poweroff

或:

1
$ sudo halt --poweroff

能看懂即可,日常仍建议直接 poweroff,少记一套别名心智。

与 reboot、poweroff 怎么记

意图 优先命令
重启 reboot
关机断电 poweroff
停机(偏历史/脚本) halt

强制、跳过 sync、不发 wall 等危险开关,与主文相同——非必要勿用。多用户环境优先 shutdown,好让其他人有个心理准备。

按下电源键之前 - poweroff

.. _linux_poweroff_beginner:

.. note::
夕阳无限好,只是近黄昏。
唐 李商隐《登乐游原》

要让机器真正断电关机,口语里常说 poweroff。它和 reboothalt 同属一族,参数大体互通;日常习惯是:关机用 poweroff,重启用 reboot,各司其职,少踩混用的坑。

更完整的参数说明与三者对照,见主文 :ref:linux_reboot_beginner

poweroff 的官方定义为:

halt, poweroff, reboot - Halt, power-off or reboot the machine

命令格式

1
$ poweroff [选项]

无特殊选项时,就是请求系统关机断电。通常需要 root 或相应权限:

1
$ sudo poweroff

立即关机

1
$ sudo poweroff

等价思路也可用 shutdown(适合定时、广播通知),详见 :ref:linux_shutdown_beginner

强制要谨慎

1
$ sudo poweroff -f

-f / --force 会走更强硬的路径,可能跳过部分温柔清理。不是救急就别用;多用户机器上,优先走正常关机,好让别人收到 wall 通知、文件系统有机会 sync。

记住:poweroff 目标是断电关机;若你其实只想重启,请用 reboot,别靠给 poweroff--reboot 玩概念游戏。

一键重启 - reboot

.. _linux_reboot_beginner:

.. note::
世事漫随流水,算来一梦浮生。
南唐 李煜《乌夜啼·昨夜风兼雨》

机器卡死、内核升级、改完要生效的配置——最后一步往往是重启。rebootpoweroffhalt 同属一族,参数大半互通;日常记法很简单:重启用 reboot,关机断电用 poweroffhalt 偏停机语义,细节见各自短文。

定时关机、给所有登录用户广播一句「赶紧存盘」,更适合 :ref:linux_shutdown_beginner

官方定义为:

halt, poweroff, reboot - Halt, power-off or reboot the machine

命令格式

1
$ reboot [选项]

常用选项(三命令大体相同):

  • --reboot:重启(reboot 的本职)
  • -p, --poweroff:改为关机断电
  • --halt:改为停机
  • -f, --force:强制立刻执行(非救急勿用)
  • -n, --no-sync:不同步磁盘(很危险)
  • --no-wall:不向用户发警告(多用户不友好)

立即重启

1
$ sudo reboot

多数发行版上这就够了。需要 root 或相应权限。

和关机怎么分

1
2
3
$ sudo reboot      # 重启
$ sudo poweroff # 关机断电,见 :ref:`linux_poweroff_beginner`
$ sudo halt # 停机语义,见 :ref:`linux_halt_beginner`

也可以写出交叉含义,例如 reboot --poweroff,但读起来绕,不如直接敲目标命令。

强制重启要慎重

1
$ sudo reboot -f

-f 可能跳过部分温柔清理。文件系统来不及 sync、别人来不及收工时,代价不小。能正常 reboot 就别 -f

多用户机器上若还想先通知再动手,优先:

1
$ sudo shutdown -r +5 "五分钟后重启,请保存工作"

定时与广播细节见 :ref:linux_shutdown_beginner

约好时间再关机 - shutdown

.. _linux_shutdown_beginner:

.. note::
青山依旧在,几度夕阳红。
明 杨慎《临江仙·滚滚长江东逝水》

立刻断电可以 poweroff,立刻重启可以 reboot;若还要预约时间、顺手给所有登录用户甩一句 wall 提示,shutdown 更合适。机房里多人挂着会话时,它比闷头重启文明得多。

立刻重启/关机的短路径,见主文 :ref:linux_reboot_beginner 与 :ref:linux_poweroff_beginner

shutdown 的官方定义为:

shutdown - Halt, power-off or reboot the machine

命令格式

1
$ shutdown [选项] [时间] [警告文字...]

时间常见写法:

  • now:马上执行
  • +m:m 分钟后
  • hh:mm:今天的时钟时刻(部分实现按 24 小时制)

常用选项:

  • -H, --halt:停机
  • -P, --poweroff / -h:关机(常见默认)
  • -r, --reboot:重启
  • -k:只广播,不真关
  • -c:取消已经预约的关机(时间不是 now 时才有意义)
  • --no-wall:不发通知

立即关机

1
$ sudo shutdown -h now

十分钟后关机

1
2
3
$ sudo shutdown -h +10

$ sudo shutdown -h +10 "十分钟后关机,请立刻保存工作"

后面的字符串会作为警告发给登录用户。

指定时刻关机

1
$ sudo shutdown -h 17:30

提示文字请写清楚时间,别复制成「10 minutes」却填了 17:30——别人会按字面理解。

预约重启

1
2
$ sudo shutdown -r now
$ sudo shutdown -r +5 "五分钟后重启"

取消预约

若刚才设了定时关机、又改主意了:

1
$ sudo shutdown -c

只想演习通知、不动真格:

1
$ sudo shutdown -k +10 "演习:十分钟后本该关机"

MacOSX 上 安装及使用homebrew

Homebrew的安装与使用

Mac OS X是基于Unix的操作系统,可以安装大部分为Unix/Linux开发的软件。然而,如果只是以使用为目的,对每个软件都进行手工编译不是很方便,也不利于管理已安装的软件,于是出现了类似于Linux中APT、Yum等类似的软件包管理系统,其中最著名的有MacPorts、Fink、Homebrew等。

我曾经是MacPorts的使用者,但了解Homebrew之后,立即“弃暗投明”了。其实MacPorts也是一个很不错的解决方案,除了一个实在让我头疼的特性。MacPorts有个原则,对于软件包之间的依赖,都在MacPorts内部解决(/opt/local),无论系统本身是否包含了需要的库,都不会加以利用。这使得MacPorts过分的庞大臃肿,导致系统出现大量软件包的冗余,占用不小的磁盘空间,同时稍大型一点的软件编译时间都会难以忍受。

而Homebrew的原则恰恰相反,它尽可能地利用系统自带的各种库,使得软件包的编译时间大为缩短;同时由于几乎不会造成冗余,软件包的管理也清晰、灵活了许多。Homebrew的另一个特点是使用Ruby定义软件包安装配置(叫做formula),定制非常简单。

至于Fink,由于并未安装使用过,不加讨论。(从互联网上的消息看,Fink由于维护人手的问题,软件包的更新不是很及时。)于我而言,Homebrew已经足够完善,除非发现重大的问题或者出现新的具有突破性的竞争对手,否则我没兴趣折腾别的软件包管理系统了。

下面说说Homebrew的安装与使用。

Homebrew的安装

首先确保你的系统满足如下要求:

  1.  基于Intel CPU
    
  2.  操作系统为Mac OS X 10.5 Leopard或更高版本
    
  3.  已安装版本管理工具Git(Mac OS X 10.7 Lion已经预安装)
    
  4.  已安装Xcode开发工具1
    
  5.  已安装Java Developer Update2
    

注1:Xcode 4.3中,命令行编译工具是可选安装,需要在Preferences > Downloads中激活。
注2:可选,Homebrew本身不依赖于Java,只有部分软件包的安装需要Java支持。

Homebrew的安装非常简单,在终端程序中输入以下命令即可。

1
$ ruby -e “$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)”

由于Homebrew的安装地址可能变化,请到官方网站查看最新的安装方法。
安装过程需要输入root口令。

Homebrew的使用

Homebrew的可执行命令是brew,其基本使用方法如下(以wget为例)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 查找软件包
$ brew search wget
# 安装软件包
$ brew install wget
# 列出已安装的软件包
$ brew list
# 删除软件包
$ brew remove wget
# 查看软件包信息
$ brew info wget
# 列出软件包的依赖关系
$ brew deps wget
# 更新brew
$ brew update
# 列出过时的软件包(已安装但不是最新版本)
$ brew outdated
# 更新过时的软件包(全部或指定)
$ brew upgrade 或 brew upgrade wget
# 定制自己的软件包

如果自己需要的软件包并不能在Homebrew中找到,怎么办呢,毕竟Homebrew是一个新生项目,不可能满足所有人的需求。当然,我们可以自行编译安装,但手工安装的软件包游离于Homebrew之外,管理起来不是很方便。

前文说过,Homebrew使用Ruby实现的软件包配置非常方便,下面简单谈一谈软件包的定制(假定软件包名称是bar,来自foo站点)。

  1.  首先找到待安装软件的源码下载地址
    

http://foo.com/bar-1.0.tgz
2. 建立自己的formula
brew create http://foo.com/bar-1.0.tgz
3. 编辑formula,上一步建立成功后,Homebrew会自动打开新建的formula进行编辑,也可用如下命令打开formula进行编辑。
brew edit bar
Homebrew自动建立的formula已经包含了基本的configure和make install命令,对于大部分软件,不需要进行修改,退出编辑即可。
4. 输入以下命令安装自定义的软件包
brew install bar
关于Homebrew的其它功能,比如将自定义软件包提交到官方发布等,请参考Homebrew项目的主页及其Man Page。你将发现Homebrew不仅是“家酿”,更是“佳酿”。

refer from : http://linfan.info/blog/2012/02/25/homebrew-installation-and-usage/