linux基础学习笔记

man 命令获取标准的UNIX联机帮助
- 有八个部分,命令和实用程序;系统调用;库例程;专用文件(IO);文件格式;游戏;其他;专用的系统管理员命令
- apropos keyphrase 查找包含keyphrase的一个索引列表

% 符号: C Shell, $符号:Bourne Shell

命令都有很多参数,fileneme arguments directives,很多程序的命令参数可以组合,比如

$ ls -l -a
$ ls -la

文件名大小写敏感,可以包括大小写字母、数字、点、下划线、连字符等,但不能包括斜杠/,/用于路径中分隔目录。(注意点只是文件名中的一个字符,后续的字符不是扩展名)

根目录是/,文件的全名是从根目录开始的一条完整路径

$ pwd    #显示当前工作目录
$ cd ~   # ~代表主目录
$ printenv PATH  # PATH是系统搜索命令的路径目录列表,冒号分隔
/opt/Qt5.9.0/5.9/gcc_64/bin:/opt/Qt5.9.0/5.9/gcc_64/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/guoj/.local/bin:/home/guoj/bin

操作文件

  • echo 结合 > 重定向创建文本文件
  • cat 连接,concatenate,将一组文件连接起来,结合 > 重定向把文件连接的结果输出到文件
  • cat > newfile,会从终端直接读取输入,按下Ctrl+D终止输入,若文件存在,用>>
  • cp 源文件 目标文件,拷贝文件
  • mv 源文件 目标文件,移动文件,也可实现重命名
  • ls -la 列出目录中的文件 -文件 d目录
  • rm 删除指定的文件

操作目录

  • mkdir 创建新目录
  • rmdir 删除空目录,可以先用rm删除目录中的文件,否则有“Directory not empty”的提示
  • rm -r 递归地删去目录,包括该目录下的所有文件和目录
  • ls -F 可以将/挂接在目录上,*挂接在可执行文件上
  • cd 切换目录, .. 表示当前目录的父目录, ~ 表示当前用户的主目录/home/user

通配符

  • 星号 *,匹配零个或多个字符
  • 问好 ?,匹配任何单个字符
  • [selection],比如[0-9],[a-z]等表示一组连续的字符
    * 以.开头的文件,*匹配不了,也不必用*.*来匹配扩展名*

文件访问许可权

$ ls -lF
总用量 3456
-rw-rw-r--. 1 guoj guoj    1998 69 10:49 AUTHORS
drwxrwxr-x. 8 guoj guoj    4096 69 10:50 common/
-rwxrwxr-x. 1 guoj guoj   45003 69 10:49 config.guess*
-rw-rw-r--. 1 guoj guoj     866 69 10:49 config.h

-表示文件,d表示目录;文件拥有者访问权;所属用户组的访问权;其他所有人的访问权;

  • chown 更改文件拥有者
  • chgrp 更改文件的所属用户组
  • chmod 修改文件的权限 chmod who op perm files
    • who 修改谁的权限, u 用户, g 组, o 其他, a 全部,默认为a
    • op + 增加权限, - 限制权限, = 指定权限
    • perm r 读, w 写, x 执行
    • 比如: chmod ug+x test.txt
  • 对于目录,r 可以列出目录内容, w 可以在目录中增减文件,x 可以在目录中搜索文件。没有写访问权,但是可以修改目录中已存在的文件。

标准输入和输出

大多数命令从标准输入读数据(终端的键盘输入),将产生的数据写到标准输出(终端),错误发送到标准错误(终端)
- 标准输出重定向 >, >>
- 标准错误重定向 >&, Shell用1指向标准输出,2指向标准错误

$ cat foop >& errfile
$ cat foop > errfile 2>&1
$ cat foop > outfile 2> errfile   # 2和>之间没有空格
  • 标准输入 <

管道

将一个程序的输出连接到另一个程序的输入,过滤器,可以用这个机制先调试小程序,然后小程序组合起来完成大型任务。比如sample 从输入设备采集数据,fourier 读数据并作傅立叶变换,filter 从傅立叶变换中滤掉高频成份,plotfourier根据傅立叶变换产生波形。

$ sample | fourier | filter | plotfourier > output.plotfourier

