Linux的常用用法

Linux 的常用用法#

1. 永久修改PATH变量##

  • 直接在shell中修改PATH变量

      jackson@jackson-virtual-machine:~/bin
      $PATH="$PATH:/home/jackson/bin"
    

    但是这种修改只对当前的会话有效,退出或者注销系统都会失效

  • 修改/etc/profile文件

    添加你想要添加的PATH路径

  • 修改~/.bash_profile文件

    添加你想要添加的PATH路径

    ps: /etc/profile是每个用户登录时都会运行的环境变量设置,~/.bash_profile是只针对当前用户有效。

2. 修改linux的提示符PS1##

  • 为什么叫PS1,主要是 Prompt Sign 提示符号的简写。

    $ echo $PS1
    [u@h W]$
    

    可以在~/.bashrc中修改变量,也可以/etc/bashrc中修改

    ps: ~/.bashrc是对当前用户有效,/etc/bashrc是对所有用户有效。

  • PS1变量的命名规则:

    d: 显示日期。格式是 Weekday Month Date, eg: Mon Jan 19
    H: 显示完整的主机名。
    h: 显示主机名的第一个名字。
    : 显示时间, 24小时制
    T: 显示时间, 12小时制
    u: 当前使用者的账号名称
    v: 当前使用的BASH版本
    w: 完整的工作目录。home目录会用~替代
    W: 利用basename获取当前工作的目录名称,所以会获取最后一个目录名。
    $: 提示操作符,root的时候为 #,非root为$

  • PS2PS3PS4的比较

    (1)PS2: 在shell中输入长命令的时候,可以在末尾加是其分行显示。

    $ echo "hello" 
    > "world"
    hello world
    

    默认的情况下,换行提示符是,这个换行提示符就是由PS2定义的。

    $ PS2="-->"
    
    $ echo "hello" 
    -->"world"
    hello world
    

    (2)PS3: Shell脚本中使用select时的提示符

    $ cat test.sh 
    select i in a b exit
    do
    	case $i in 
    		a) echo "Apple";;
    		b) echo "Banana";;
    		exit) exit;;
    	esac
    done
    
    $ sh test.sh 
    1) a
    2) b
    3) exit
    #? 
    

    其中这里的#?就是由PS3定义的

    $ export PS3="Select one option(1-3):"
    
    $ sh test.sh 
    1) a
    2) b
    3) exit
    Select one option(1-3):
    

    (3)PS4: “set -x"用来修改跟踪输出的前缀

    $ echo $PS4
    +
    
    $ echo "hello world"
    +echo 'hello world'
    hello world
    
    $ PS4="-->"
    
    $ echo "hello world"
    -->echo 'hello world'
    hello world
    

    可以在脚本中,将PS4定义为[$0.$LINENO],其中$0是程序的名字,$LINENO是行号。

    $ cat test.sh
    PS4='[$0_$LINENO]'
    set -x
    echo "hello"
    echo "world"
    set +x
    
    $ sh test.sh 
    [test.sh_3]echo hello
    hello
    [test.sh_4]echo world
    world
    [test.sh_5]set +x
    

3. Linux中修改hostname##

  • 怎么看hostname

(1) hostname命令

$ hostname

(2)看proc文件系统

$ cat /proc/sys/kernel/hostname
  • 修改hostname

(1) 通过hostname命令(暂时)

$ hostname newname

执行完后,通过上面看hostname的两种方式,发现hostname已经修改过来了。
但是,机器重启后又会回到以前的hostname。所以这种修改hostname的方式是暂时的。

(2)永久的修改hostname

The host name is usually set once at system startup in /etc/rc.d/rc.inet1 or /etc/init.d/boot (normally by reading the contents of a file which contains the host name, e.g. /etc/hostname).

可见hostname是在开机的时候由开机启动脚本,读取/etc/hostname里的信息,注意,redhat系统的机器中没有/etc/hostname这个文件,是读取/etc/sysconfig/network,因此永久改变hostname,只需要修改这配置文件就好了。

$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=oldname
NETWORKING_IPV6=no
PEERNTP=no
GATEWAY=x.x.x.x
  • hostname/etc/hosts 的关系

两者常常让人会混淆,以为改hostname需要去修改/etc/hosts文件,其实不然。hosts文件提供的相当于dns解析的服务,以前机器比较少,单个hosts文件足以存放所有联网计算机的ip hostname映射关系,随着计算机越来越多,就渐渐产生了分布式的dns服务。

在dns域名解析的时候,会首先查询/etc/hosts文件,看里面是否有相应的记录。/etc/hosts的文件格式为 ip hostname alias

4.'sudo echo xx >'的权限不够##

$ ll test.sh 
-rw-r--r-- 1 root root 46 Jan 23 18:13 test.sh

在非root用户下对其操作如下:

$ sudo echo "exit" > test.sh 
bash: test.sh: Permission denied

这是因为重定向符号 “>” 也是 bash 的命令。sudo 只是让 echo 命令具有了 root 权限

解决方案有:

(1) 通过sh -c将执行命令作为一个字符串输入

sudo sh -c "echo "exit" > test.sh"

(2) 通过tee

sudo echo "exit" | tee test.sh

5. 通过shell脚本,切换当前目录##

http://www.2cto.com/os/201107/96714.html

原文地址:https://www.cnblogs.com/zk47/p/4709146.html