Linux开发有关知识汇集
ps命令
bash
  ksh
  csh
  sh
  tcsh
  ps
一个终端至少有一个shell,用来和用户打交道
登陆shell,管理员指定登陆是什么shell,平常用就用什么shell
exec ksh切换shell,切换shell之后原来的shell就没用了。可以通过ps来验证
date
  操作系统要管理文件
   目录
    子目录
     文件
  文件系统
   树
  移动文件系统
   /
  /etc/hosts
  linux严格区分大小写;
  pwd=print working directory打印出当前的工作目录
  ps=process status打印出进程的状态
  clear=ctrl+l
  每个程序每运行一次有一个状态
  tty是终端编号,每个终端都有一个编号
  pid进程的id;内核在管理对象的时候,一般采用一个整数来分配和识别
  cmd是命令
  time是利用的cpu的时间
cd=change direcotry改变当前工作目录
  绝对路径
  相对路径
管理员在创建账户的时候会指定shell,和主目录home directory
cd /etc/alsa/cards
/~.分别表示根目录、主目录、当前目录
  ..表示上一级目录
  ../..表示上一级的上一级
  ls=list列出
telnet
passwd更改密码
  用户名和密码存在于/etc/passwd文件中
  soft01:x:500:50::/home/soft01:/bin/bash
  用户名:密码:
  密码实际上都放到了shadow文件中了
  group
  ps -l
  ps -e
  ps -f
  ps -p pid
  ls
  ls /usr
  ls /usr /mnt
case-sensitive
  命令 【选项】....【参数】...
man
  more
man  date
  date +%D
  date +%F
  date +%T
date 08011020
问题:
  etc下的passwd、shadow、group等文件及文件格式解释
id
  id username
  文件系统
  从/开始的树状结构
  绝对路径:/打头
  相对路径:当前目录之下开始
  当前目录:cd . 
            cd ..
  主目录
   ~用户名:本用户的主目录
   username,passwd,uid,gid,,home,shell:/etc/passwd,x--->/etc/shadow
   每个命令都对应一个可执行文件;shell会支持一些内部命令,没有文件。
  ls /bin  可执行文件
   如bash ,csh,tcsh,ksh等;
clear命令,清屏幕;
   
   sleep 5睡觉
   
  ls -l  利用长格式显示出相关信息
ls -F打标记(*表示可执行文件,@表示软连接或者符号连接,)---快捷方式
  ls -a显示全部文件.    ..  包含隐藏文件一起显示.开头的是隐藏文件,其中包含.和..
  ls -A  除了.和..之外都显示
  ls -l
    -打头普通文件
    d打头目录文件
    l打头链接文件
    x结尾可执行文件
    p打头管道
    
   ls  -t -l与ls -l两者的区别,两者之间一个按字母一个是按时间来排序显示
   
   ls -R,列出当前目录开始的目录树
   ls -r
   ls -F
mkfifo abc
  ln -s /bin/date da
  ls -l
echo hello>ghi.jk
软链接:快捷方式;存放的是路径  ln -s
  硬链接:同一文件对应多个名字  ln  
  硬链接 跨设备不行
cp == copy
  cp  /bin/zsh ~/Desktop/
当硬链接数量为0的时候,则真正的删除该文件;
  硬链接一旦建立后,硬链接之间是相互平等的
rwx= read write execute
drwxrwxrwx
  权限===》
  自己|同组人|其他人
rm  abc
  rm  bs da
如何更改权限
  chmod  ugo 
  u代表自己
  g代表同组人
  o代表其他人
chmod  o-rx z删除其他人的rx权限
  chmod  o+rx z增加其他人的rx权限
  chmod  o=rwx z设置其他组人的rwx权限
  chmod  o=-  z 设置其他组人的rwx权限为空
  chmod  u-w,o+r,g+w  z
  chmod  a+x  z,给所有人增加x权限
  chmod  0644 z;注意:在c和c++中,以0开头的是一个8进制数
r----4 w----2 x---1 ----0权限数字化
权限可以用一个3位的8进制数来表示---》如700==》c语言编程中可以借鉴这种模式
文件的创建、删除、修改、复制
  创建目录:
  mkdir  da db dc建立3个并排的目录
  mkdir  dd/de  XX
  mkdir  dd
  mkdir  dd/de
  ==>mkdir -p dd/de/dc创建多层的目录
  ls -R显示所有的目录文件