控制程序执行

  • Ctrl+C 强制程序执行
  • ps -x命令, kill PID

前台和后台程序

  • 在终端执行命令前台执行时,在当前程序未结束之前无法做其他工作
  • 在命令末尾加&,在后台运行程序
$ emacs   #但是当前终端不能继续输入命令,Ctrl+C 强制停止执行
^C $ emacs & #切换到后台指向emacs,[作业号] PID
[1] 13076
$ jobs
[1]+  运行中               emacs &
$ fg %1  #fg %作业号 从后台切换到前台
emacs
^Z
[1]+  已停止               emacs      #Ctril+D 挂起程序,但不终止
$ bg     #把挂起的程序切换到后台指向
[1]+ emacs &
$ kill %1  #kill %作业号,终止后台作业

* kill作业号之前有百分号,否则就是kill进程号(root下可能会终止掉系统的进程)*

Shell程序

解释语言,CentOS使用的是bash《Learning the bash Shell》《学习bash》

$ cat /etc/shells
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
$ echo $SHELL
echo $SHELL
/bin/bash
$ bash -version
bash -version
GNU bash, 版本 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>

这是自由软件,您可以自由地更改和重新发布。
在法律允许的范围内没有担保.
  • #开头的解释为注释行,第一行#!指定解释程序去运行该脚本,python,perl,bash等
  • which bash,shell的全路径名,比如/usr/bin/bash
  • 写好脚本之后,chmod +x scriptfile, ./scriptfile 来执行
  • 读取命令行参数用 n, 0指命令本身,$1是第一个参数… …
  • shell变量: name=value,等号前后为空格,value解释为一个字符串,使用$name
  • 循环
for i in list
do
   ... ...loop commands for $i
done
  • 条件语句,对大多数命令执行没有任何系统错误时返回真,否则为假;cmp比较时相同为真,否则为假;或者程序return/exit返回的值
if command
then
   command to execute if command returns ture
else
   command to execute if command returns false
fi
#test命令(简写为[args])评估一个条件表达式,并相应返回0或1
if [args]
then
   ...commands
else
   ...commands
done
#args的基本表达式
str1 = str2     True if  str1 equals str2
str1!= str2     True if  str1 does not equal str2
-r file         True if  file exists and is readable
-w file         True if  file exists and is writable
-d file         True if  file exists and is a directory
-f file         True if  file exists and is not a directory
-s file         True if  file exists and has nonzero length
expr1 -a expr2  True if  both expr1 and expr2 are True
expr1 -o expr2  Ture if  both expr1 or expr2 is True
#比如
if [ "$1" = "foo" ]     # 如果第一个参数时foo
if [ -r file.txt ]      # 如果file.txt存在且可读

shell的设定

.bashrc和.bash_profile, 启动shell执行的是.bashrc,在系统上登陆时执行.bash_profile(仅执行一次)。

环境变量

PATH供shell和shell启动的程序使用,TERM表示正在使用的终端类型

$ export VARNAME=value,  C shell中是%set VARNAME value
$ printenv
$ export PATH=$PATH:/usr/local/bin 来增加PATH路径
C shell中是%set path = ($ PATH /usr/local/bin)

shell变量

.bash_profile文件中有部分变量时控制shell的行为

$ varname=value
% set varname=value
ignoreeof   设置了该变量,Ctrl-D就不会终止shell的运行,必须显示输入logout或exit
noclobber   当文件foo存在时,ls>foo就不能执行
HISTSIZE(bash) 历史列表中的命令数,可以利用!n取出和执行这些命令

别名

经常执行的命令以及其参数、常拼错的命令自定义为短命名,添加到.bash_profile中

$ alias newname = 'command', C shell中是% alias newname 'command'
$ alias rm="rm -i"   #每次删除文件都会请求确认

其他

  • grep 在一个文件或文件组中查找“pattern”
  • more 允许将太长的文件分页显示在终端,还有less和pg
  • sort 将一组输入行排序,通常以ASCII字符集顺序排列
  • diff 比较两个文件的差异,并列出来
  • cmp 比较两个文件,报告两个文件存在差别的第一个位置

你可能感兴趣的:(linux,linux)