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: 显示日期。格式是
\H: 显示完整的主机名。\h: 显示主机名的第一个名字。\t: 显示时间, 24小时制\T: 显示时间, 12小时制\u: 当前使用者的账号名称\v: 当前使用的BASH版本\w: 完整的工作目录。home目录会用Weekday Month Date
, eg:Mon Jan 19
~
替代\W: 利用basename获取当前工作的目录名称,所以会获取最后一个目录名。$: 提示操作符,root的时候为#
,非root为$
和
PS2
,PS3
,PS4
的比较(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 exitdo case $i in a) echo "Apple";; b) echo "Banana";; exit) exit;; esacdone$ sh test.sh 1) a2) b3) exit#?
其中这里的
#?
就是由PS3
定义的$ export PS3="Select one option(1-3):"$ sh test.sh 1) a2) b3) exitSelect 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.shPS4='[$0_$LINENO]'set -xecho "hello"echo "world"set +x$ sh test.sh [test.sh_3]echo hellohello[test.sh_4]echo worldworld[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/networkNETWORKING=yesHOSTNAME=oldnameNETWORKING_IPV6=noPEERNTP=noGATEWAY=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