touch创建空文件
  touch f1  f2 f3同时创建3个空文件
  touch  da/f4   db/f5在不同的目录下创建不同的文件
  touch db/f6  db/f7  db/f8
  ===>cd db
   touch f6 f7 f8
  cd ..
date命令
  date > xyz重定向;将左边命令产生的输出写到右边的文件中去;会清空文件中的原有内容;
  date >>xyz把左边命令产生的输出追加到右边的文件中,不会清空原文件中的原有内容;
  cat xyz用命令来查看xyz的内容或者用vi来查看xyz的内容
pwd > abc
cal显示当月的日历
  cal  2012
  cal 11 2010
  echo  大家好
  echo  大家好  >>  f10
echo 大家好才是真的好 >> f10;cat f10=====>重要在编辑脚本时很有效
date;sleep 5;date===>在设置识别裸设备时,速度可能比较慢,最好是init过程之前等待识别30秒
/dev/tty表示的是终端鼠标\键盘\显示器
date > /dev/tty===>编辑脚本时常用
date > /dev/null==>黑洞文件,永远的空文件,空设备文件
如:ls -l  > /dev/null
   ls -l
  mv  f1  dc  将f1文件移动到dc下
  mv  f1  da dc将f1,da目录移动到dc下
  mv  db  dc/d2将db移动到dc下并修改为d2;只有移动一个目录或文件的时候才能改名,如果移动多个是不能改名的
cp -r  包含目录一起复制
  cp -i   interactive交互;   目录覆盖的时候无提示,有文件覆盖的时候才提示
rm -r可以删除文件和非空目录;但是删除目录时比较危险
  rm本身是不删除目录的
  rmdir只能用来删除空目录
  rm -ri
字符链接软
  ln -s:通过文件系统链接一个文件或者目录
  link1-->inode 3561(data blocks/file2)-->file2--->inode 1282(data blocks)
  硬链接
  ln
  在同一个文件系统上去链接文件
  多个文件被硬性的链接到相同的inode number,涉及硬盘上的相同数据
