- git
which git # /usr/bin/git
/applications/xcode.app/contents/developer/usr/bin/git version # 2.37.1
q # quit
# git commit --amend --author "John Marquez <john@dev.com>"
# delete the last commit (revert)
# http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html
# git reset HEAD^ --hard
# config
git help config
git config --list # -l
git config --unset branch.foo.remote
git config --unset branch.foo.merge
git config --global user.name
git config --global user.email
git config --global user.name "john"
git config --global user.email "john@dev.com"
# git gc # cleanup
git branch -r # list remote branches
# git branch -r -d origin/demo # delete remote branch
# git remote prune origin --dry-run # delete all stale remote-tracking branches
git branch -m <oldname> <newname> # rename from any branch
git branch -m <newname> # rename current branch
git status
git status --short # -s
git log -n3 dev/app/lib.mm # git log for file, last n commits, filename is case sensitive
git log -n2 # Sun Oct 5 12:00:00 2014 -0600
git log -n2 --date=local # Sun Oct 5 12:00:00 2014
git log -n2 --date=short # 2014-10-05
git log -n2 --date=iso # 2014-10-05 12:00:00 -0600
git log --name-status
git log --name-status --author=kbcat --merges -n2
git log --name-status --author=kbcat --no-merges -n3 dev/app/file.c
git log --name-status --no-merges -n3
git log --name-only
git log --stat
git log -n3 --pretty=format:"%cd %h%n%s%n-------" --date=local # Sun Oct 5 12:00:00 2014
git log -n3 --pretty=format:"%cd %h%n%s%n-------" --date=iso # 10-05 12:00:00
| sed -e 's/2014-//'
| sed -e 's/ -0600//'
git log --abbrev-commit
git log --abbrev-commit --pretty=oneline
git log --abbrev-commit --pretty=oneline --author=kbcat
git log --abbrev-commit --pretty=oneline --author=kbcat dev/app/file.c
git log --abbrev-commit --pretty=oneline dev/app/file.c
git log --diff-filter=A --name-status # Added
git log --diff-filter=D --name-status # Deleted
git log --diff-filter=M --name-status # Modified
git log --diff-filter=R --name-status # Renamed
git log --diff-filter=AD --name-status # Added or Deleted
git log --before="2017-01-01"
git log --grep="bug" # match commit message
git log -Sfoo # find string occurrences +-
git show HEAD
git show HEAD~
git show HEAD~2
git show HEAD~3
git show f000000
git show f000000 dev/app/file.c
git show --name-status f000000
git show --pretty="format:" --name-only # last commit
git show --pretty="format:" --name-only f000000 # commit
git show --pretty="format:" --name-only stash@{0}
# show all commits in feature branch that are not in main branch
git log main..dev/fb
git log main..dev/fb --no-merges
# add files
git add -A # stage all
git add . # stage mod and new
git add -u # stage mod and del
git add dev/app/lib.*
git checkout -b fb1
git checkout stash
git checkout stash@{1} dev/app/file.c
git checkout stash@{1} -- dev/app/file.c
git checkout f000000 dev/app/file.c
git checkout -b temp stash@{1}
git cherry-pick f000000
git cherry-pick --no-commit f000000 # -n
git cherry-pick --edit f000000 # -e
git tag -a v1.0 -m "..."
git tag -l # list all tags, default shows 1 line of tag message
git tag -l -n3 v1.0 # show 3 lines of tag message
git show v1.0
git push origin [tagname]
git push origin v1.0
# update
git remote show origin
git fetch
git pull
git diff stash # diff working dir w/stash
git diff dev stash@{1} # diff dev branch w/stash
git diff stash@{1} file.c # diff file in working dir w/stash
git diff stash@{1} stash@{0} # diff stash 1 w/stash 0, most recent last
git diff stash@{1} stash@{0} file.c # diff file between stash 1 and stash 0
git diff f000000 f000001 -- file.c # diff file between commit x and commit y
git diff --staged
// git diff stash script, swift 5
for x in (1...20).reversed() {
let stashData = "stash@{\(x)} stash@{\(x - 1)}"
print("cl git diff \(stashData) --name-only")
print("# git stash drop stash@{\(x)}\n")
}
cl git diff stash@{10} stash@{9} --name-only
# git stash drop stash@{10}
cl git diff stash@{9} stash@{8} --name-only
# git stash drop stash@{9}
cl git diff stash@{8} stash@{7} --name-only
# git stash drop stash@{8}
cl git diff stash@{7} stash@{6} --name-only
# git stash drop stash@{7}
cl git diff stash@{6} stash@{5} --name-only
# git stash drop stash@{6}
cl git diff stash@{5} stash@{4} --name-only
# git stash drop stash@{5}
cl git diff stash@{4} stash@{3} --name-only
# git stash drop stash@{4}
cl git diff stash@{3} stash@{2} --name-only
# git stash drop stash@{3}
cl git diff stash@{2} stash@{1} --name-only
# git stash drop stash@{2}
cl git diff stash@{1} stash@{0} --name-only
# cl git diff stash@{1} stash@{0} # kb: up, L+W
# git stash drop stash@{1}
# do not drop stash zero
# interactive rebase, to edit/squash commits
# git rebase -i HEAD~2 # opens vim
# git rebase -i HEAD~3
# git rebase -i HEAD~4
# git rebase -i HEAD~5
# git rebase -i HEAD~6
# git rebase --continue
# git rebase --abort
# git stash save "backup"
git stash list
git stash list --date=local
git stash show # file list
# git stash pop/apply
# show stash sha1 hash
git reflog stash
git blame dev/app/file.c
git blame -L 100,110 dev/app/file.c
# --------------------------------------
- git workflow example 1
clear; git status
git init # initialized empty Git repository in /users/a/dev/app/.git/
git add file1.txt
git commit -m "..."
git log
git add .
git commit -m "..." >> ~/gitCommitLog.txt
10 files changed, 20 insertions(+), 1 deletion(-)
create mode 100644 .gitignore
create mode 100644 HEAD
create mode 100644 c/lib.c
create mode 100644 c/lib.h
create mode 100644 file2.txt
# --------------------------------------
- git workflow example 2
WORKING_FOLDER=~/dev/app/
mkdir -p "$WORKING_FOLDER"
cd "$WORKING_FOLDER"
ls -alt
git init
git status # On branch main
touch .gitignore
echo .DS_Store > .gitignore
git add .gitignore
git add --all
git commit -m "new"
git log --name-status
# --------------------------------------
- git workflow example 3, GitHub
1. init, setup, and commit into local git repo
2. create repo on GitHub
3. push repo to GitHub
# test github connection
ssh -T git@github.com # Hi expressionsoftware! You've successfully authenticated, but GitHub does not provide shell access.
git init
touch .gitignore
echo .DS_Store > .gitignore
git add .gitignore
git commit -m "new"
# ...
# github repo url
ssl: git@github.com:expressionsoftware/foo.git
http: https://github.com/expressionsoftware/foo.git
# add remote and push
git remote add origin git@github.com:expressionsoftware/foo.git
git push -u origin main --porcelain --verbose # include -u (--set-upstream) on first push only
git push -u origin dev
git push origin main
git push origin dev
git push # current branch
# fatal: The current branch dev has no upstream branch.
# To push the current branch and set the remote as upstream, use
# git push --set-upstream origin dev
# clone
git clone git@github.com:expressionsoftware/foo.git # creates folder, default folder name, same as repo name, "foo"
git clone git@github.com:expressionsoftware/foo.git foobar # creates folder "foobar"
git clone git@github.com:expressionsoftware/foo.git . # current empty folder
# --------------------------------------
- .gitignore file
.cfusertextencoding
.ds_store
.fontconfig/
.gitignore~
.lesshst
.trash/
.viminfo
.xauthority
*~*
*.exe
xcuserdata/
# -----------------
app/temp.cpp
temp file 1.txt
# -----------------
# wildcards
# * wildcard requires full path
app/images/*png
*~
*.swp
# ignore all directories and files in a directory
tmp/**/*
- brew
/usr/local/bin/brew -v # 4.0.4
/usr/local/cellar
man brew
brew help
brew home
brew doctor
brew analytics
brew analytics off
brew list
brew list -1 # one entry per line
# brew update # update hb
brew outdated # list outdated packages
brew upgrade $FORMULA
# brew upgrade # upgrade all
brew cleanup -n # show cleanup
brew cleanup $FORMULA
# brew cleanup # cleanup all
brew info bash # 5.2.15
brew install bash # /usr/local/cellar/bash/*/bin/bash
brew info curl # 7.87
brew install curl # /usr/local/cellar/curl/*/bin/curl
brew info erlang # 25.2.2
brew install erlang # /usr/local/cellar/erlang/*/bin/erl
brew info git # 2.39.2
brew install git # /usr/local/cellar/git/*/bin/git
brew info go # 1.19.5
brew install go # /usr/local/cellar/go/*/bin/go
brew info haskell-stack # 2.9.3, GHCi 9.4.4
brew install haskell-stack # /usr/local/cellar/haskell-stack/*/bin/stack
brew info cabal-install # 3.8.1
brew install cabal-install # /usr/local/Cellar/cabal-install/3.8.1.0
brew info ghc@9.2 # 9.2.6
brew install ghc@9.2 # /usr/local/Cellar/ghc@9.2/9.2.6
brew info java # 19.0.2
brew install java # /usr/local/Cellar/openjdk/19.0.2/bin/java
brew info leiningen # 2.10
brew install leiningen # /usr/local/cellar/leiningen/*/bin/lein
brew info make # 4.4
brew install make # /usr/local/Cellar/make/*/bin/gmake
brew info maven # 3.9
brew install maven # /usr/local/Cellar/maven/3.9.0
brew info node.js # 19.7
brew install node.js # /usr/local/cellar/node/*/bin/node
brew info python3 # 3.10.10
brew install python3 # /usr/local/cellar/python/*/bin/python3
brew info rsync # 3.2.7
brew install rsync # /usr/local/cellar/rsync/*/bin/rsync
brew info rust # 1.67.1
brew install rust # /usr/local/cellar/rust/*/bin/rustc
brew info scala # 3.2.2
brew install scala # /usr/local/cellar/scala/*/bin/scala
brew info vapor # 18.6
brew install vapor # /usr/local/cellar/vapor/*/bin/vapor
- antlr
antlr4 # ANTLR Parser Generator 4.12
java -jar /usr/local/lib/antlr-4.12.0-complete.jar # ..
jar tf /usr/local/lib/antlr-4.12.0-complete.jar # toc
# antlr4 Hello.g4 -o ./build/java # gen java
# antlr4 Hello.g4 -Dlanguage=Swift -o ./build/swift # gen swift
# javac build/java/Hello*.java -d build/class # compile java to class
# cd build/class
# grun Hello r1 -tokens # -gui -tokens -tree
# input string to parse, enter, L+D to enter EOF
# grun is an alias to antlr test rig
# java org.antlr.v4.gui.TestRig Hello r1 -tokens # -gui -tokens -tree
# -gui launches TestRig java applet, Parse Tree Inspector gui window
# quit TestRig to exit grun, back to shell
// file: NS.g4
// nested namespace antlr grammar
//
grammar NS;
ns: nsgroup (nsgroup)*
;
nsgroup: 'namespace' nsname? nsbody
;
nsname: ID
;
nsbody: '{' (nsgroup)? '}' | // nested namespace
'{' natext* '}' | // unnested text
'{' '}' // unnested empty
;
natext: (.)+? | UNKNOWN ((.)+? | UNKNOWN)*
;
UNKNOWN : (PUNC | DIGITS)
;
PUNC: ([.,;:/-] | ADDOP | MULOP)+
;
ID: [a-zA-Z]+
;
WS: [ \n]+ -> skip
;
fragment ADDOP: [\\+]
;
fragment MULOP: [\\*]
;
fragment ESC: '\\'
;
fragment DIGITS: DIGIT (DIGIT)*
;
fragment DIGIT: [0-9]
;
// valid namespace grammar
//
namespace { }
namespace foo { }
namespace foo { namespace { } } // nested
namespace foo { namespace bar { } } // nested
namespace foo { int x; namespace bar { } } // nested
namespace a { } namespace b { } namespace c { }
namespace foo { xxx }
namespace foo { 123 }
namespace foo { // }
namespace foo { ... }
namespace foo { 1 2 3 }
namespace foo { 1 + 2 + 3 }
namespace foo { x + y }
// namespace foo { }
// output
// tokens:
[ | |
[ @0 0:8='namespace' <'namespace'> 1:0 ]
[ @1 10:12='foo' <ID> 1:10 ]
[ @2 14:14='{' <'{'> 1:14 ]
[ @3 16:16='}' <'}'> 1:16 ]
[ @4 17:16='<EOF>' <EOF> 1:17 ]
]
// walker
//
enter method line token display type ctx text
enterNs 1 namespace 'namespace' 1 'namespacefoo{}'
enterNsgroup namespace 'namespace' 1 'namespacefoo{}'
enterNsname foo ID 6 'foo'
exitNsname foo ID 6 'foo'
enterNsbody { '{' 2 '{}'
exitNsbody } '}' 3 '{}'
exitNsgroup } '}' 3 'namespacefoo{}'
exitNs } '}' 3 'namespacefoo{}'
// namespace foo { namespace bar { } } // nested
// output
// tokens:
[ | |
[ @0 0:8='namespace' <'namespace'> 1:0 ]
[ @1 10:12='foo' <ID> 1:10 ]
[ @2 14:14='{' <'{'> 1:14 ]
[ @3 16:24='namespace' <'namespace'> 1:16 ]
[ @4 26:28='bar' <ID> 1:26 ]
[ @5 30:30='{' <'{'> 1:30 ]
[ @6 32:32='}' <'}'> 1:32 ]
[ @7 34:34='}' <'}'> 1:34 ]
[ @8 35:34='<EOF>' <EOF> 1:35 ]
]
// walker
//
enter method line token display type ctx text
enterNs 1 namespace 'namespace' 1 'namespacefoo{namespacebar{}}'
enterNsgroup namespace 'namespace' 1 'namespacefoo{namespacebar{}}'
enterNsname foo ID 6 'foo'
exitNsname foo ID 6 'foo'
enterNsbody { '{' 2 '{namespacebar{}}'
enterNsgroup namespace 'namespace' 1 'namespacebar{}'
enterNsname bar ID 6 'bar'
exitNsname bar ID 6 'bar'
enterNsbody { '{' 2 '{}'
exitNsbody } '}' 3 '{}'
exitNsgroup } '}' 3 'namespacebar{}'
exitNsbody } '}' 3 '{namespacebar{}}'
exitNsgroup } '}' 3 'namespacefoo{namespacebar{}}'
exitNs } '}' 3 'namespacefoo{namespacebar{}}'
# separate lexer and parser
# antlr4 XLexer.g4 XParser.g4 -o ./build/java
# javac build/java/XLexer*.java build/java/XParser*.java -d build/class
# cd build/class
# grun X ruleX -tokens demo.h
// TestXListener.java
//
public class TestXListener {
public static void main(String[] args) throws Exception {
XListener x = new XListener();
x.parse();
}
}
// XListener.java
//
import java.util.*;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
public class XListener extends XBaseListener {
XLexer lexer;
XParser parser;
ParseTree tree;
CommonTokenStream tokenStream;
String file = "foo.h";
public void parse() throws Exception {
CharStream input = CharStreams.fromFileName(file);
lexer = new XLexer(input);
tokenStream = new CommonTokenStream(lexer);
parser = new XParser(tokenStream);
parser.removeErrorListeners(); // remove ConsoleErrorListener
parser.addErrorListener(new XParseErrorListener());
tree = parser.ruleX(); // rule name to process
int errorCount = parser.getNumberOfSyntaxErrors();
if (errorCount > 0) {
System.out.println("\nParser Error Count: " + parser.getNumberOfSyntaxErrors() + "\n");
}
// sim to grun -tokens but wo hidden channel tokens, comments #include #define
// re s:, \[
// r:\n[
System.out.println("\ntokens: " + tokensWithDisplayName(tokenStream.getTokens()) + "\n");
// walker header
System.out.println("enter method line token type ctx text");
ParseTreeWalker.DEFAULT.walk(this, tree);
}
String tokensWithDisplayName(List<Token> list) {
String tokens = list.toString();
System.out.println("debug raw tokens: " + tokens);
Iterator<Token> it = list.iterator();
while (it.hasNext()) {
Token t = it.next();
int type = t.getType();
String displayName = parser.getVocabulary().getDisplayName(t.getType());
tokens = tokens.replace(("<" + type + ">"),
("<" + displayName + ">"));
}
return tokens;
}
@Override
public void enterClassName(XParser.ClassNameContext ctx) {
System.out.println("enterClassName " + ctx.start.getLine() + ", " + ctx.start.getText() + ", " + ctx.start.getType() + ", '" + ctx.getText() + "'");
}
}
// XParseErrorListener.java
//
import java.util.*;
import org.antlr.v4.runtime.*;
public class XParseErrorListener extends BaseErrorListener {
@Override
public void syntaxError(Recognizer<?, ?> recognizer,
Object offendingSymbol,
int line,
int charPositionInLine,
String msg,
RecognitionException e) {
List<String> stack = ((Parser)recognizer).getRuleInvocationStack();
Collections.reverse(stack);
System.err.println("\nParser Error");
System.err.println("rule stack: " + stack);
System.err.println("line " + line + ":" + charPositionInLine + " at " + offendingSymbol + ": " + msg);
}
}
// foo.h
//
namespace Foo {
class Bar;
struct Data {
int val;
Bar lib;
};
}
// output
// tokens:
[ | |
[ @0 0:8='namespace' <'namespace'> 1:0 ]
[ @1 10:12='Foo' <Identifier> 1:10 ]
[ @2 14:14='{' <'{'> 1:14 ]
[ @3 25:29='class' <'class'> 3:4 ]
[ @4 31:33='Bar' <Identifier> 3:10 ]
[ @5 34:34=';' <';'> 3:13 ]
[ @6 45:50='struct' <'struct'> 5:4 ]
[ @7 52:55='Data' <Identifier> 5:11 ]
[ @8 57:57='{' <'{'> 5:16 ]
[ @9 67:69='int' <'int'> 6:8 ]
[ @10 71:73='val' <Identifier> 6:12 ]
[ @11 74:74=';' <';'> 6:15 ]
[ @12 84:86='Bar' <Identifier> 7:8 ]
[ @13 88:90='lib' <Identifier> 7:12 ]
[ @14 91:91=';' <';'> 7:15 ]
[ @15 97:97='}' <'}'> 8:4 ]
[ @16 98:98=';' <';'> 8:5 ]
[ @17 105:105='}' <'}'> 10:0 ]
[ @18 106:105='<EOF>' <EOF> 10:1 ]
]
// walker
//
// enter method line token display type ctx text
enterTranslationUnit 1 namespace 'namespace' 48 'namespaceFoo{classBar;structData{intval;Barlib;};}<EOF>'
enterNamespaceDefinition 1 namespace 'namespace' 48 'namespaceFoo{classBar;structData{intval;Barlib;};}'
enterNsHead 1 namespace 'namespace' 48 'namespaceFoo'
Foo Identifier 132
enterNsKey 1 namespace 'namespace' 48 'namespace'
enterNsName 1 Foo Identifier 132 'Foo'
enterDeclarationseq 3 class 'class' 21 'classBar;structData{intval;Barlib;};'
enterDeclaration 3 class 'class' 21 'classBar;'
enterDeclSpecifier 3 class 'class' 21 'classBar'
enterClassKey 3 class 'class' 21 'class'
enterClassName 3 Bar Identifier 132 'Bar'
enterDeclaration 5 struct 'struct' 66 'structData{intval;Barlib;};'
enterDeclSpecifier 5 struct 'struct' 66 'structData{intval;Barlib;}'
enterClassHead 5 struct 'struct' 66 'structData'
enterClassKey 5 struct 'struct' 66 'struct'
enterClassName 5 Data Identifier 132 'Data'
enterMemberSpecification 6 int 'int' 45 'intval;Barlib;'
enterMemberdeclaration 6 int 'int' 45 'intval;'
val Identifier 132
enterTypeSpecifier 6 int 'int' 45 'int'
enterMemberDeclarator 6 val Identifier 132 'val'
enterMemberdeclaration 7 Bar Identifier 132 'Barlib;'
lib Identifier 132
enterTypeSpecifier 7 Bar Identifier 132 'Bar'
enterClassName 7 Bar Identifier 132 'Bar'
enterMemberDeclarator 7 lib Identifier 132 'lib'
exitNamespaceDefinition 10 } '}' 90 'namespaceFoo{classBar;structData{intval;Barlib;};}'
exitTranslationUnit 10 <EOF> EOF -1 'namespaceFoo{classBar;structData{intval;Barlib;};}<EOF>'
- bash
# exit # exit bash 4
# date format
date +%H:%M:%S # 22:52:01
date '+%m-%d-%y %H:%M:%S' # 08-28-16 20:19:53
date '+%m-%d-%y.%H%M%S' # 08-28-16.201953
echo $BASH # /bin/bash
echo $BASH_VERSION # 3.2.57(1)-release
# 4.4.5(1)-release
bash --version # 3.2.57(1)-release
# 4.4.5(1)-release
echo $HOME # /users/a
echo $HOSTNAME # h9000
echo $RANDOM # 10273, (0-32767)
echo $PATH # /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
PATH="${PATH}:/users/a/dev/scala/bin"
export PATH
echo $PATH
echo -e "foo\nbar"
for x in {1..10}
do
echo $x
done
# bash array
declare -a data=("foo" "bar" "...")
for x in "${data[@]}"
do
echo $x
done
cal
cal 2017
cal 10 2017
cal -y
# --------------------------------------
# .zshrc
# .bash_profile
# set min prompt
export PS1='$ '
# alias
alias czs='cat ~/.zshrc'
alias cl='clear;'
alias xfc='~/applications/fileCompare' # xfc f1 f2, do not use fc, a built-in command, see: man zshbuiltins or man fc
alias od='/usr/bin/opendiff' # filemerge, od f1 f2
alias ovs='open -a Visual\ Studio\ Code.app' # open visual studio code
alias oxc='open -a Xcode' # open xcode
alias lss='ls -al'
alias lsv='ls -al /volumes'
alias antlr4='/usr/local/Cellar/openjdk/19.0.2/bin/java -Xmx500M -cp "/usr/local/lib/antlr-4.12.0-complete.jar:$CLASSPATH" org.antlr.v4.Tool'
alias grun='/usr/local/Cellar/openjdk/19.0.2/bin/java -Xmx500M -cp "/usr/local/lib/antlr-4.12.0-complete.jar:$CLASSPATH" org.antlr.v4.gui.TestRig'
# git alias
alias gb=' git branch;'
alias gbr=' git branch -r;' # show remote branches
alias gcem=' git config --global user.email;' # john@dev.com
alias gds=' git diff stash;'
alias gl=' git log --name-status;'
alias glm=' git log --name-status --author=john;'
alias glp=' git log --abbrev-commit --pretty=oneline;'
alias glpm=' git log --abbrev-commit --pretty=oneline --author=john;'
alias gmt=' git mergetool;'
alias gp=' git pull;'
alias gs=' git status;'
alias gsl=' git stash list;'
alias gsll=' git stash list --date=local;'
alias gslno=' git stash list --name-only;'
function filehashlog() {
set -x
filehash $1
set +x
}
function filehash() {
openssl sha1 $1
}
function fhash() {
filehash $1 | egrep -o "\b([a-z0-9]+)$"
}
function fcomp() {
local fh1=$(fhash $1)
local fh2=$(fhash $2)
printf "file compare sha1 hash\n%s = %s\n%s = %s\n\n" $fh1 $1 $fh2 $2
if [ $fh1 == $fh2 ]
then
printf "files are equal\n"
else
printf "files are NOT equal\n"
fi
}
# file open chrome
# foc f.c
#
function foc() {
open "$1" -a Google\ Chrome.app
}
# file open preview
# fop a.png
#
function fop() {
open "$1" -a preview
}
# file open safari
# fos f.c
#
function fos() {
open "$1" -a Safari.app
}
# file open text edit
# fote f.txt
#
function fote() {
open "$1" -a textedit
}
# file open visual studio code
# fovs f.c
#
function fovs() {
open "$1" -a Visual\ Studio\ Code.app
}
# file open xcode
# foxc f.c
#
function foxc() {
open "$1" -a xcode
}
# --------------------------------------
# !/bin/bash
# backup copy file w/timestamp script
# bash backupFileScript "file 1.txt"
if (($# == 1)) # one param
then
vTimestamp=$(date "+_%m%d%y_%H%M%S.txt")
vBackupFilename=$1$vTimestamp
echo "file: $1" # file 1.txt
echo "backup: $vBackupFilename" # file 1.txt_100713_203059.txt
# quote for filename space chars
cp "$1" "$vBackupFilename"
else
printf "user error\n1 filename param is required\n"
echo "params: ${#}"
fi
# --------------------------------------
# !/bin/bash
# 2013 Mac CPU Architecture Script
# bash cpuScript "intel core i7"
# returns CPU architecture, either 32 or 64 bit, based on processor name
# http://support.apple.com/kb/HT3696
# bug param count wrong for string w/spaces
# bash cpuScript $(system_profiler SPHardwareDataType | grep -i 'processor name:' | sed -e 's/ *Processor Name: *//')
# params: 3
# version 2.0
# 64-bit CPU Intel
# fix wrap command-substitution $() in double quotes to send 1 string param
# bash cpuScript "$(system_profiler SPHardwareDataType | grep -i 'processor name:' | sed -e 's/ *Processor Name: *//')"
# params: 1
# version 2.0
# 64-bit CPU Intel Core i7
echo "params: ${#}"
ver="2.0"
echo "version $ver"
# lowercase
v1=$(echo $1 | tr '[:upper:]' '[:lower:]')
case $v1 in
"intel core solo"|"intel core duo") echo "32-bit CPU $1"
;;
*) echo "64-bit CPU $1"
;;
esac
# --------------------------------------
bash base conversions
int to binary echo 'obase=2; 256' | bc # 100000000
int to hex echo 'obase=16; 256' | bc # 100
int to hex printf '%x\n' 256 # 100
int to octal echo 'obase=8; 256' | bc # 400
binary to int echo 'ibase=2; 100000000' | bc # 256
hex to int echo $((0x100)) # 256
hex to int echo 'ibase=16; 100' | bc # 256
hex to int printf '%d\n' 0x100 # 256
octal to int echo 'ibase=8; 400' | bc # 256
- bc calculator
echo 2+2 | bc
bc # bc 1.06
bc -h # help
2 + 2 # ...
quit
- clojure (leiningen)
/usr/local/bin/lein -v # Leiningen 2.10 on Java 19.0.2 OpenJDK 64-Bit Server VM
lein -h
quit
L D quit
(quit)
lein repl ;;Clojure 1.11.1
quit
(+ 1 2 3 4 5 6 7 8 9 10) ;;55
(def nums [1 2 3 4 5 6 7 8 9 10])
(apply + nums) ;;55
(for [x [:a :b], y (range 5) :when (odd? y)] [x y]) ;;([:a 1] [:a 3] [:b 1] [:b 3])
(doseq [x [:a :b], y (range 5) :when (odd? y)] (prn x y)) ;;:a 1
:a 3
:b 1
:b 3
nil
(def a 42)
a ;;42
(+ a) ;;42
(+ a 2) ;;44
(/ a 2) ;;21
(* a 2) ;;84
(take 10 (range)) ;;(0 1 2 3 4 5 6 7 8 9)
(map inc (take 10 (range))) ;;(1 2 3 4 5 6 7 8 9 10)
(map #(+ % 2) (take 10 (range))) ;;(2 3 4 5 6 7 8 9 10 11)
- curl
curl -V # 7.79.1
curl http://curl.haxx.se/docs/manpage.html
curl http://www.gutenberg.org/cache/epub/2600/pg2600.txt -o "~/downloads/tolstoyWarAndPeace.txt" # download file
curl http://a.com/a.jpg -o ~/downloads/a.jpg
# http get
curl \
-H "Accept: text/html" \
-H "Content-Type: text/html" \
-H "Cookie: foo=1" \
-o "~/downloads/a.com.txt" \
-v \
https://a.com
# http post json body w/certificate
curl \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Content-Length: 17" \
-H "Cookie: foo=1" \
-H "Cookie: bar=1" \
--cert /etc/ssl/certs/file.crt \
--key /etc/ssl/certs/file.key \
-X POST \
-d '{ "foo" : "bar" }' \
-v \
https://a.com
# http get raw github source file
curl \
-H "Accept: application/vnd.github.raw" \
-H "Content-Type: text/plain" \
-o "~/downloads/Date.swift" \
-v \
https://raw.githubusercontent.com/expressionsoftware/Lib/main/Sources/Lib/Date.swift
- erlang
/usr/local/bin/erl +V # Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 6.3
/usr/local/bin/erlc -help
erl # Erlang/OTP 17 [erts-6.3.1] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
help().
LG switch command
LG h|? help
LG i interrupt
c connect
LG q quit
q(). quit
code:root_dir(). %"/usr/local/cellar/erlang/17.4/lib/erlang"
erlang:loaded(). %loaded erlang modules, current and/or old code, including preloaded modules
erlang:memory().
erlang:system_info(process_limit). %262144
os:version(). %{14,1,0}
os:cmd("date"). %"Sat Jan 10 05:39:56 MST 2015\n"
io:format("hello Erlang!~n").
self().
process_info(self()).
process_info(self(), links).
processes().
length(processes()).
pwd().
ls().
cd("/users/a/erlang").
P1 = list_to_pid("<0.281.0>"). %<0.281.0>
is_pid(P1). %true
b(). %var bindings
f(). %forget all vars
f(X). %forget X var
string:concat(string:concat("foo", " "), "bar"). %"foo bar"
io:format("~s~n", ["foo bar"]). %foo bar
io:format("~w~n", ["foo bar"]). %[102,111,111,32,98,97,114]
Sq = fun(X) -> X * X end.
Sq(8). %64
math:sqrt(64). # 8.0
math:pi(). %3.141592653589793
now(). %{1420,849205,145416} timestamp from 1-1-1970 GMT
time(). %{17,20,5}
erlang:localtime(). %{{2015,1,9},{17,20,5}}
erlang:localtime_to_universaltime(erlang:localtime()). %{{2015,1,10},{0,20,5}}
T = lists:seq(0, 9). %[0,1,2,3,4,5,6,7,8,9]
T.
length(T). %10
AbcSha512 = crypto:hash(sha512, "abc"). %<<221,175,53,161,147,97,122,186,204,65,115,73,174,32,65,
49,18,230,250,78,137,169,126,162,10,158,238,230,75,...>>
is_binary(AbcSha512). %1
binary_to_list(AbcSha512).
length(binary_to_list(AbcSha512)). %64
lists:foreach(fun(B) -> io:format("~w ", [B]) end, binary_to_list(AbcSha512)).
binary:last(AbcSha512). %159
io:format("~s~n", [[io_lib:format("~2.16.0B ",[X]) || <<X:8>> <= AbcSha512 ]]).
L1 = ["foo", "bar", "foo", "foo++", "FOO", "abc"].
lists:foreach(fun(X) -> io:format("~s~n", [X]) end, L1).
lists:foreach(fun(X) -> io:format("~s~n", [X]) end, lists:sort(L1)). %FOO
abc
bar
foo
foo
foo++
%guid, 2^82 unique
make_ref(). %#Ref<0.0.0.393>
- # grep # regex
# grep -ri -e 'foo' --include '*cpp*'
# grep -ri -E '\[\]' . --include=*.h
# grep -ri -E 'min|max' .
# fgrep -ri 'foo' . # all files
# fgrep -ri 'foo' . --include='*.h'
# fgrep -i 'foo' /users/a/file.txt
-n --line-number
-l --files-with-matches
-c --count
- haskell
ghci
:? help
:q quit
-- haskell comment
:show paths
current working directory: /users/a
module import search paths: .
- java
which java # /usr/bin/java
java -help
java -version # openjdk version "19.0.2" 2023-01-17
# OpenJDK Runtime Environment Homebrew build 19.0.2
# OpenJDK 64-Bit Server VM
echo $CLASSPATH
echo $JAVA_HOME
javac -help
javac Hello.java
java Hello
java -X
jar --help
jar tf foo.jar # toc
https://www.java.com/releases
- # less text viewer
less -? # --help
less -V # --version
-i # --ignore-case # ignore case in searches that do not contain uppercase
-I # --IGNORE-CASE # ignore case in searches and patterns
/regex search string
less iPhone.storyboard
q # quit
- LLDB
http://lldb.llvm.org/lldb-gdb.html
help
# comment
p @import Foundation
p sizeof(int)
p width
po foo
po @"foo".length
po FooType $x = (FooType)1 # cast int to enum Foo
po [0x00000000 description]
po node.position # (x = 0, y = 0, z = -10)
po node.rotation # (x = 1, y = 0, z = 0, w = 6.28318548)
po type(of: self.view)
po self.view.superclass
po [self.view class]
po [self.view superclass]
po cell.contentView.subviews
po _stdlib_getDemangledTypeName(x) # Swift.Array<Swift.Int>
p @import UIKit
po view.bounds.size.width
po indexPath.row
po indexPath.section
po [refreshControl actionsForTarget:self forControlEvent:UIControlEventValueChanged]
p self.view.frame
p (CGRect)[self.view frame]
po $arg1 # use w/exception breakpoint
po [NSUserDefaults.standardUserDefaults dictionaryRepresentation]
po Thread.callStackSymbols
po request.allHTTPHeaderFields
expr width = 25
expr debugFlag = true # reset
fr v
frame variable s # (__NSCFString *) s = 0x0 @"foo"
frame variable k # (__NSCFConstantString *) k = 0x0 @"bar"
frame variable d # (__NSDictionaryI *) d = 0x0 4 key/value pairs
- maven
mvn -h
mvn -v # 3.9 # Maven home: /usr/local/Cellar/maven/3.9.0/libexec
- node.js
/usr/local/bin/node -v # v19.7
node --help
node -e "require('repl').start({ignoreUndefined: true})"
node helloNode.js
# repl
.break
.clear
.exit
.help
.save session.js
.load session.js
LC terminate current command, twice to exit
LD exit
a = [1, 2, 3]; a.forEach(function(x){ console.log(x); });
//--------------------------------------
// node web server, min
// https://localhost:8443
// touch web/public/favicon.ico
var _fs = require('fs'),
_https = require('https'),
_url = require('url')
// lib
_https.createServer(httpsOptions, function(req, res) {
const url = _url.parse(req.url, true)
const fullUrl = fullUrlFunc(req, url.pathname)
console.log("\nrequest url:", fullUrl)
// console.log('request headers:', req.headers)
const response = '{ "hello" : "Node" }' //
res.writeHead(200, { 'Content-Type' : 'application/json' })
res.end(response)
}).listen(8443)
//--------------------------------------
// node web server
const _fs = require("fs"),
_https = require("https"),
_path = require("path"),
_url = require("url"),
rootDir = "web/public"
// lib
function serveFile(res, path) {
const file = rootDir + path
const fileExt = fileExtension(file)
console.log("serve file:", file)
_fs.readFile(file, function(err, data) {
if (fileExt == "css") {
res.writeHead(200, { "Content-Type" : "text/css" })
}
else if (fileExt == "js") {
res.writeHead(200, { "Content-Type" : "text/javascript" })
}
else {
res.writeHead(200, { "Content-Type" : "text/html" })
}
res.write(data)
res.end()
})
}
function serveTextFile(res, path) {
const file = rootDir + path
console.log("serve text file:", file)
_fs.readFile(file, function(err, data) {
res.writeHead(200, { "Content-Type" : "text/plain" })
res.write(data)
res.end()
});
}
function response_404(res, fullUrl) {
res.statusCode = 404
res.statusMessage = "Not found"
const html = '<!doctype html><html><head><title>404</title><meta charset=utf-8><link href="/style.css" rel="stylesheet"></head><body style="margin: 40px 60px 50% 60px;"><h1>Error</h1><br/><h2>Status Code: 404<br/>Resource not found: ' + fullUrl + '</h2></body></html>';
res.end(html)
}
function fileExists(path) {
const relPath = "./" + rootDir + path
if (fs.existsSync(relPath)) {
return true
}
return false
}
function fileExtension(file) {
const basename = _path.basename(file)
const firstDot = basename.indexOf(".")
const lastDot = basename.lastIndexOf(".")
const fileExt = _path.extname(basename).replace(/\.([a-z0-9]+).*/i, "$1") // css, htm
if (firstDot === lastDot) {
return fileExt
}
return basename.slice(firstDot, lastDot) + fileExt
}
_https.createServer(httpsOptions, function(req, res) {
const url = _url.parse(req.url, true)
const fullUrl = fullUrlFunc(req, url.pathname)
console.log("\nrequest url:", fullUrl)
// console.log('request headers:', req.headers)
if (url.pathname == "/") {
serveFile(res, "/index.htm")
}
else if (fileExists(url.pathname) === false) {
response_404(res, fullUrl)
}
else if (url.pathname.toLowerCase().includes("/source/")) {
serveTextFile(res, url.pathname)
}
else {
serveFile(res, url.pathname)
}
}).listen(8443)
//--------------------------------------
// node web server lib
var httpsOptions = {
key: fs.readFileSync("/etc/ssl/localhost/localhost.key.rsa"),
cert: fs.readFileSync("/etc/ssl/localhost/localhost.crt")
}
function fullUrlFunc(req, fullUrl) {
return (req.connection.encrypted ? "https://" : "http://") + req.headers.host + fullUrl
}
- openssl
SHA File Hash
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/openssl.1ssl.html
# openssl sha512 file
# SHA512(/Users/j19/file)= ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
- # pbcopy
# use w github setup
# pbcopy < ~/.ssh/id_rsa.pub # Public Key, share
# pbpaste
- ps – process status
ps aux
ps aux <pid>
- python
python -V # 2.7.16 /usr/bin/python
python3 -V # 3.9.6 /usr/local/bin/python3
python3 -V # 3.9.6 /usr/local/bin/python3 -> /usr/local/cellar/python3/3.9.6/bin/python3
python3 --help
python3 -c "print('foo')"
quit() # LD
pip3 -V # pip 9.0.1 /usr/local/lib/python3.6/site-packages (python 3.6)
# pip 19.2.3 /applications/xcode.app/contents/developer/library/frameworks/python3.framework/versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
sorted(['a', 'c', 'b']) # ['a', 'b', 'c']
sorted(['a', 'c', 'B']) # ['B', 'a', 'c']
sorted(['', ' ', '.', '/', '_']) # ['', ' ', '.', '/', '_']
sorted(['a', 'a.', 'a/', 'a_']) # ['a', 'a.', 'a/', 'a_']
sorted([1, 10, 9, 2, 20, 3]) # [1, 2, 3, 9, 10, 20]
for x in [' ', '.', '/', '_']:
print('\'{}\' = {}'.format(x, ord(x))) # ' ' = 32
'.' = 46
'/' = 47
'_' = 95
# --------------------------------------
# python file hash script, fileHash.py
import hashlib
def getFileHash(filePath):
md5 = hashlib.md5()
sha1 = hashlib.sha1()
sha224 = hashlib.sha224()
sha256 = hashlib.sha256()
sha384 = hashlib.sha384()
sha512 = hashlib.sha512()
with open(file, 'rb') as f:
for chunk in iter(lambda: f.read(8192), b''): # b'' = bytes literal
md5.update(chunk)
sha1.update(chunk)
sha224.update(chunk)
sha256.update(chunk)
sha384.update(chunk)
sha512.update(chunk)
print('md5: ' + md5.hexdigest())
print('sha1: ' + sha1.hexdigest())
print('sha224: ' + sha224.hexdigest())
print('sha256: ' + sha256.hexdigest())
print('sha384: ' + sha384.hexdigest())
print('sha512: ' + sha512.hexdigest())
print('file hash')
file = input('enter filename: ') # /users/a/file.txt
getFileHash(file)
# --------------------------------------
# example
python3 ~/fileHash.py
# file hash
# enter filename: /users/a/file.txt # abc
# md5: 900150983cd24fb0d6963f7d28e17f72
# sha1: a9993e364706816aba3e25717850c26c9cd0d89d
# sha224: 23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7
# sha256: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
# sha384: cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7
# sha512: ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
# --------------------------------------
# python azure blob storage sdk
# http://azure.microsoft.com/en-us/documentation/articles/storage-python-how-to-use-blob-storage/
# http://azure.microsoft.com/en-us/documentation/articles/python-how-to-install/
# https://pypi.python.org/pypi/azure
pip3 search azure
pip3 install azure
ls -l /usr/local/lib/python3.5/site-packages
from azure.storage.blob import BlobService
blob_service = BlobService(account_name='__', account_key='__')
blob_containers = blob_service.list_containers
for bc in blob_containers():
print(bc.name)
blobs = blob_service.list_blobs('blobs')
for b in blobs:
print(b.name)
# upload blob
blob_service.put_block_blob_from_path('blobs',
'foo.txt',
'/users/a/temp.txt',
x_ms_blob_content_type='application/txt')
# uploaded blob url
http://foo.blob.core.windows.net/blobs/foo.txt
blob_service.delete_blob('blobs', 'foo.txt')
- R
/library/frameworks/r.framework/resources/r --version
R.Version()
R.Version()$version # 4.2.2 (2022-10-31)"
R.Version()$nickname # Innocent and Trusting
?help # q
quit()
Sys.getenv()
ls()
?ls
ls(pattern = "^m.*")
?rm
# rm(m1)
# rm(list = ls()) # remove all
x = "foo"
nchar(x) # length 3
?matrix
?vector
- ruby
/usr/bin/ruby -v # 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin21]
ruby --help
- # sed substitute replace
sed -e s/foo/BAR/ file.txt
sed -e s/foo/BAR/g file.txt
# split
echo foo bar bam | sed 's/ /\n/g'
# foo
# bar
# bam
# --------------------------------------
# sed script html encode file
sed -f script.txt file.txt
sed -f script.txt file.txt > file.txt.out
s/\&/\&/g
s/</\</g
s/>/\>/g
s/"/\"/g
s/'/\'/g
# --------------------------------------
# sed script html decode file
s/\&/\&/g
s/\</</g
s/\>/>/g
s/\"/"/g
s/\'/'/g
- SSH Keys
# man ssh-keygen
# man ssh-agent
# man ssh-add
# ls -al ~/.ssh/
# ls -al /Users/*/.ssh/
# ls ~/.ssh/id_rsa.pub # Public Key, share
# ls ~/.ssh/id_rsa # Private Key, do not share
# ls ~/.ssh/config
# cat ~/.ssh/id_rsa.pub # Public Key, share
# cat ~/.ssh/id_rsa # Private Key, do not share
# cat ~/.ssh/config
## Generate an SSH Key Pair
# ssh-keygen -t rsa -b 4096 -C "email@foo.com"
## Add SSH Private Key to ssh-agent
# eval "$(ssh-agent -s)" # Start the ssh-agent in the background
# ssh-add -K ~/.ssh/id_rsa # Add your SSH Private Key to the ssh-agent and store your passphrase in the keychain
# Enter passphrase for /Users/a/.ssh/id_rsa:
# Identity added: /Users/a/.ssh/id_rsa (email@foo.com)
# Copy SSH Public Key and add to GitHub account, one-time setup
- translate
delete carriage return chars ^M
# tr -d '\r' < /users/a/bookmarks.html > /users/a/bookmarks_2.html
- translate regex replacement, lowercase uppercase
echo "Foo Bar 123" | tr 'A-Z' 'a-z' # foo bar 123
echo "Foo Bar 123" | tr 'a-z' 'A-Z' # FOO BAR 123
echo 'Foo Bar 123' | tr '0-9' '#' # Foo Bar ###
# lowercase
echo "Foo" | tr '[:upper:]' '[:lower:]'
# uppercase
echo "Foo" | tr '[:lower:]' '[:upper:]'
- vim
# 9.0.1023
# vim f.txt
:help
:q # quit, exit, escape from :help
esc # normal mode
. # repeat command
b # move 1 word back
dd # delete line
dw # delete word under cursor
i # insert mode
u # undo
w # move 1 word forward
:open f.txt
:w f.txt # save
:x # save (if changed) and quit
:split # h
:vertical split
L+w w # nav windows
L+w q # close current window, split
:ls
:colorscheme torte # b, zellner w
- line word count
wc -lw main.storyboard
- macOS
- connected servers/volumes
ls -1 /volumes/
ls -Alt /volumes/serverName/folder/
- apps
ls -1 /applications
open -a /applications/textEdit.app 'file.txt'
open -a /applications/xcode.app 'file.txt'
- run app executable from command line
# ./app
- fileMerge diff app
opendiff file1 file2
- diff
compare directories
diff -rq ./dir1 ./dir2 # show files that are diff
diff -rqs ./dir1 ./dir2 # show files that are same
- defaults read/write plist
- view app bundle info
defaults read demo.app/info.plist CFBundleIdentifier # com.foo.demo
defaults read demo.app/info CFBundleVersion
defaults read /users/a/Library/Developer/CoreSimulator/Devices/*/Data/Containers/Bundle/Application/*/.com.apple.mobile_container_manager.metadata.plist MCMMetadataIdentifier # com.foo.demo
- show hidden files
defaults read com.apple.finder AppleShowAllFiles
defaults write com.apple.finder AppleShowAllFiles YES # NO
# killall Finder
- plutil read/write plist
plutil -p info.plist
plutil -convert xml1 info.plist -o - # print plist as xml
- config vars
getconf DARWIN_USER_CACHE_DIR # /var/folders/a0/aaa000/C/
- file flags
ls -lO
chflags uchg file # lock
chflags nouchg file # unlock
chflags -R uchg /dir # lock
chflags -R nouchg /dir # unlock
- extended attributes
# ls -l ~/downloads/ # list file or dir, extended attributes are indicated by an @ char at the end of the ownership and permissions info
# -rw-r--r--@ 1 apaak staff 1024 Sep 12 10:00 foo.app
xattr ~/downloads/foo.app
# xattr -p com.apple.quarantine ~/downloads/foo.app # print attribute, file quarantine
# xattr -d com.apple.quarantine ~/downloads/foo.app # delete attribute
# xattr -c ~/downloads/foo.app # delete all attributes, clear
# xattr -rc ~/downloads # delete all attributes from dir and files
- change file modes
u user (owner)
g group
o other
a all (everyone, ugo)
# chmod 700 ~/downloads/foo.app
# chmod u=rwx ~/downloads/foo.app
# chmod o-rwx ~/downloads/foo.app
u g o octal
rwx rwx rwx mode
100 000 000 400 r user
100 100 100 444 r all
110 000 000 600 rw user
111 000 000 700 rwx user
- file commands
# set file create modified date
touch -t 201701020000 /users/a/file
# copy file
# cp file1.txt file2.txt
# copy folder
# cp -npR ~/temp ~/backup # mac
# cp -nR ~/temp /volumes/10.0.0.100/backup # win
# cut
# echo "a1 a2 a3 ax\nb1 b2 b3 b4 b5" | cut -f 1 -w
# echo "a1 a2 a3 ax\nb1 b2 b3 b4 b5" | cut -f 1,3 -w # output is tab delimited
# a1 a3
# b1 b3
# echo "a1 a2 a3 ax\nb1 b2 b3 b4 b5" | cut -f 1-4 -w
# echo "a1 a2 a3 ax\nb1 b2 b3 b4 b5" | cut -f 1-5 -w
# echo "a1 a2 a3 ax\nb1 b2 b3 b4 b5" | cut -f 1-10 -w
# echo "a0;a1 a2\nb0 b1 b2; b3" | cut -f 1 -d ';' # a0
# b0 b1 b2
# rename/move file
# mv file1.txt file2.txt
# batch file rename w/sed regex, test w/echo
# ls * | sed -e 'p;s/foo/bar/' | xargs -n2 echo # mv
# remove file
# rm tempFile.txt
# remove folder
# rm -dfr tempFolder
# create parent intermediate folders path
# mkdir -p ~/dev/c
# sort file
# sort file1.txt -o file2.txt
# list files
ls -lt ~/temp
ls -ltT ~/temp # seconds
ls -1lhRt ~/temp
ls -l
ls -1 # file names
ls -1R # file names, recursive
ls * | xargs -n1
du -ach ~/Library/Developer/Xcode/DerivedData/*/Build/Products/Debug/cocoa.app
# file search, default recursive
# sudo find / -iname '*.app'
# find . -iname '*.h'
# find . -iname '*.txt' -depth 1 # top level files
# find . -iname '*.txt' -maxdepth 2 # all files up to max depth
# find . -iname '*.txt' -depth 2 # only depth 2 files
# find ~ -iname 'java'
# find ~/Library/Developer/Xcode/DerivedData/*/Build/Products/Debug/cocoa.app -type f
# find and delete files
# find . -iname '.ds_store' -type f
# find . -iname '.ds_store' -type f -exec rm {} \;
# find . -iname '.ds_store' -type f -print0 | xargs -0 rm
# find and delete git folders
# find . -iname '.git' -type d # find only
# find . -iname '.xgit' -type d -print0 | xargs -0 rm -dfr
# find . -iname '.xgit' -type d -print0 | xargs -0 sudo rm -dfr
# delete git folders
# rm -dfr .xgit
- unzip
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/unzip.1.html
- lipo
lipo /users/a/lib.a -info # Non-fat file: /users/a/lib.a is architecture: x86_64
- make
brew: GNU "make" has been installed as "gmake"
gmake -v # GNU Make 4.4, Built for x86_64-apple-darwin21.6.0
gmake c_lean # WARN "clean" deletes executable and .o files
gmake build --file=Makefile
- nm
# display name list (symbol table)
# llvm symbol table dumper
nm --help
nm --version # apple llvm 14
nm --defined-only /users/a/lib.a
nm --defined-only --demangle /users/a/lib.a
# /Library/Developer/CommandLineTools/usr/bin/llvm-nm
# cd /Library/Developer/CommandLineTools/usr/bin/
# ./llvm-nm -version # apple llvm 14
- otool
# object file display tool
otool -h /users/a/lib.a
otool -D /users/a/lib.a
Archive : /users/a/lib.a
/users/a/lib.a(fooClass.o):
- macOS
- crash reports
- iOS
Xcode -> Window -> Devices and Simulators (CS 2)
View Device Logs
or
1. Catalina: Sync device with Finder Locations
Mojave: Sync device with iTunes
2. open ~/Library/Logs/CrashReporter/MobileDevice
3. ls -alt ~/Library/Logs/CrashReporter/MobileDevice/iphone/*.crash
- disk util
diskutil list
diskutil cs list
diskutil info /volumes/vol1
diskutil eraseVolume JHFS+ untitled_usb_drive "/volumes/a usb drive"
- create macOS bootable install usb drive
diskutil eraseVolume JHFS+ untitled_usb_drive "/volumes/usb drive to erase and use"
sudo "/Applications/Install macOS 12 Beta.app/contents/resources/createinstallmedia" --volume /volumes/untitled_usb_drive # Monterey
sudo "/Applications/Install macOS High Sierra.app/contents/resources/createinstallmedia" --volume /volumes/untitled_usb_drive --applicationpath "/Applications/Install macOS High Sierra.app"
- use bootable install usb drive
reboot, hold the Option key while booting to launch the Startup Manager, select the usb drive as the startup disk to begin install
- ip address
ifconfig
ifconfig | grep "inet "
- spoof mac address
get current mac address and interface name with Option + Click on Wifi icon in menu toolbar
use your actual interface name, eg en0, en1, en2
# networksetup -getmacaddress en0
# sudo ifconfig en0 ether 00:00:00:00:00:00
- network setup
networkSetup -getComputername
networkSetup -printCommands
networkSetup -listAllNetworkServices
networkSetup -getInfo wi-fi # wifi network service, ip address
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/networksetup.8.html
- sound processing
# afinfo soundFile.m4a
# afConvert -f caff -d aac soundFile.m4a soundFile.caf
- sysctl hw.machine # hw.machine: x86_64
- system diagnostics
# sudo sysdiagnose xcode
/var/tmp/sysdiagnose_2013.10.13_15-00-00-MDT_Xcode.tar.gz # output
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/sysdiagnose.1.html
- system_profiler
system_profiler -listDataTypes
system_profiler SPStorageDataType
system_profiler SPSoftwareDataType # System Software Overview
System Version: macOS 13.2 (22D49)
Kernel Version: Darwin 22.3
Boot Volume: Vol
Boot Mode: Normal
Time since boot: 1 day 4:04
Computer Name: dadoes
User Name: rick deckard (rickdeckard)
system_profiler SPHardwareDataType
system_profiler SPHardwareDataType | grep -i 'processor name:' | sed -e 's/ *Processor Name: *//'
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/system_profiler.8.html
- versions
14 Sonoma
13 Ventura 2022
12 Monterey
11 Big Sur 2020
10.15 Catalina
10.14 Mojave 2018
10.13 High Sierra
10.12 Sierra 2016 macos
10.11 El Capitan
10.10 Yosemite 2014
10.09 Mavericks
10.08 Mountain Lion 2012 os x
10.07 Lion
10.06 Snow Leopard 2010
10.05 Leopard
10.04 Tiger 2008 mac os x
- xcode
# beta, bash script
for _ in {1..10}
do
killall ReportCrash
killall SourceKitService
killall "Interface Builder Cocoa Touch Tool"
done
- xcodebuild
xcodebuild -help
/usr/bin/xcodebuild -showBuildSettings
xcodebuild -showsdks
xcodebuild -dry-run -project app.xcodeproj
xcodebuild -list -project app.xcodeproj
xcodebuild -showBuildSettings -project app.xcodeproj
# xcodebuild -showBuildSettings -project app.xcodeproj | less
- xcode-select
xcode-select -h
sudo xcode-select --switch /Applications/Xcode-Beta.app
xcode-select -p # /Applications/Xcode-Beta.app/Contents/Developer
- xcrun --show-sdk-path --sdk iphoneos # /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.4.sdk
xcrun --show-sdk-path --sdk macosx # /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
xcrun --show-sdk-path --sdk watchos # /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS4.3.sd
xcrun simctl
xcrun simctl terminate booted com.expressionSoftware.app
xcrun simctl launch booted com.apple.Preferences # launch iOS settings
# xcrun simctl delete unavailable # delete devices that are not supported by the current Xcode SDK
xcrun swift-demangle __TFC4Demo6MainVC5debugfT_T_ # Demo.MainVC.debug ()()
8/2/16
notes
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment