常见Linux目录名称
目录
用途
/
虚拟目录的根目录。通常不会在这里存储文件
/bin
二进制目录,存放许多用户级的GNU工具
/boot
启动目录,存放启动文件
/dev
设备目录,Linux在这里创建设备节点
/etc
系统配置文件目录
/home
主目录,Linux在这里创建用户目录
/lib
库目录,存放系统和应用程序的库文件
/media
媒体目录,可移动媒体设备的常用挂载点
/mnt
挂载目录,另一个可移动媒体设备的常用挂载点
/opt
可选目录,常用于存放第三方软件包和数据文件
/proc
进程目录,存放现有硬件及当前进程的相关信息
/root
root用户的主目录
/sbin
系统二进制目录,存放许多GNU管理员级工具
/run
运行目录,存放系统运作时的运行时数据
/srv
服务目录,存放本地服务的相关文件
/sys
系统目录,存放系统硬件信息的相关文件
/tmp
临时目录,可以在该目录中创建和删除临时工作文件
/usr
用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里
/var
可变目录,用以存放经常变化的文件,比如日志文件
基本的命令
ls
命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:
- 问号(
?
)代表一个字符; - 星号(
*
)代表零个或多个字符
除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。
$ ls -l f[a-i]ll
另外,可以使用感叹号(!)将不需要的内容排除在外。
$ ls -l f[!a]ll
只使用ls -l
命令,并不会显示访问时间。这是因为默认显示的是修改时间。要想查看文件的访问时间,需要加入另外一个参数:--time=atime
。有了这个参数,就能够显示出已经更改过的文件访问时间。
硬链接的语法:ln filename [linkname ]
软链接的语法:ln -s filename [linkname]
同时创建多个目录和子目录,需要加入-p
参数
mkdir -p New_Dir/Sub_Dir/Under_Dir
删除多个目录和文件
rm -ri My_Dir
file
命令是一个随手可得的便捷工具。它能够探测文件的内部,并决定文件是什么类型的
file my_file
cat:-n
参数会给所有的行加上行号。
如果只想给有文本的行加上行号,可以用-b
参数。
如果不想让制表符出现,可以用-T
参数。
tail
命令中加入-n
参数来修改所显示的行数。在下面的例子中,通过加入-n 2
使tail
命令只显示文件的最后两行:
tail -n 2 log_file-f
参数是tail
命令的一个突出特性。它允许你在其他进程使用该文件时查看文件的内容。tail
命令会保持活动状态,并不断显示添加到文件中的内容。
ps 显示进程
top 实时显示进程信息
作为系统管理员,很重要的一个技能就是知道何时以及如何结束一个进程。有时进程挂起了,只需要动动手让进程重新运行或结束就行了。但有时,有的进程会耗尽CPU且不释放资源。在这两种情景下,你就需要能控制进程的命令。
系统管理员的另一个重要任务就是监测系统磁盘的使用情况。你要知道还有多少空间可留给你的应用程序。
Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂载(mounting)。
mount
命令会输出当前系统上挂载的设备列表。type
参数指定了磁盘被格式化的文件系统类型。Linux可以识别非常多的文件系统类型。如果是和Windows PC共用这些存储设备,通常得使用下列文件系统类型。
- vfat:Windows长文件系统。
- ntfs:Windows NT、XP、Vista以及Windows 7中广泛使用的高级文件系统。
- iso9660:标准CD-ROM文件系统。
大多数U盘和软盘会被格式化成vfat文件系统。而数据CD则必须使用iso9660文件系统类型。
后面两个参数定义了该存储设备的设备文件的位置以及挂载点在虚拟目录中的位置。比如说,手动将U盘/dev/sdb1挂载到/media/disk,可用下面的命令:
`mount -t vfat /dev/sdb1 /media/disk`
媒体设备挂载到了虚拟目录后,root用户就有了对该设备的所有访问权限,而其他用户的访问则会被限制。
从Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载。使用unmount命令
lsof
命令获得的进程信息
stat
命令获得文件的具体信息
df
命令可以让你很方便地查看所有已挂载磁盘的使用情况。
du
命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可用来快速判断系统上某个目录下是不是有超大文件。
下面是能让du
命令用起来更方便的几个命令行参数。
-c
:显示所有已列出文件总的大小。-h
:按用户易读的格式输出大小,即用K替代千字节,用M替代兆字节,用G替代吉字节。-s
:显示每个输出参数的总计。
sort
命令是对数据进行排序的。但是默认情况下,sort
命令会把数字当做字符来执行标准的字符排序,产生的输出可能根本就不是你要的。解决这个问题可用-n
参数,它会告诉sort
命令把数字识别成数字而不是字符,并且按值排序。
另一个常用的参数是-M
,按月排序。Linux的日志文件经常会在每行的起始位置有一个时间戳,用来表明事件是什么时候发生的。
sort -M file3
$ du -sh * | sort -nr
grep
命令用来查找
反向搜索 grep -v
加行数 grep -n
如果要指定多个匹配模式,可用-e
参数来指定每个模式。
grep -e t -e f file1
还可以用正则表达式:
grep [tf] file1
tar
命令用来归档
可以用下列命令来创建一个归档文件:
tar -cvf test.tar test/ test2/
上面的命令创建了名为test.tar的归档文件,含有test和test2目录内容
tar -tf test.tar
上面的命令列出tar文件test.tar的内容(但并不提取文件)
tar -xvf test.tar
上面的命令从tar文件test.tar中提取内容。如果tar文件是从一个目录结构创建的,那整个目录结构都会在当前目录下重新创建。
在bash shell中,环境变量分为两类:
- 全局变量
- 局部变量
要查看全局变量,可以使用env
或printenv
命令。
要显示个别环境变量的值,可以使用printenv
命令
printenv HOME
设置局部变量
$ my_variable=Hello World
设置数字类型的局部变量
let num1=1
创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。
$ my_variable="I am Global now"
$
$ export my_variable
$
$ echo $my_variable
删除环境变量
unset my_variable
添加用户
useradd -m test1
删除用户
userdel test1
修改账户usermod
-l
修改用户账户的登录名。-L
锁定账户,使用户无法登录。-p
修改账户的密码。-U
解除锁定,使用户能够登录。
修改密码passwd
chmod
命令用来改变文件和目录的安全性设置
chown
命令用来改变文件的属主chgrp
命令用来改变文件的默认属组。
yum
yum install
yum update
yum remove 只删除软件包而保留配置文件和数据文件
yum erase package_name 删除软件和它所有的文件
yum clean all 处理损坏的包关系
yum repolist 列出仓库yum
的仓库定义文件位于/etc/yum.repos.d
源码安装
tar -zxvf 1.tar.gz
./configure
为系统配置sysstat。它会检查你的Linux系统,确保它拥有合适的编译器能够编译源代码,另外还要具备正确的库依赖关系。make
命令来构建各种二进制文件。make
命令会编译源码,然后链接器会为这个包创建最终的可执行文件。make
步骤结束时,可运行的软件程序就会出现在目录下!然后用make
命令的install
选项。
vim编辑器有两种操作模式:
- 普通模式
- 插入模式
vim中有用来移动光标的命令。
h
:左移一个字符。j
:下移一行(文本中的下一行)。k
:上移一行(文本中的上一行)。l
:右移一个字符。PageDown
(或Ctrl+F):下翻一屏。PageUp
(或Ctrl+B):上翻一屏。G
:移到缓冲区的最后一行。_num_ G
:移动到缓冲区中的第_num
_行。gg
:移到缓冲区的第一行。q
:如果未修改缓冲区数据,退出。q!
:取消所有对缓冲区数据的修改并退出。w _filename_
:将文件保存到另一个文件中。wq
:将缓冲区数据保存到文件中并退出。
命令
描述
x
删除当前光标所在位置的字符
dd
删除当前光标所在行
dw
删除当前光标所在位置的单词
d$
删除当前光标所在位置至行尾的内容
J
删除当前光标所在行行尾的换行符(拼接行)
u
撤销前一编辑命令
a
在当前光标后追加数据
A
在当前光标所在行行尾追加数据
r _char_
用_char
_替换当前光标所在位置的单个字符
R _text_
用_text
_覆盖当前光标所在位置的数据,直到按下ESC键
复制粘贴
进入可视模式,应移动光标到要开始复制的位置,并按下v键。你会注意到光标所在位置的文本已经被高亮显示了。下一步,移动光标来覆盖你想要复制的文本(甚至可以向下移动几行来复制更多行的文本)。在移动光标时,vim会高亮显示复制区域的文本。在覆盖了要复制的文本后,按y键来激活复制命令。现在寄存器中已经有了要复制的文本,移动光标到你要放置的位置,使用p
命令来粘贴。
查找
按下斜线(/)键。光标会跑到消息行,然后vim会显示出斜线。在输入你要查找的文本后,按下回车键。
要继续查找同一个单词,按下斜线键,然后按回车键。或者使用n键,表示下一个(next)。
替换
替换命令的格式是::s/old/new/
:s/old/new/g
:一行命令替换所有old
。:_n_,_ms_/old/new/g
:替换行号n
和m
之间所有old
。:%s/old/new/g
:替换整个文件中的所有old
。:%s/old/new/gc
:替换整个文件中的所有old
,但在每次出现时提示。
shell脚本:
可以使用set来查看全剧变量
你可以在环境变量名称之前加上美元符($
)来使用这些环境变量。
echo HOME: $HOME
用户变量可以是任何由字母、数字或下划线组成的文本字符串,长度不超过20个。用户变量区分大小写
shell脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。把输出赋给变量之后,就可以随意在脚本中使用了
有两种方法可以将命令输出赋给变量:
- 反引号字符(
`
) $()
格式
#!/bin/bash
today=$(date +%y%m%d)
ls /usr/bin -al > log.$today
输入重定向符号是小于号(<):
command < inputfile
在shell脚本中有两种途径来进行数学运算。
expr 1 + 5
expr 5 \* 2
还可以用美元符和方括号($[ operation ]
)将数学表达式围起来。
var1=$[1 + 5]
对于浮点数,使用bc
var1=$(echo "scale=4; 3.44 / 5" | bc)
流程语句:
if test command
then
commands
elif command
then
commands
else
commands
fi
除了test以外
bash shell提供了另一种条件测试方法,无需在if-then
语句中声明test
命令。
if [ condition ] then commands fi
数值比较n1 -eq n2
检查n1
是否与n2
相等
n1 -ge n2
检查n1
是否大于或等于n2
n1 -gt n2
检查n1
是否大于n2
n1 -le n2
检查n1
是否小于或等于n2
n1 -lt n2
检查n1
是否小于n2
n1 -ne n2
检查n1
是否不等于n2
字符串比较str1 = str2
检查str1
是否和str2
相同
str1 != str2
检查str1
是否和str2
不同
str1 < str2
检查str1
是否比str2
小
str1 > str2
检查str1
是否比str2
大
-n str1
检查str1
的长度是否非0
-z str1
检查str1
的长度是否为0
-n
和-z
可以检查一个变量是否含有数据。
if [ -n $val1 ]
文件比较-d file
检查file
是否存在并是一个目录
-e file
检查file
是否存在
-f file
检查file
是否存在并是一个文件
-r file
检查file
是否存在并可读
-s file
检查file
是否存在并非空
-w file
检查file
是否存在并可写
-x file
检查file
是否存在并可执行
-O file
检查file
是否存在并属当前用户所有
-G file
检查file
是否存在并且默认组与当前用户相同
file1 -nt file2
检查file1
是否比file2
新
file1 -ot file2
检查file1
是否比file2
旧
双括号命令允许你在比较过程中使用高级数学表达式。test
命令只能在比较中使用简单的算术操作。双括号命令提供了更多的数学符号
val1=10
#
if (( $val1 ** 2 > 90 ))
then
(( val2 = $val1 ** 2 ))
echo "The square of $val1 is $val2"
fi
符号
描述
val++
后增
val--
后减
++val
先增
--val
先减
!
逻辑求反
~
位求反
**
幂运算
<<
左位移
>>
右位移
&
位布尔和
|
位布尔或
&&
逻辑和
||
逻辑或
双方括号命令提供了针对字符串比较的高级特性。双方括号命令的格式如下:
[[ expression ]]
双方括号里的_expression
_使用了test
命令中采用的标准字符串比较。但它提供了test
命令未提供的另一个特性——模式匹配(pattern matching)。
if [[ $USER == r* ]]
then
echo "Hello $USER"
else
echo "Sorry, I do not know you"
fi
case命令
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
case $USER in
rich | barbara)
echo "Welcome, $USER"
echo "Please enjoy your visit";;
testing)
echo "Special testing account";;
jessica)
echo "Do not forget to log off when you're done";;
*)
echo "Sorry, you are not allowed here";;
esac
for循环
for var in list
do
commands
done
for test in Alabama Alaska Arizona Arkansas California Colorado
do
echo The next state is $test
done
for file in /home/rich/test/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
factorial=1
for (( number = 1; number <= $1 ; number++ ))
do
factorial=$[ $factorial * $number ]
done
while语句
while test command
do
other commands
done
var1=10
while [ $var1 -gt 0 ]
do
echo $var1
var1=$[ $var1 - 1 ]
done
读取输入:位置参数变量是标准的数字:$0
是程序名,$1
是第一个参数,$2
是第二个参数,依次类推,直到第九个参数$9
。
$#统计输入了多少个参数
$*
和$@
变量可以用来轻松访问所有的参数。
read
命令从标准输入(键盘)或另一个文件描述符中接受输入。在收到输入后,read
命令会将数据放进一个变量。read
命令包含了-p
选项,允许你直接在read
命令行指定提示符。
read -p "Please enter your age: " age
days=$[ $age * 365 ]
echo "That makes you over $days days old! "
-t
选项指定了read
命令等待输入的秒数
if read -t 5 -p "Please enter your name: " name
-s
选项可以避免在read
命令中输入的数据出现在显示器上(实际上,数据会被显示,只是read
命令会将文本颜色设成跟背景色一样)
read -s -p "Enter your password: " pass
用read
命令来读取Linux系统上文件里保存的数据。每次调用read
命令,它都会从文件中读取一行文本。当文件中再没有内容时,read
命令会退出并返回非零退出状态码。
其中最难的部分是将文件中的数据传给read
命令。最常见的方法是对文件使用cat
命令,将结果通过管道直接传给含有read
命令的while
命令。
count=1
cat test | while read line
do
echo "Line $count: $line"
count=$[ $count + 1]
done
echo "Finished processing the file"
捕获脚本退出
trap "echo Goodbye..." EXIT
定义函数
function dbl {
read -p "Enter a value: " value
echo "doubling the value"
return $[ $value * 2 ]
}
dbl
function dbl {
read -p "Enter a value: " value
echo $[ $value * 2 ]
}
result=$(dbl)
输入参数的函数
#!/bin/bash
# passing parameters to a function
function addem {
if [ $# -eq 0 ] || [ $# -gt 2 ]
then
echo -1
elif [ $# -eq 1 ]
then
echo $[ $1 + $1 ]
else
echo $[ $1 + $2 ]
fi
}
echo -n "Adding 10 and 15: "
value=$(addem 10 15)
echo $value
函数中使用数组
#!/bin/bash
# array variable to function test
function testit {
local newarray
newarray=('echo "$@"')
echo "The new array value is: ${newarray[*]}"
}
myarray=(1 2 3 4 5)
echo "The original array is ${myarray[*]}"
testit ${myarray[*]}
在函数中引用其他函数。使用函数库的关键在于source
命令。source
命令会在当前shell上下文中执行命令,而不是创建一个新shell。有一个快捷的别名:. ./myfuncs
sed指令:可参考网页:https://www.cnblogs.com/ctaix...
sed编辑器会执行下列操作。
(1) 一次从输入中读取一行数据。
(2) 根据所提供的编辑器命令匹配数据。
(3) 按照命令修改流中的数据。
(4) 将新的数据输出到STDOUT
。
归档tar -zcf archive.tar.gz /home/*.* 2>/dev/null
df 命令主要用来检查文件系统上的可用空间。也可用于确认磁盘分区的构成以及数据的分配状况,还可以确认用于保存数据的文件系统有多少千兆字节,或是否有 NFS 安装区域等。
服务器是利用进程来处理数据的,而 ps 命令则可以被用来确认当前服务器上运行进程的状态。
free 命令适用于确认存储的使用状况。通过 ps 命令所得到的进程的信息,再结合磁盘、高速缓存和内存的使用情况,能很好地掌握服务器的运行状态,了解这是一个“重载”到什么程度的服务器。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。