如file1,file===》inode1282 (data blocks)
   dir1====>inode 4221(data blocks  file1=inode1282;file2=inode 1282)
  ls
  rm dc/f1  dc/f2  dc/f3
  rm dc/f*
  rm dc/*
通配符号
  ls  -l  dc/*2
  ls -l -d dc/*2
  rm -r a*b*c
命令本身并不能处理通配符,是通过shell来处理的
?只能匹配一个任意字符
  []匹配指定范围内的一个字符,如[b-j]   [135abj]
  [4-12]====>[4-1,2]
cat
  man
  head /etc/passwd;head可以看前10行,或者head -5,显示前5行
  tail  默认看后10行,看后5行,tail -5
  more分屏显示
  less可以上下左右的任意翻看文件内容,也是分屏显示
  vi
  wc===word count统计数量;行数,单词数,字符数
  wc -l只要行数,-w只要单词数  -c只要字符数
  grep  字符串  文件
  id
  grep  -i  忽略大小写i=ignore case
  grep -v查找不包含指定字符串的行
  grep -v 01 /etc/passwd >tempxxx
  more tempxxx
  rm tempxxx
grep -v 01 /etc/passwd | more 把左边命令的输出当作一个文件直接交给右边的命令来处理。这就是管道
grep nologin /etc/passwd | wc -l
gedit全屏幕的编辑器
  kate
vi==vim
  有两种工作状态;1、初始的命令状态;2、插入状态
  命令状态(初始)----i,a,o--->插入状态---<ESC>--->命令状态
  ----->底行模式---->:/?
  vi
      k上
  h左     l右
   j下
  ^行首      $行尾
  G文件尾     1G文件首
  第N行   NG
  屏幕头H,屏幕中M,屏幕底L
  下翻:ctrl+f 上翻 ctrl+b
  w下一个单词开头
  b上一个单词开头
  e下一个单词末尾
i在光标当前位置插入
  a在光标所在位置后插入
  o在光标所在行下插入一空行
  O在光标所在行上插入一空行
   
  :set nu显示行号代码
  : no nu 不显示行号
  I跑行首添加
  A跑行尾追加
x删除一个字符3x
  dw删除当前词
  3dw删除3个词
  dd删除当前行
  5dd删除5行
  :5,10d删除5-10行
  删除之后如果想恢复的话,使用u,undo
p粘贴在光标位置之后
  P粘贴在光标位置之前
r替换一个字符
  cw替换一个单词
  cc替换一行
  C替换从光标至行尾
  yw拷贝词
  yy 拷贝行
  dw剪切词
  dd剪切行
  p当前行下粘帖
  :1,2co3 拷贝行1,行2在行3之后
  :4,5m6 移动行4,5在行6之后
  复制某一个字符,yl
ps  -l
  S=status
  S睡眠状态   T挂起状态   R运行  Z 僵尸状态
  挂起状态不会分时间片,只是一个后台任务摆着;
  sleep 10
  sleep 10 &可以后台执行
ps只显示本终端的进程+e可以显示所有的进程
ps -e -l | grep Z
  ps -f 显示完整的命令
  ps -p 3846根据进程的PID来跟踪进程
init进程,其PID总是为1;父进程为0(LINUX中是不存在的;UNIX中是存在的叫总调度)
jobs专门用来查看后台任务
  调出后台任务到前台fg,不带参数表示把带+号的调用到前面来执行
  也可以带fg+
  把stopped的任务用bg在后台执行起来
终止一个任务ctrl+c也可以用kill
  kill发送的是一个sigterm信号
如果是后台任务,kill也可以删除
jobs
  kill  %1为了区分进程和任务编号,进程直接写数字,任务编号需要加%号
熟悉vi
grep 
  > |  ; * ? [] / ~ . ..
  find可以搜索文件或目录
find  目录  条件 【命令,如何处理;默认print】----在指定的目录中进行搜索;
  find .  -name  f1 在当前目录下搜索
  find / -name  f1(name后面只能包含一个文件名)
  find . -name f*这句是错误的。
  eacho find . -name f*
  find . -name "f*"
  eacho find . -name "f*"
  find . -name "*.cpp"  -exec cp{} d6 \;
  这命令的意思是
  find . -name "*.cpp" 找到所有的cpp文件
  \;表示转义就表示符号本身;   ;号是命令的结束标志
  -exec表示后面有个执行命令
  {}表示前面的内容
find d6 -name "*.cpp" -exec rm {} ";"
who当前谁在线
  who am i
users只关心用户的名字的情况下 users
who | grep 192.168.24. 显示出在24网段登录的用户
w可以知道谁在做什么?
who where when what
history显示出用过的所有的命令的列表
  !编号即可以执行相关命令
history其命令存储在.bash_history中
du显示磁盘空间的使用情况
  du -k
  du -h
  du -s只有综合
  df查看剩余多少空间
ping
  ifconfig 
  ifconfig -a
ftp
!ls -l
  !ls
  !lcd
  !表示本地的
  put
  mput
  get
  mget
prompt把交互方式打开或者关闭;
  asc表示传递模式设置成字符模式;尤其是在跨平台传输文本文件时
  bin按照二进制模式来传输
locale设置编码语言
write聊天
  mesg n不想聊天
  env环境命令(环境变量)
  PS1是来指定命令提示符的
path环境变量---为shell指定可查找命令的目录
  命令不是在当前目录下找,而是在path指定的目录下去找
  假设在path路径下有多个路径指向了同名的命令的话,可以用which来查看
  如果像查询哪里有某个命令,可以通过whereis cal
  PATH=$PATH:.
初始化文件:系统级和用户级
  系统级/etc---可以针对所有用户
  用户级----只针对自己,不同的shell用不同的初始化文件,看man bash或man csh
  ~/.bashrc
vi ~/.bashrc
  source ~/.bashrc在当前终端必须先source下才能生效,其他终端自动生效
alias起一个别名如
  alias c=clear
  alias pl=‘ps -l’
vi my.sh
  #!/bin/bash
  echo 大家好
  sleep 5
  echo  I love u,baby。
  sleep 5
  date
source my.sh
  chmod u+x my.sh
 honghu79
 honghu79                              jopen
 jopen                              风舟1991
 风舟1991                              张玲
 张玲