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命令的用途,在于测量指定命令消耗的时间。

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

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

官方定义为:

time - time a simple command or give resource usage

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

语法

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

参数

​ - 可以认为没有参数

1⃣ 示例

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

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命令 – 显示与处理历史命令

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:”

Linux halt 命令

参考 Linux reboot 命令。

Linux poweroff 命令

参考 Linux reboot 命令。

Linux reboot/poweroff/halt 命令

.. note::

世事漫随流水,算来一梦浮生。

  • 李煜《乌夜啼·昨夜风兼雨》

Linux halt, poweroff, reboot 用来挂起、关机或者重启机器,成功后返回0。

这不是一个命令,这是三个命令,只不过三个命令的参数都是一致的。

官方定义为:

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

其实这三个命令都可以通过shutdown来执行,并且相对而言shutdown的参数还更多一些。

语法

使用方法如下:

1
2
3
4
5
$ halt [OPTIONS...]

$ poweroff [OPTIONS...]

$ reboot [OPTIONS...]

参数如下所示:

  • --halt 将机器挂起,三个命令均相同
  • -p, --poweroff 将机器关机,三个命令均相同
  • --reboot 将机器重启,三个命令均相同
  • -f, --force 立即执行挂起、关机和重启,一般对于force而言,除非万不得已,否则进来莫用
  • -n, --no-sync 在挂起、关机或重启前不对硬盘进行同步,这个很危险呀,进来不要用呀
  • --no-wall 在挂起、关机或重启前不发送警告信息,对于多用户不友好

立即关机

接下来的三个命令一致,都是将电脑关机,不过这个用法总归感觉怪怪的,所以还是分开各司其职比较好。比如关机还是poweroff,重启还是reboot吧。

1
2
3
4
5
$ halt --poweroff

$ poweroff --poweroff

$ reboot --poweroff

Linux shutdown 命令

.. note::

青山依旧在,几度夕阳红。

  • 杨慎《临江仙·滚滚长江东逝水》

Linux shutdown 命令可以用来挂起、关机或者重启设备,执行成功的话会返回0。

官方定义为:

shutdown - Halt, power-off or reboot the machine

语法

使用方法如下:

1
$ shutdown [OPTIONS...] [TIME] [WALL...]

第一个参数可能是一个时间字符串 (通常是 now),一般而言,后面可以跟上一个提示消息来通知登陆的用户系统马上进行的操作。

时间字符串的一般为hh:mm,表示经过多长时间进行关机,当然比较常用的为+m,也就是m分钟后执行操作。

参数如下所示:

  • -H, --halt 挂起机器
  • -P, --poweroff 关机(默认选项)
  • -r, --reboot 重启机器
  • -h 等效于–poweroff,出发专门指定 –halt选项
  • -k不进行挂起、关机或者重启,仅仅发送通知信息
  • --no-wall : 挂起、关机或者重启前,不发送信息
  • -c 取消当前正在进行的关机动作,前提是参数不是now

立即关机

1
$ shutdown -h now

十分钟后关机

1
2
3
4
$ shutdown -h 10

# 增加提示信息
$ shutdown -h 10 "The system will shutdown in 10 minutes, save your work immediately"

17:30关机

1
2
3
4
$ shutdown -h 17:30

# 增加提示信息
$ shutdown -h 10 "The system will shutdown in 17:30 , remember to save your work"

重新启动计算机

1
$ shutdown -r now

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/